diff options
173 files changed, 1486 insertions, 886 deletions
diff --git a/.devcontainer/README.md b/.devcontainer/README.md index da540711fc8..46494103af3 100644 --- a/.devcontainer/README.md +++ b/.devcontainer/README.md @@ -4,7 +4,7 @@ Make sure you have the [VSCode DevContainer](https://code.visualstudio.com/docs/devcontainers/containers) extensions installed. If you open the project, VSCode will ask you if you want to open it inside of the DevContainer. If that's not the case, use <kbd>F1</kbd>→*Dev Containers: Open Folder in Container*. -Alternatively open the project directly in [GitHub Codespaces](https://github.com/features/codespaces). +Alternatively open the project directly in [GitHub Codespaces](https://github.com/codespaces/new?hide_repo_select=true&ref=master&repo=60243197&skip_quickstart=true). That's already it. Everything else will be configured automatically by the Containers startup routine. @@ -69,4 +69,4 @@ any other user. The Apache webserver is already configured to automatically try to connect to a debugger process listening on port `9003`. To start the VSCode debugger process, use the delivered debug profile `Listen for XDebug`. After you started the VSCode debugger, just navigate to the appropriate Nextcloud URL to get your -debug hits.
\ No newline at end of file +debug hits. diff --git a/apps/comments/l10n/sr.js b/apps/comments/l10n/sr.js index d7287ee5805..4f3047b7049 100644 --- a/apps/comments/l10n/sr.js +++ b/apps/comments/l10n/sr.js @@ -33,6 +33,7 @@ OC.L10N.register( "An error occurred while trying to create the comment" : "Грешка приликом покушаја креирања коментара", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Поменути сте за „{file}”, у коментару корисника које је од тада обрисан", "_%n unread comment_::_%n unread comments_" : ["%nнепрочитани коментар","%nнепрочитана коментара ","%n непрочитаних коментара"], + "Write a message …" : "Напиши поруку…", "\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "„@” за помињања, „:” за емођи, „/” за паметни бирач" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/comments/l10n/sr.json b/apps/comments/l10n/sr.json index 18b7067c939..13f691d7d46 100644 --- a/apps/comments/l10n/sr.json +++ b/apps/comments/l10n/sr.json @@ -31,6 +31,7 @@ "An error occurred while trying to create the comment" : "Грешка приликом покушаја креирања коментара", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Поменути сте за „{file}”, у коментару корисника које је од тада обрисан", "_%n unread comment_::_%n unread comments_" : ["%nнепрочитани коментар","%nнепрочитана коментара ","%n непрочитаних коментара"], + "Write a message …" : "Напиши поруку…", "\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "„@” за помињања, „:” за емођи, „/” за паметни бирач" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/comments/l10n/sv.js b/apps/comments/l10n/sv.js index b46ebf005fe..98f1b62104c 100644 --- a/apps/comments/l10n/sv.js +++ b/apps/comments/l10n/sv.js @@ -33,6 +33,7 @@ OC.L10N.register( "An error occurred while trying to create the comment" : "Ett fel uppstod när du försökte skapa kommentaren", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Du har nämnts i \"{file}\", i en kommentar av en användare som sedan har blivit borttagen", "_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"], + "Write a message …" : "Skriv ett meddelande …", "\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "\"@\" för omnämnanden, \":\" för emoji, \"/\" för smart picker" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/comments/l10n/sv.json b/apps/comments/l10n/sv.json index 039520d0d4b..ef659deaa61 100644 --- a/apps/comments/l10n/sv.json +++ b/apps/comments/l10n/sv.json @@ -31,6 +31,7 @@ "An error occurred while trying to create the comment" : "Ett fel uppstod när du försökte skapa kommentaren", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Du har nämnts i \"{file}\", i en kommentar av en användare som sedan har blivit borttagen", "_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"], + "Write a message …" : "Skriv ett meddelande …", "\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "\"@\" för omnämnanden, \":\" för emoji, \"/\" för smart picker" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/comments/l10n/zh_TW.js b/apps/comments/l10n/zh_TW.js index c2d8e7e17a6..a4505a62997 100644 --- a/apps/comments/l10n/zh_TW.js +++ b/apps/comments/l10n/zh_TW.js @@ -9,6 +9,7 @@ OC.L10N.register( "%1$s commented on %2$s" : "%1$s 已對 %2$s 留言", "{author} commented on {file}" : "{author} 已對 {file} 留言", "<strong>Comments</strong> for files" : "檔案的<strong>留言</strong>", + "You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "一個已刪除的帳號在「{file}」的留言中提及您。", "{user} mentioned you in a comment on \"{file}\"" : "{user} 在「{file}」的留言中提到您", "Files app plugin to add comments to files" : "用於對檔案加入留言的檔案應用程式擴充元件", "Edit comment" : "編輯留言", @@ -32,6 +33,7 @@ OC.L10N.register( "An error occurred while trying to create the comment" : "嘗試建立留言時發生錯誤", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "一個已被刪除的使用者在「{file}」的留言中提到您", "_%n unread comment_::_%n unread comments_" : ["%n 則未讀留言"], + "Write a message …" : "撰寫訊息……", "\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "「@」表示提及、「:」表示表情符號、「/」表示智慧型選取程式" }, "nplurals=1; plural=0;"); diff --git a/apps/comments/l10n/zh_TW.json b/apps/comments/l10n/zh_TW.json index 7ae4611786c..9b141a0febd 100644 --- a/apps/comments/l10n/zh_TW.json +++ b/apps/comments/l10n/zh_TW.json @@ -7,6 +7,7 @@ "%1$s commented on %2$s" : "%1$s 已對 %2$s 留言", "{author} commented on {file}" : "{author} 已對 {file} 留言", "<strong>Comments</strong> for files" : "檔案的<strong>留言</strong>", + "You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "一個已刪除的帳號在「{file}」的留言中提及您。", "{user} mentioned you in a comment on \"{file}\"" : "{user} 在「{file}」的留言中提到您", "Files app plugin to add comments to files" : "用於對檔案加入留言的檔案應用程式擴充元件", "Edit comment" : "編輯留言", @@ -30,6 +31,7 @@ "An error occurred while trying to create the comment" : "嘗試建立留言時發生錯誤", "You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "一個已被刪除的使用者在「{file}」的留言中提到您", "_%n unread comment_::_%n unread comments_" : ["%n 則未讀留言"], + "Write a message …" : "撰寫訊息……", "\"@\" for mentions, \":\" for emoji, \"/\" for smart picker" : "「@」表示提及、「:」表示表情符號、「/」表示智慧型選取程式" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/dav/l10n/fa.js b/apps/dav/l10n/fa.js index 30a30054e5c..129b6163533 100644 --- a/apps/dav/l10n/fa.js +++ b/apps/dav/l10n/fa.js @@ -50,9 +50,9 @@ OC.L10N.register( "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}", "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}", "Calendar, contacts and tasks" : "Calendar, contacts and tasks", - "A <strong>calendar</strong> was modified" : "A <strong>calendar</strong> was modified", - "A calendar <strong>event</strong> was modified" : "A calendar <strong>event</strong> was modified", - "A calendar <strong>to-do</strong> was modified" : "A calendar <strong>to-do</strong> was modified", + "A <strong>calendar</strong> was modified" : "یک تقویم تغییر کرد", + "A calendar <strong>event</strong> was modified" : "یک رویداد ثبت شده در تقویم تغییر کرد", + "A calendar <strong>to-do</strong> was modified" : "یک کار ثبت شده در تقویم تغییر کرد", "Contact birthdays" : "Contact birthdays", "Death of %s" : "Death of %s", "Untitled calendar" : "تقویم بدون عنوان", @@ -117,7 +117,7 @@ OC.L10N.register( "You deleted contact {card} from address book {addressbook}" : "You deleted contact {card} from address book {addressbook}", "{actor} updated contact {card} in address book {addressbook}" : "{actor} updated contact {card} in address book {addressbook}", "You updated contact {card} in address book {addressbook}" : "You updated contact {card} in address book {addressbook}", - "A <strong>contact</strong> or <strong>address book</strong> was modified" : "A <strong>contact</strong> or <strong>address book</strong> was modified", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "یک مخاطب یا دفترچه آدرس تغییر کرد", "Accounts" : "Accounts", "System address book which holds all accounts" : "System address book which holds all accounts", "File is not updatable: %1$s" : "File is not updatable: %1$s", @@ -189,7 +189,7 @@ OC.L10N.register( "Are you accepting the invitation?" : "Are you accepting the invitation?", "Tentative" : "آزمایشی", "Your attendance was updated successfully." : "Your attendance was updated successfully.", - "To-dos" : "To-dos", + "To-dos" : "کارهای برای انجام", "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "If you configure your working hours, other users will see when you are out of office when they book a meeting." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/dav/l10n/fa.json b/apps/dav/l10n/fa.json index f0c9a6b00dd..296de337901 100644 --- a/apps/dav/l10n/fa.json +++ b/apps/dav/l10n/fa.json @@ -48,9 +48,9 @@ "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}", "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}", "Calendar, contacts and tasks" : "Calendar, contacts and tasks", - "A <strong>calendar</strong> was modified" : "A <strong>calendar</strong> was modified", - "A calendar <strong>event</strong> was modified" : "A calendar <strong>event</strong> was modified", - "A calendar <strong>to-do</strong> was modified" : "A calendar <strong>to-do</strong> was modified", + "A <strong>calendar</strong> was modified" : "یک تقویم تغییر کرد", + "A calendar <strong>event</strong> was modified" : "یک رویداد ثبت شده در تقویم تغییر کرد", + "A calendar <strong>to-do</strong> was modified" : "یک کار ثبت شده در تقویم تغییر کرد", "Contact birthdays" : "Contact birthdays", "Death of %s" : "Death of %s", "Untitled calendar" : "تقویم بدون عنوان", @@ -115,7 +115,7 @@ "You deleted contact {card} from address book {addressbook}" : "You deleted contact {card} from address book {addressbook}", "{actor} updated contact {card} in address book {addressbook}" : "{actor} updated contact {card} in address book {addressbook}", "You updated contact {card} in address book {addressbook}" : "You updated contact {card} in address book {addressbook}", - "A <strong>contact</strong> or <strong>address book</strong> was modified" : "A <strong>contact</strong> or <strong>address book</strong> was modified", + "A <strong>contact</strong> or <strong>address book</strong> was modified" : "یک مخاطب یا دفترچه آدرس تغییر کرد", "Accounts" : "Accounts", "System address book which holds all accounts" : "System address book which holds all accounts", "File is not updatable: %1$s" : "File is not updatable: %1$s", @@ -187,7 +187,7 @@ "Are you accepting the invitation?" : "Are you accepting the invitation?", "Tentative" : "آزمایشی", "Your attendance was updated successfully." : "Your attendance was updated successfully.", - "To-dos" : "To-dos", + "To-dos" : "کارهای برای انجام", "If you configure your working hours, other users will see when you are out of office when they book a meeting." : "If you configure your working hours, other users will see when you are out of office when they book a meeting." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/dav/l10n/sr.js b/apps/dav/l10n/sr.js index 9031e3e7920..ef73f66a105 100644 --- a/apps/dav/l10n/sr.js +++ b/apps/dav/l10n/sr.js @@ -151,7 +151,9 @@ OC.L10N.register( "No outstanding DAV system address book sync." : "Не постоји ниједна синхронизација DAV системског адресара која треба да се обави.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV синхронизација системског адресара се још увек није покренула јер ваша инстанца има више од 1000 корисника или јер је дошло до грешке. Молимо вас да га ручно покренете командом „occ dav:sync-system-addressbook”.", "WebDAV endpoint" : "WebDAV крајња тачка", + "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Није могло да се провери да ли ваш веб сервер исправно подешен тако да се омогући синхронизација фајлова преко WebDAV. Молимо вас да проверите ручно.", "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Сервер није правилно подешен за синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.", + "Your web server is properly set up to allow file synchronization over WebDAV." : "Ваш веб сервер исправно подешен тако да се омогући синхронизација фајлова преко WebDAV.", "Migrated calendar (%1$s)" : "Мигрирани календар (%1$s)", "Calendars including events, details and attendees" : "Календари који укључују догађаје, детаље и учеснике", "Contacts and groups" : "Контакти и групе", diff --git a/apps/dav/l10n/sr.json b/apps/dav/l10n/sr.json index bb96c712107..b5404c787ec 100644 --- a/apps/dav/l10n/sr.json +++ b/apps/dav/l10n/sr.json @@ -149,7 +149,9 @@ "No outstanding DAV system address book sync." : "Не постоји ниједна синхронизација DAV системског адресара која треба да се обави.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV синхронизација системског адресара се још увек није покренула јер ваша инстанца има више од 1000 корисника или јер је дошло до грешке. Молимо вас да га ручно покренете командом „occ dav:sync-system-addressbook”.", "WebDAV endpoint" : "WebDAV крајња тачка", + "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Није могло да се провери да ли ваш веб сервер исправно подешен тако да се омогући синхронизација фајлова преко WebDAV. Молимо вас да проверите ручно.", "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Сервер није правилно подешен за синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.", + "Your web server is properly set up to allow file synchronization over WebDAV." : "Ваш веб сервер исправно подешен тако да се омогући синхронизација фајлова преко WebDAV.", "Migrated calendar (%1$s)" : "Мигрирани календар (%1$s)", "Calendars including events, details and attendees" : "Календари који укључују догађаје, детаље и учеснике", "Contacts and groups" : "Контакти и групе", diff --git a/apps/dav/l10n/sv.js b/apps/dav/l10n/sv.js index 6650538ecd0..0d65e587beb 100644 --- a/apps/dav/l10n/sv.js +++ b/apps/dav/l10n/sv.js @@ -151,7 +151,9 @@ OC.L10N.register( "No outstanding DAV system address book sync." : "Ingen utestående synkronisering för DAV-systemets adressbok.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV-systemets adressbokssynkronisering har inte körts ännu eftersom din instans har fler än 1000 användare eller för att ett fel uppstod. Kör det manuellt genom att anropa \"occ dav:sync-system-addressbook\".", "WebDAV endpoint" : "WebDAV endpoint", + "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Det gick inte att kontrollera att din webbserver är korrekt inställd för att tillåta filsynkronisering över WebDAV. Kontrollera manuellt.", "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Din webbserver är ännu inte korrekt inställd för att tillåta filsynkronisering, eftersom WebDAV-gränssnittet verkar vara trasigt.", + "Your web server is properly set up to allow file synchronization over WebDAV." : "Din webbserver är korrekt inställd för att tillåta filsynkronisering över WebDAV.", "Migrated calendar (%1$s)" : "Migrerade kalender (%1$s)", "Calendars including events, details and attendees" : "Kalendrar inklusive händelser, detaljer och deltagare", "Contacts and groups" : "Kontakter och grupper", diff --git a/apps/dav/l10n/sv.json b/apps/dav/l10n/sv.json index 4a75db4b1c1..006ef711b49 100644 --- a/apps/dav/l10n/sv.json +++ b/apps/dav/l10n/sv.json @@ -149,7 +149,9 @@ "No outstanding DAV system address book sync." : "Ingen utestående synkronisering för DAV-systemets adressbok.", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV-systemets adressbokssynkronisering har inte körts ännu eftersom din instans har fler än 1000 användare eller för att ett fel uppstod. Kör det manuellt genom att anropa \"occ dav:sync-system-addressbook\".", "WebDAV endpoint" : "WebDAV endpoint", + "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Det gick inte att kontrollera att din webbserver är korrekt inställd för att tillåta filsynkronisering över WebDAV. Kontrollera manuellt.", "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Din webbserver är ännu inte korrekt inställd för att tillåta filsynkronisering, eftersom WebDAV-gränssnittet verkar vara trasigt.", + "Your web server is properly set up to allow file synchronization over WebDAV." : "Din webbserver är korrekt inställd för att tillåta filsynkronisering över WebDAV.", "Migrated calendar (%1$s)" : "Migrerade kalender (%1$s)", "Calendars including events, details and attendees" : "Kalendrar inklusive händelser, detaljer och deltagare", "Contacts and groups" : "Kontakter och grupper", diff --git a/apps/dav/l10n/zh_TW.js b/apps/dav/l10n/zh_TW.js index 7b9f0b63f33..9d9bb30ec89 100644 --- a/apps/dav/l10n/zh_TW.js +++ b/apps/dav/l10n/zh_TW.js @@ -151,7 +151,9 @@ OC.L10N.register( "No outstanding DAV system address book sync." : "沒有未完成的 DAV 系統通訊錄同步。", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV 系統通訊錄同步尚未執行,因為您的站台有超過 1000 個使用者,或是因為遇到錯誤。請透過呼叫「occ dav:sync-system-addressbook」手動執行。", "WebDAV endpoint" : "WebDAV 端點", + "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "無法檢查您的網路伺服器是否已正確設定以允許透過 WebDAV 進行檔案同步。請手動檢查。", "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "WebDAV 介面似乎為故障狀態,導致您的網頁伺服器無法提供檔案同步功能。", + "Your web server is properly set up to allow file synchronization over WebDAV." : "您的網路伺服器已正確設定為允許透過 WebDAV 進行檔案同步。", "Migrated calendar (%1$s)" : "已導入的行事曆 (%1$s)", "Calendars including events, details and attendees" : "行事曆,包含事件、詳細資訊及參與者", "Contacts and groups" : "聯絡人與群組", diff --git a/apps/dav/l10n/zh_TW.json b/apps/dav/l10n/zh_TW.json index a7aacd5d317..cbe623892cb 100644 --- a/apps/dav/l10n/zh_TW.json +++ b/apps/dav/l10n/zh_TW.json @@ -149,7 +149,9 @@ "No outstanding DAV system address book sync." : "沒有未完成的 DAV 系統通訊錄同步。", "The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV 系統通訊錄同步尚未執行,因為您的站台有超過 1000 個使用者,或是因為遇到錯誤。請透過呼叫「occ dav:sync-system-addressbook」手動執行。", "WebDAV endpoint" : "WebDAV 端點", + "Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "無法檢查您的網路伺服器是否已正確設定以允許透過 WebDAV 進行檔案同步。請手動檢查。", "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "WebDAV 介面似乎為故障狀態,導致您的網頁伺服器無法提供檔案同步功能。", + "Your web server is properly set up to allow file synchronization over WebDAV." : "您的網路伺服器已正確設定為允許透過 WebDAV 進行檔案同步。", "Migrated calendar (%1$s)" : "已導入的行事曆 (%1$s)", "Calendars including events, details and attendees" : "行事曆,包含事件、詳細資訊及參與者", "Contacts and groups" : "聯絡人與群組", diff --git a/apps/federatedfilesharing/lib/Notifier.php b/apps/federatedfilesharing/lib/Notifier.php index ffbc3868a3a..ae74dd6419d 100644 --- a/apps/federatedfilesharing/lib/Notifier.php +++ b/apps/federatedfilesharing/lib/Notifier.php @@ -94,7 +94,7 @@ class Notifier implements INotifier { } // Read the language from the notification - $l = $this->factory->get('files_sharing', $languageCode); + $l = $this->factory->get('federatedfilesharing', $languageCode); switch ($notification->getSubject()) { // Deal with known subjects diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js index 85a5be2647c..5600ac85b1c 100644 --- a/apps/files/l10n/fa.js +++ b/apps/files/l10n/fa.js @@ -148,7 +148,7 @@ OC.L10N.register( "You moved {oldfile} to {newfile}" : "شما {oldfile} را به {newfile} منتقل کردید", "{user} moved {oldfile} to {newfile}" : "{user} {oldfile} را به {newfile} منتقل کرد", "A file has been added to or removed from your <strong>favorites</strong>" : "یک فایل به موارد دلخواه شما اضافه یا حذف شده است", - "A file or folder has been <strong>changed</strong>" : "پرونده یا پوشهای به <strong>تغییر</strong> داده شد", + "A file or folder has been <strong>changed</strong>" : "یک فایل یا پوشه تغییر کرده است", "A favorite file or folder has been <strong>changed</strong>" : "یک فایل یا پوشه مورد علاقه تغییر کرده است", "Upload (max. %s)" : "آپلود (بیشترین سایز %s)", "Accept" : "قبول", @@ -276,7 +276,7 @@ OC.L10N.register( "Deleted files" : "پروندههای حذف شده", "Shares" : "اشتراک گذاری ها", "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", - "Shared with you" : "Shared with you", + "Shared with you" : "به اشتراک گذاشته شده با شما", "Deleted shares" : "اشتراک گذاری های حذف شده", "Pending shares" : "اشتراک در حال انتظار ", "This file has the tag {tag}" : "این فایل دارای تگ {tag} است", diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json index f579165a93d..1d7479f81fb 100644 --- a/apps/files/l10n/fa.json +++ b/apps/files/l10n/fa.json @@ -146,7 +146,7 @@ "You moved {oldfile} to {newfile}" : "شما {oldfile} را به {newfile} منتقل کردید", "{user} moved {oldfile} to {newfile}" : "{user} {oldfile} را به {newfile} منتقل کرد", "A file has been added to or removed from your <strong>favorites</strong>" : "یک فایل به موارد دلخواه شما اضافه یا حذف شده است", - "A file or folder has been <strong>changed</strong>" : "پرونده یا پوشهای به <strong>تغییر</strong> داده شد", + "A file or folder has been <strong>changed</strong>" : "یک فایل یا پوشه تغییر کرده است", "A favorite file or folder has been <strong>changed</strong>" : "یک فایل یا پوشه مورد علاقه تغییر کرده است", "Upload (max. %s)" : "آپلود (بیشترین سایز %s)", "Accept" : "قبول", @@ -274,7 +274,7 @@ "Deleted files" : "پروندههای حذف شده", "Shares" : "اشتراک گذاری ها", "Shared with others" : "موارد به اشتراک گذاشته شده با دیگران", - "Shared with you" : "Shared with you", + "Shared with you" : "به اشتراک گذاشته شده با شما", "Deleted shares" : "اشتراک گذاری های حذف شده", "Pending shares" : "اشتراک در حال انتظار ", "This file has the tag {tag}" : "این فایل دارای تگ {tag} است", diff --git a/apps/files_sharing/lib/Notification/Notifier.php b/apps/files_sharing/lib/Notification/Notifier.php index 20ad9c7e755..245bae25ef1 100644 --- a/apps/files_sharing/lib/Notification/Notifier.php +++ b/apps/files_sharing/lib/Notification/Notifier.php @@ -249,7 +249,7 @@ class Notifier implements INotifier { $notification->addParsedAction($acceptAction); $rejectAction = $notification->createAction(); - $rejectAction->setParsedLabel($l->t('Reject')) + $rejectAction->setParsedLabel($l->t('Decline')) ->setLink($this->url->linkToOCSRouteAbsolute('files_sharing.ShareAPI.deleteShare', ['id' => $share->getId()]), 'DELETE') ->setPrimary(false); $notification->addParsedAction($rejectAction); diff --git a/apps/settings/css/settings.css b/apps/settings/css/settings.css index e39b2b56565..dde40eccdc4 100644 --- a/apps/settings/css/settings.css +++ b/apps/settings/css/settings.css @@ -1 +1 @@ -input#openid,input#webdav{width:20em}.clear{clear:both}.nav-icon-personal-settings{background-image:var(--icon-personal-dark)}.nav-icon-security{background-image:var(--icon-toggle-filelist-dark)}.nav-icon-clientsbox{background-image:var(--icon-change-dark)}.nav-icon-federated-cloud{background-image:var(--icon-share-dark)}.nav-icon-second-factor-backup-codes,.nav-icon-ssl-root-certificate{background-image:var(--icon-password-dark)}#personal-settings-avatar-container{display:inline-grid;grid-template-columns:1fr;grid-template-rows:2fr 1fr 2fr;vertical-align:top}.profile-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-show-container{width:100%}.personal-settings-setting-box .section{padding:10px 30px}.personal-settings-setting-box .section .headerbar-label{margin-bottom:0}.personal-settings-setting-box .section input[type=text],.personal-settings-setting-box .section input[type=email],.personal-settings-setting-box .section input[type=tel],.personal-settings-setting-box .section input[type=url]{width:100%}.personal-settings-setting-box-profile{grid-row:3/5}.personal-settings-setting-box-detail{grid-row:5}.personal-settings-setting-box-detail--without-profile{grid-row:3}select#timezone{width:100%}#personal-settings{display:grid;padding:20px;max-width:1700px;grid-template-columns:repeat(auto-fill, minmax(min(100%, 300px), 1fr));grid-column-gap:10px}#personal-settings .section{padding:10px 10px;border:0}#personal-settings .section h2{margin-bottom:12px}#personal-settings .section h3>label{font-weight:bold}#personal-settings .personal-info{margin-right:10%;margin-bottom:12px;margin-top:12px}#personal-settings .personal-info[class^=icon-],#personal-settings .personal-info[class*=" icon-"]{background-position:0px 2px;padding-left:30px;opacity:.7}.development-notice{text-align:center}.development-notice a:not(.link-button){text-decoration:underline}.link-button{display:inline-block;margin:16px;padding:14px 20px;background-color:var(--color-primary-element);color:var(--color-primary-element-text);border-radius:var(--border-radius-pill);border:1px solid var(--color-primary-element);box-shadow:0 2px 9px var(--color-box-shadow)}.link-button:active,.link-button:hover,.link-button:focus,.link-button:focus-visible{box-shadow:0 0 0 4px var(--color-main-background) !important;outline:2px solid var(--color-main-text) !important}.link-button.icon-file{padding-left:48px;background-position:24px}.personal-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-settings-container:after{clear:both}.personal-settings-container>div h3{position:relative;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start;width:100%;align-items:center;gap:8px}.personal-settings-container>div h3>label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-settings-container>div>form span[class^=icon-checkmark],.personal-settings-container>div>form span[class^=icon-error]{position:relative;right:8px;top:-28px;pointer-events:none;float:right}.personal-settings-container .verify{position:relative;left:100%;top:0;height:0}.personal-settings-container .verify img{padding:12px 7px 6px}.personal-settings-container .verify-action{cursor:pointer}.personal-settings-container input:disabled{background-color:#fff;color:#000;border:none;opacity:100}.verification-dialog{display:none;right:-9px;top:40px;width:275px}.verification-dialog p{padding:10px}.verification-dialog .verificationCode{font-family:monospace;display:block;overflow-wrap:break-word}.federation-menu{position:relative;cursor:pointer;width:44px;height:44px;padding:10px;margin:0;background:none;border:none}.federation-menu:hover,.federation-menu:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.federation-menu:hover .icon-federation-menu,.federation-menu:focus .icon-federation-menu{opacity:.8}.federation-menu .icon-federation-menu{padding-left:16px;background-size:16px;background-position:left center;opacity:.3;cursor:inherit}.federation-menu .icon-federation-menu .icon-triangle-s{display:inline-block;vertical-align:middle;cursor:inherit}.federation-menu .federationScopeMenu{top:44px}.federation-menu .federationScopeMenu.popovermenu .menuitem{font-size:12.8px;line-height:1.6em}.federation-menu .federationScopeMenu.popovermenu .menuitem .menuitem-text-detail{opacity:.75}.federation-menu .federationScopeMenu.popovermenu .menuitem.active{box-shadow:inset 2px 0 var(--color-primary-element)}.federation-menu .federationScopeMenu.popovermenu .menuitem.active .menuitem-text{font-weight:bold}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled{opacity:.5;cursor:default}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled *{cursor:default}.clientsbox img{height:60px}#sslCertificate tr.expired{background-color:rgba(255,0,0,.5)}#sslCertificate td{padding:5px}#displaynameerror,#displaynamechanged{display:none}input#identity{width:20em}#showWizard{display:inline-block}.msg.success{color:#fff;background-color:#47a447;padding:3px}.msg.error{color:#fff;background-color:#d2322d;padding:3px}table.nostyle label{margin-right:2em}table.nostyle td{padding:.2em 0}#security-password #passwordform{display:flex;flex-wrap:wrap;flex-direction:column;gap:1rem}#security-password #passwordform .input-control{display:flex;flex-wrap:wrap;flex-direction:column}#security-password #passwordform .input-control label{margin-bottom:.5rem}#security-password #passwordform #pass1,#security-password #passwordform .personal-show-container{flex-shrink:1;width:300px;min-width:150px}#security-password #passwordform .personal-show-container #pass2{position:relative;top:.5rem}#security-password #passwordform .personal-show-container .personal-show-label{top:34px !important;margin-right:0;margin-top:0 !important;right:3px}#security-password #passwordform #pass2{width:100%}#security-password #passwordform .password-state{display:inline-block}#security-password #passwordform .strengthify-wrapper{position:absolute;left:0;width:100%;border-radius:0 0 2px 2px;margin-top:5px;overflow:hidden;height:3px}#two-factor-auth h3{margin-top:24px}#two-factor-auth li>div{margin-left:20px}#two-factor-auth .two-factor-provider-settings-icon{width:16px;height:16px;vertical-align:sub;filter:var(--background-invert-if-dark)}.isgroup .groupname{width:85%;display:block;overflow:hidden;text-overflow:ellipsis}.isgroup.active .groupname{width:65%}li.active .delete,li.active .rename{display:block}.app-navigation-entry-utils .delete,.app-navigation-entry-utils .rename{display:none}#usersearchform{position:absolute;top:2px;right:0}#usersearchform input{width:150px}#usersearchform label{font-weight:bold}table.grid{width:100%}table.grid th{height:2em;padding:0 1em 0 0;border-bottom:1px solid var(--color-border);text-align:left;font-weight:normal}table.grid td{border-bottom:1px solid var(--color-border);padding:0 1em 0 0;text-align:left;font-weight:normal}td.name,th.name{padding-left:.8em;min-width:5em;max-width:12em;text-overflow:ellipsis;overflow:hidden}td.password,th.password{padding-left:.8em}td.password>img,th.password>img{visibility:hidden}td.displayName>img,th.displayName>img{visibility:hidden}td.password,td.mailAddress,th.password,th.mailAddress{min-width:5em;max-width:12em;cursor:pointer}td.password span,td.mailAddress span,th.password span,th.mailAddress span{width:90%;display:inline-block;text-overflow:ellipsis;overflow:hidden}td.mailAddress,th.mailAddress{cursor:pointer}td.password>span,th.password>span{margin-right:1.2em;color:#c7c7c7}span.usersLastLoginTooltip{white-space:nowrap}#app-content>svg.app-filter{float:left;height:0;width:0}#app-category-app-bundles{margin-bottom:20px}.appinfo{margin:1em 40px}#app-navigation img{margin-bottom:-3px;margin-right:6px;width:16px}#app-navigation li span.no-icon{padding-left:32px}#app-navigation ul li.active>span.utils .delete,#app-navigation ul li.active>span.utils .rename{display:block}#app-navigation .appwarning{background:#fcc}#app-navigation.appwarning:hover{background:#fbb}#app-navigation .app-external{color:var(--color-text-maxcontrast)}span.version{margin-left:1em;margin-right:1em;color:var(--color-text-maxcontrast)}.app-version{color:var(--color-text-maxcontrast)}.app-settings-content #searchresults{display:none}#apps-list.store .section{border:0}#apps-list.store .app-name{display:block;margin:5px 0}#apps-list.store .app-image-icon .icon-settings-dark{width:100%;height:150px;background-size:45px;opacity:.5}#apps-list.store .app-score-image{height:14px}#apps-list.store .actions{margin-top:10px}#apps-list.store .actions button{margin:10px 0}#app-sidebar #app-details-view h2 .icon-settings-dark,#app-sidebar #app-details-view h2 svg{display:inline-block;width:16px;height:16px;margin-right:10px;opacity:.7}#app-sidebar #app-details-view .app-author,#app-sidebar #app-details-view .app-licence{color:var(--color-text-maxcontrast)}#app-sidebar #app-details-view .app-dependencies{margin:10px 0}#app-sidebar #app-details-view .app-description p{margin:10px 0}#app-sidebar #app-details-view .close{position:absolute;top:0;right:0;padding:14px;opacity:.5;z-index:1;width:44px;height:44px}#app-sidebar #app-details-view .actions{display:flex;align-items:center}#app-sidebar #app-details-view .actions .app-groups{padding:5px}#app-sidebar #app-details-view .appslink{text-decoration:underline;margin-right:5px}#app-sidebar #app-details-view .app-level,#app-sidebar #app-details-view .actions,#app-sidebar #app-details-view .documentation,#app-sidebar #app-details-view .app-dependencies,#app-sidebar #app-details-view .app-description{margin:20px 0}@media only screen and (min-width: 1601px){.store .section{width:25%}.with-app-sidebar .store .section{width:33%}}@media only screen and (max-width: 1600px){.store .section{width:25%}.with-app-sidebar .store .section{width:33%}}@media only screen and (max-width: 1400px){.store .section{width:33%}.with-app-sidebar .store .section{width:50%}}@media only screen and (max-width: 900px){.store .section{width:50%}.with-app-sidebar .store .section{width:100%}}@media only screen and (max-width: 1024px){.store .section{width:50%}}@media only screen and (max-width: 480px){.store .section{width:100%}}@media only screen and (max-width: 900px){.apps-list.installed .app-version,.apps-list.installed .app-level{display:none !important}}@media only screen and (max-width: 500px){.apps-list.installed .app-groups{display:none !important}}.section{margin-bottom:0}.section:not(:last-child){border-bottom:1px solid var(--color-border)}.section h2{margin-bottom:22px}.section h2 .icon-info{padding:6px 20px;vertical-align:text-bottom;display:inline-block}.followupsection{display:block;padding:0 30px 30px 30px}.app-image{position:relative;height:150px;opacity:1;overflow:hidden}.app-description-toggle-show,.app-description-toggle-hide{clear:both;padding:7px 0;cursor:pointer;opacity:.5}.app-description-container{clear:both;position:relative;top:7px}.app-description{clear:both}#app-category-1{margin-bottom:18px}#app-category-925{text-transform:capitalize}.app-dependencies{color:#ce3702}.missing-dependencies{list-style:initial;list-style-type:initial;list-style-position:inside}.apps-list{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list .app-list-move{transition:transform 1s}.apps-list #app-list-update-all{margin-left:10px}.apps-list .toolbar{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list.installed{margin-bottom:100px}.apps-list.installed .apps-list-container{display:table;width:100%;height:auto;white-space:normal}.apps-list.installed .section{display:table-row;padding:0;margin:0}.apps-list.installed .section>*{display:table-cell;height:initial;vertical-align:middle;float:none;border-bottom:1px solid var(--color-border);padding:6px;box-sizing:border-box}.apps-list.installed .section>.actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:end}.apps-list.installed .section.selected{background-color:var(--color-background-dark)}.apps-list.installed .groups-enable{margin-top:0}.apps-list.installed .groups-enable label{margin-right:3px}.apps-list.installed .app-image{width:44px;height:auto;text-align:right}.apps-list.installed .app-image-icon svg,.apps-list.installed .app-image-icon .icon-settings-dark{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.apps-list.installed .actions{text-align:right}.apps-list.installed .actions .icon-loading-small{display:inline-block;top:4px;margin-right:10px}.apps-list:not(.installed) .app-image-icon svg{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.apps-list.hidden{display:none}.apps-list .section{position:relative;flex:0 0 auto}.apps-list .section h2.app-name{display:block;margin:8px 0}.apps-list .section:hover{background-color:var(--color-background-dark)}.apps-list .app-description p{margin:10px 0}.apps-list .app-description ul{list-style:disc}.apps-list .app-description ol{list-style:decimal}.apps-list .app-description ol ol,.apps-list .app-description ol ul{padding-left:15px}.apps-list .app-description>ul,.apps-list .app-description>ol{margin-left:19px}.apps-list .app-description ul ol,.apps-list .app-description ul ul{padding-left:15px}.apps-list .apps-header{position:relative}.apps-list .apps-header div{display:table-cell;height:70px}.apps-list .apps-header h2{padding-left:6px;padding-top:15px;margin-bottom:12px}.apps-list .apps-header h2 .enable{position:relative;top:-1px;margin-left:12px}.apps-list .apps-header h2+.section{margin-top:50px}@media(max-width: 512px){.apps-list.installed .section>.actions{display:table-cell}}#apps-list-search .section h2{margin-bottom:0}#log{white-space:normal;margin-bottom:14px}#lessLog{display:none}table.grid td.date{white-space:nowrap}#log-section p{margin-top:20px}#security-warning-state-ok span,#security-warning-state-warning span,#security-warning-state-failure span,#security-warning-state-loading span{vertical-align:middle}#security-warning-state-ok span.message,#security-warning-state-warning span.message,#security-warning-state-failure span.message,#security-warning-state-loading span.message{padding:12px}#security-warning-state-ok span.icon,#security-warning-state-warning span.icon,#security-warning-state-failure span.icon,#security-warning-state-loading span.icon{width:32px;height:32px;background-position:center center;display:inline-block;border-radius:50%}#security-warning-state-ok span.icon-checkmark-white,#security-warning-state-warning span.icon-checkmark-white,#security-warning-state-failure span.icon-checkmark-white,#security-warning-state-loading span.icon-checkmark-white{background-color:var(--color-success)}#security-warning-state-ok span.icon-error-white,#security-warning-state-warning span.icon-error-white,#security-warning-state-failure span.icon-error-white,#security-warning-state-loading span.icon-error-white{background-color:var(--color-warning)}#security-warning-state-ok span.icon-close-white,#security-warning-state-warning span.icon-close-white,#security-warning-state-failure span.icon-close-white,#security-warning-state-loading span.icon-close-white{background-color:var(--color-error)}#shareAPI.loading>div{display:none}#shareAPI p{padding-bottom:.8em}#shareAPI .indent{padding-left:28px}#shareAPI .double-indent{padding-left:56px}#shareAPI .nocheckbox{padding-left:20px}#shareAPI #s2id_linksExcludedGroups{width:200px !important}#shareApiDefaultPermissionsSection label{margin-right:20px}#fileSharingSettings h3{display:inline-block}#publicShareDisclaimerText{width:calc(100% - 23px);max-width:600px;height:150px;margin-left:20px;box-sizing:border-box}.icon-info{padding:11px 20px;vertical-align:text-bottom;opacity:.5}#two-factor-auth h2,#shareAPI h2,#mail_general_settings h2{display:inline-block}.mail_settings p label:first-child{display:inline-block;width:300px;text-align:right}.mail_settings p select:nth-child(2),.mail_settings p input:not([type=button]){width:143px}@media(max-width: 768px){.mail_settings p label:first-child{width:unset;text-align:left;display:block;margin-top:calc(var(--default-grid-baseline)*2)}}#mail_smtpport{width:60px}.cronlog{margin-left:10px}.status{display:inline-block;height:16px;width:16px;vertical-align:text-bottom}.status.success{border-radius:50%}#selectGroups select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}#log .log-message{word-break:break-all;min-width:180px}span.success{background-color:var(--color-success);border-radius:var(--border-radius)}span.error{background-color:var(--color-error)}span.indeterminate{background-color:var(--color-warning);border-radius:40% 0}doesnotexist:-o-prefocus,.strengthify-wrapper{left:185px;width:129px}.trusted-domain-warning{color:#fff;padding:5px;background:#ce3702;border-radius:5px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#postsetupchecks ul{margin-left:44px;list-style:disc}#postsetupchecks ul li{margin:10px 0}#postsetupchecks ul ul{list-style:circle}#postsetupchecks .loading{height:50px;background-position:left center}#postsetupchecks .errors,#postsetupchecks .errors a{color:var(--color-error)}#postsetupchecks .warnings,#postsetupchecks .warnings a{color:var(--color-warning)}#postsetupchecks .hint{margin:20px 0}#security-warning a{text-decoration:underline}#security-warning .extra-top-margin{margin-top:12px}.security-warning__heading{display:flex;flex-wrap:wrap;margin-bottom:calc(var(--default-grid-baseline)*8)}.security-warning__heading>h2{margin-bottom:0px}.security-warning__heading>a{width:44px}#admin-tips li{list-style:initial}#admin-tips li a{display:inline-block;padding:3px 0}#warning{color:red}.settings-hint{margin-top:-12px;margin-bottom:12px;opacity:.7}.animated{animation:blink-animation 1s steps(5, start) 4}@keyframes blink-animation{to{opacity:.6}}@-webkit-keyframes blink-animation{to{opacity:1}}/*# sourceMappingURL=settings.css.map */ +input#openid,input#webdav{width:20em}.clear{clear:both}.nav-icon-personal-settings{background-image:var(--icon-personal-dark)}.nav-icon-security{background-image:var(--icon-toggle-filelist-dark)}.nav-icon-clientsbox{background-image:var(--icon-change-dark)}.nav-icon-federated-cloud{background-image:var(--icon-share-dark)}.nav-icon-second-factor-backup-codes,.nav-icon-ssl-root-certificate{background-image:var(--icon-password-dark)}#personal-settings-avatar-container{display:inline-grid;grid-template-columns:1fr;grid-template-rows:2fr 1fr 2fr;vertical-align:top}.profile-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-show-container{width:100%}.personal-settings-setting-box .section{padding:10px 30px}.personal-settings-setting-box .section .headerbar-label{margin-bottom:0}.personal-settings-setting-box .section input[type=text],.personal-settings-setting-box .section input[type=email],.personal-settings-setting-box .section input[type=tel],.personal-settings-setting-box .section input[type=url]{width:100%}.personal-settings-setting-box-profile{grid-row:3/5}.personal-settings-setting-box-detail{grid-row:5}.personal-settings-setting-box-detail--without-profile{grid-row:3}select#timezone{width:100%}#personal-settings{display:grid;padding:20px;max-width:1700px;grid-template-columns:repeat(auto-fill, minmax(min(100%, 300px), 1fr));grid-column-gap:10px}#personal-settings .section{padding:10px 10px;border:0}#personal-settings .section h2{margin-bottom:12px}#personal-settings .section h3>label{font-weight:bold}#personal-settings .personal-info{margin-right:10%;margin-bottom:12px;margin-top:12px}#personal-settings .personal-info[class^=icon-],#personal-settings .personal-info[class*=" icon-"]{background-position:0px 2px;padding-left:30px;opacity:.7}.development-notice{text-align:center}.development-notice a:not(.link-button){text-decoration:underline}.link-button{display:inline-block;margin:16px;padding:14px 20px;background-color:var(--color-primary-element);color:var(--color-primary-element-text);border-radius:var(--border-radius-pill);border:1px solid var(--color-primary-element);box-shadow:0 2px 9px var(--color-box-shadow)}.link-button:active,.link-button:hover,.link-button:focus,.link-button:focus-visible{box-shadow:0 0 0 4px var(--color-main-background) !important;outline:2px solid var(--color-main-text) !important}.link-button.icon-file{padding-left:48px;background-position:24px}.personal-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-settings-container:after{clear:both}.personal-settings-container>div h3{position:relative;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start;width:100%;align-items:center;gap:8px}.personal-settings-container>div h3>label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-settings-container>div>form span[class^=icon-checkmark],.personal-settings-container>div>form span[class^=icon-error]{position:relative;right:8px;top:-28px;pointer-events:none;float:right}.personal-settings-container .verify{position:relative;left:100%;top:0;height:0}.personal-settings-container .verify img{padding:12px 7px 6px}.personal-settings-container .verify-action{cursor:pointer}.personal-settings-container input:disabled{background-color:#fff;color:#000;border:none;opacity:100}.verification-dialog{display:none;right:-9px;top:40px;width:275px}.verification-dialog p{padding:10px}.verification-dialog .verificationCode{font-family:monospace;display:block;overflow-wrap:break-word}.federation-menu{position:relative;cursor:pointer;width:44px;height:44px;padding:10px;margin:0;background:none;border:none}.federation-menu:hover,.federation-menu:focus{background-color:var(--color-background-hover);border-radius:var(--border-radius-pill)}.federation-menu:hover .icon-federation-menu,.federation-menu:focus .icon-federation-menu{opacity:.8}.federation-menu .icon-federation-menu{padding-left:16px;background-size:16px;background-position:left center;opacity:.3;cursor:inherit}.federation-menu .icon-federation-menu .icon-triangle-s{display:inline-block;vertical-align:middle;cursor:inherit}.federation-menu .federationScopeMenu{top:44px}.federation-menu .federationScopeMenu.popovermenu .menuitem{font-size:12.8px;line-height:1.6em}.federation-menu .federationScopeMenu.popovermenu .menuitem .menuitem-text-detail{opacity:.75}.federation-menu .federationScopeMenu.popovermenu .menuitem.active{box-shadow:inset 2px 0 var(--color-primary-element)}.federation-menu .federationScopeMenu.popovermenu .menuitem.active .menuitem-text{font-weight:bold}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled{opacity:.5;cursor:default}.federation-menu .federationScopeMenu.popovermenu .menuitem.disabled *{cursor:default}.clientsbox img{height:60px}#sslCertificate tr.expired{background-color:rgba(255,0,0,.5)}#sslCertificate td{padding:5px}#displaynameerror,#displaynamechanged{display:none}input#identity{width:20em}#showWizard{display:inline-block}.msg.success{color:#fff;background-color:#47a447;padding:3px}.msg.error{color:#fff;background-color:#d2322d;padding:3px}table.nostyle label{margin-right:2em}table.nostyle td{padding:.2em 0}#security-password #passwordform{display:flex;flex-wrap:wrap;flex-direction:column;gap:1rem}#security-password #passwordform .input-control{display:flex;flex-wrap:wrap;flex-direction:column}#security-password #passwordform .input-control label{margin-bottom:.5rem}#security-password #passwordform #pass1,#security-password #passwordform .personal-show-container{flex-shrink:1;width:300px;min-width:150px}#security-password #passwordform .personal-show-container #pass2{position:relative;top:.5rem}#security-password #passwordform .personal-show-container .personal-show-label{top:34px !important;margin-right:0;margin-top:0 !important;right:3px}#security-password #passwordform #pass2{width:100%}#security-password #passwordform .password-state{display:inline-block}#security-password #passwordform .strengthify-wrapper{position:absolute;left:0;width:100%;border-radius:0 0 2px 2px;margin-top:5px;overflow:hidden;height:3px}#two-factor-auth h3{margin-top:24px}#two-factor-auth li>div{margin-left:20px}#two-factor-auth .two-factor-provider-settings-icon{width:16px;height:16px;vertical-align:sub;filter:var(--background-invert-if-dark)}.isgroup .groupname{width:85%;display:block;overflow:hidden;text-overflow:ellipsis}.isgroup.active .groupname{width:65%}li.active .delete,li.active .rename{display:block}.app-navigation-entry-utils .delete,.app-navigation-entry-utils .rename{display:none}#usersearchform{position:absolute;top:2px;right:0}#usersearchform input{width:150px}#usersearchform label{font-weight:bold}table.grid{width:100%}table.grid th{height:2em;padding:0 1em 0 0;border-bottom:1px solid var(--color-border);text-align:left;font-weight:normal}table.grid td{border-bottom:1px solid var(--color-border);padding:0 1em 0 0;text-align:left;font-weight:normal}td.name,th.name{padding-left:.8em;min-width:5em;max-width:12em;text-overflow:ellipsis;overflow:hidden}td.password,th.password{padding-left:.8em}td.password>img,th.password>img{visibility:hidden}td.displayName>img,th.displayName>img{visibility:hidden}td.password,td.mailAddress,th.password,th.mailAddress{min-width:5em;max-width:12em;cursor:pointer}td.password span,td.mailAddress span,th.password span,th.mailAddress span{width:90%;display:inline-block;text-overflow:ellipsis;overflow:hidden}td.mailAddress,th.mailAddress{cursor:pointer}td.password>span,th.password>span{margin-right:1.2em;color:#c7c7c7}span.usersLastLoginTooltip{white-space:nowrap}#app-navigation img{margin-bottom:-3px;margin-right:6px;width:16px}#app-navigation li span.no-icon{padding-left:32px}#app-navigation ul li.active>span.utils .delete,#app-navigation ul li.active>span.utils .rename{display:block}.section{margin-bottom:0}.section:not(:last-child){border-bottom:1px solid var(--color-border)}.section h2{margin-bottom:22px}.section h2 .icon-info{padding:6px 20px;vertical-align:text-bottom;display:inline-block}#log{white-space:normal;margin-bottom:14px}#lessLog{display:none}table.grid td.date{white-space:nowrap}#log-section p{margin-top:20px}#security-warning-state-ok span,#security-warning-state-warning span,#security-warning-state-failure span,#security-warning-state-loading span{vertical-align:middle}#security-warning-state-ok span.message,#security-warning-state-warning span.message,#security-warning-state-failure span.message,#security-warning-state-loading span.message{padding:12px}#security-warning-state-ok span.icon,#security-warning-state-warning span.icon,#security-warning-state-failure span.icon,#security-warning-state-loading span.icon{width:32px;height:32px;background-position:center center;display:inline-block;border-radius:50%}#security-warning-state-ok span.icon-checkmark-white,#security-warning-state-warning span.icon-checkmark-white,#security-warning-state-failure span.icon-checkmark-white,#security-warning-state-loading span.icon-checkmark-white{background-color:var(--color-success)}#security-warning-state-ok span.icon-error-white,#security-warning-state-warning span.icon-error-white,#security-warning-state-failure span.icon-error-white,#security-warning-state-loading span.icon-error-white{background-color:var(--color-warning)}#security-warning-state-ok span.icon-close-white,#security-warning-state-warning span.icon-close-white,#security-warning-state-failure span.icon-close-white,#security-warning-state-loading span.icon-close-white{background-color:var(--color-error)}#shareAPI.loading>div{display:none}#shareAPI p{padding-bottom:.8em}#shareAPI .indent{padding-left:28px}#shareAPI .double-indent{padding-left:56px}#shareAPI .nocheckbox{padding-left:20px}#shareAPI #s2id_linksExcludedGroups{width:200px !important}#shareApiDefaultPermissionsSection label{margin-right:20px}#fileSharingSettings h3{display:inline-block}#publicShareDisclaimerText{width:calc(100% - 23px);max-width:600px;height:150px;margin-left:20px;box-sizing:border-box}.icon-info{padding:11px 20px;vertical-align:text-bottom;opacity:.5}#two-factor-auth h2,#shareAPI h2,#mail_general_settings h2{display:inline-block}.mail_settings p label:first-child{display:inline-block;width:300px;text-align:right}.mail_settings p select:nth-child(2),.mail_settings p input:not([type=button]){width:143px}@media(max-width: 768px){.mail_settings p label:first-child{width:unset;text-align:left;display:block;margin-top:calc(var(--default-grid-baseline)*2)}}#mail_smtpport{width:60px}.cronlog{margin-left:10px}.status{display:inline-block;height:16px;width:16px;vertical-align:text-bottom}.status.success{border-radius:50%}#selectGroups select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}#log .log-message{word-break:break-all;min-width:180px}span.success{background-color:var(--color-success);border-radius:var(--border-radius)}span.error{background-color:var(--color-error)}span.indeterminate{background-color:var(--color-warning);border-radius:40% 0}doesnotexist:-o-prefocus,.strengthify-wrapper{left:185px;width:129px}.trusted-domain-warning{color:#fff;padding:5px;background:#ce3702;border-radius:5px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#postsetupchecks ul{margin-left:44px;list-style:disc}#postsetupchecks ul li{margin:10px 0}#postsetupchecks ul ul{list-style:circle}#postsetupchecks .loading{height:50px;background-position:left center}#postsetupchecks .errors,#postsetupchecks .errors a{color:var(--color-error)}#postsetupchecks .warnings,#postsetupchecks .warnings a{color:var(--color-warning)}#postsetupchecks .hint{margin:20px 0}#security-warning a{text-decoration:underline}#security-warning .extra-top-margin{margin-top:12px}.security-warning__heading{display:flex;flex-wrap:wrap;margin-bottom:calc(var(--default-grid-baseline)*8)}.security-warning__heading>h2{margin-bottom:0px}.security-warning__heading>a{width:44px}#admin-tips li{list-style:initial}#admin-tips li a{display:inline-block;padding:3px 0}#warning{color:red}.settings-hint{margin-top:-12px;margin-bottom:12px;opacity:.7}.animated{animation:blink-animation 1s steps(5, start) 4}@keyframes blink-animation{to{opacity:.6}}@-webkit-keyframes blink-animation{to{opacity:1}}/*# sourceMappingURL=settings.css.map */ diff --git a/apps/settings/css/settings.css.map b/apps/settings/css/settings.css.map index 0b31139146e..ddbf267c965 100644 --- a/apps/settings/css/settings.css.map +++ b/apps/settings/css/settings.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["settings.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAQC,0BACC,WAKF,OACC,WAID,4BC8CC,2CD1CD,mBC0CC,kDDtCD,qBCsCC,yCDlCD,0BCkCC,wCD9BD,oEC8BC,2CD1BD,oCACC,oBACA,0BACA,+BACA,mBAGD,4BACC,oBACA,kCAGD,yBACC,WAIA,wCACC,kBACA,yDACC,gBAIA,mOACC,WAKH,uCACC,aAGD,sCACC,WAED,uDACC,WAKD,gBACC,WAIF,mBACC,aACA,aACA,iBACA,uEACA,qBAEA,4BACC,kBACA,SAEA,+BACC,mBAIA,qCACC,iBAKH,kCACC,iBACA,mBACA,gBAGD,mGACC,4BACA,kBACA,WAMF,oBACC,kBACA,wCACC,0BAIF,aACC,qBACA,YACA,kBACA,8CACA,wCACA,wCACA,8CACA,6CAEA,qFAIC,6DACA,oDAGD,uBACC,kBACA,yBAIF,6BACC,oBACA,kCAEA,mCACC,WAIA,oCACC,kBACA,oBACA,iBACA,2BACA,WACA,mBACA,QAEA,0CACC,mBACA,uBACA,gBAKD,gIACC,kBACA,UACA,UACA,oBACA,YAKH,qCACC,kBACA,UACA,MACA,SAEA,yCACC,qBAIF,4CACC,eAGD,4CACC,sBACA,WACA,YACA,YAMF,qBACC,aACA,WACA,SACA,YAEA,uBACC,aAGD,uCACC,sBACA,cACA,yBAIF,iBACC,kBACA,eACA,WACA,YACA,aACA,SACA,gBACA,YAEA,8CAEC,+CACA,wCAEA,0FACC,WAIF,uCACC,kBACA,qBACA,gCACA,WACA,eAEA,wDACC,qBACA,sBACA,eAIF,sCACC,SAGC,4DAEC,iBACA,kBAEA,kFACC,YAGD,mEACC,oDAEA,kFACC,iBAIF,qEACC,WAEA,eAEA,uEACC,eAQN,gBACC,YAIA,2BACC,kCAGD,mBACC,YAIF,sCAEC,aAGD,eACC,WAGD,YACC,qBAIA,aACC,WACA,yBACA,YAGD,WACC,WACA,yBACA,YAMD,oBACC,iBAGD,iBACC,eAKD,iCACC,aACA,eACA,sBACA,SACA,gDACC,aACA,eACA,sBACA,sDACC,oBAIF,kGACC,cACA,YACA,gBAKA,iEACC,kBACA,UAED,+EACC,oBACA,eACA,wBACA,UAIF,wCACC,WAGD,iDACC,qBAGD,sDACC,kBACA,OACA,WACA,0BACA,eACA,gBACA,WAQF,oBACC,gBAGD,wBACC,iBAGD,oDACC,WACA,YACA,mBACA,wCAOD,oBACC,UACA,cACA,gBACA,uBAGD,2BACC,UAKD,oCAEC,cAKD,wEAEC,aAIF,gBACC,kBACA,QACA,QAEA,sBACC,YAGD,sBACC,iBAKF,WACC,WAEA,cACC,WACA,kBACA,4CACA,gBACA,mBAGD,cACC,4CACA,kBACA,gBACA,mBAKD,gBACC,kBACA,cACA,eACA,uBACA,gBAGD,wBACC,kBAEA,gCACC,kBAIF,sCACC,kBAGD,sDAEC,cACA,eACA,eAEA,0EACC,UACA,qBACA,uBACA,gBAIF,8BACC,eAGD,kCACC,mBACA,cAIF,2BACC,mBAID,4BACC,WACA,SACA,QAGD,0BACC,mBAGD,SACC,gBAKA,oBACC,mBACA,iBACA,WAGD,gCACC,kBAIA,gGACC,cAIF,4BACC,gBAGD,iCACC,gBAGD,8BACC,oCAIF,aACC,gBACA,iBACA,oCAGD,aACC,oCAIA,qCACC,aAMD,0BACC,SAGD,2BACC,cACA,aAGD,qDACC,WACA,aACA,qBACA,WAGD,kCACC,YAGD,0BACC,gBAEA,iCACC,cAOD,4FAEC,qBACA,WACA,YACA,kBACA,WAIF,uFACC,oCAGD,iDACC,cAGD,kDACC,cAGD,sCACC,kBACA,MACA,QACA,aACA,WACA,UACA,WACA,YAGD,wCACC,aACA,mBAEA,oDACC,YAIF,yCACC,0BACA,iBAGD,iOAKC,cAIF,2CACC,gBACC,UAED,kCACC,WAIF,2CACC,gBACC,UAED,kCACC,WAIF,2CACC,gBACC,UAED,kCACC,WAIF,0CACC,gBACC,UAED,kCACC,YAIF,2CACC,gBACC,WAIF,0CACC,gBACC,YAKF,0CAEE,kEACC,yBAKH,0CACC,iCACC,yBAIF,SACC,gBAEA,0BACC,4CAID,YACC,mBAEA,uBACC,iBACA,2BACA,qBAKH,iBACC,cACA,yBAGD,WACC,kBACA,aACA,UACA,gBAGD,0DACC,WACA,cACA,eACA,WAGD,2BACC,WACA,kBACA,QAGD,iBACC,WAGD,gBACC,mBAKD,kBACC,0BAGD,kBACC,cAGD,sBACC,mBACA,wBACA,2BAGD,WA4GC,aACA,eACA,yBA1GA,0BACC,wBAGD,gCACC,iBAGD,oBACC,OAXgB,KAYhB,QAbiB,IAejB,aAdgB,KAehB,WACA,8CACA,gBACA,MACA,UACA,aACA,mBAGD,qBAQC,oBAPA,0CACC,cACA,WACA,YACA,mBAKD,8BACC,kBACA,UACA,SAEA,gCACC,mBACA,eACA,sBACA,WACA,4CACA,YACA,sBAGD,uCACC,aACA,QACA,eACA,oBAGD,uCACC,8CAKF,oCACC,aAEA,0CACC,iBAIF,gCACC,WACA,YACA,iBAGD,kGAEC,eACA,WACA,YACA,WACA,sBACA,qBAGD,8BACC,iBAEA,kDACC,qBACA,QACA,kBAKH,+CACC,kBACA,YAEA,WACA,YACA,WAOD,kBACC,aAGD,oBACC,kBACA,cAEA,gCACC,cACA,aAGD,0BACC,8CAKD,8BACC,cAGD,+BACC,gBAGD,+BACC,mBAEA,oEACC,kBAKD,8DACC,iBAKD,oEACC,kBAMH,wBACC,kBAEA,4BACC,mBACA,YAGD,2BACC,iBACA,iBACA,mBACA,mCACC,kBACA,SACA,iBAGD,oCACC,gBAOJ,yBACC,uCACC,oBAMA,8BACC,gBAMH,KACC,mBACA,mBAGD,SACC,aAGD,mBACC,mBAGD,eACC,gBAOA,+IACC,sBAEA,+KACC,aAGD,mKACC,WACA,YACA,kCACA,qBACA,kBAGD,mOACC,sCAGD,mNACC,sCAGD,mNACC,oCAMF,sBACC,aAGD,YACC,oBAGD,kBACC,kBAGD,yBACC,kBAGD,sBACC,kBAGD,oCACC,uBAIF,yCACC,kBAGD,wBACC,qBAGD,2BACC,wBAEA,gBACA,aACA,iBACA,sBAKD,WACC,kBACA,2BACA,WAGD,2DAGC,qBAIA,mCACC,qBACA,YACA,iBAGD,+EAEC,YAIF,yBACC,mCACC,YACA,gBACA,cACA,iDAIF,eACC,WAGD,SACC,iBAGD,QACC,qBACA,YACA,WACA,2BAEA,gBACC,kBAIF,qBACC,sBACA,qBACA,YACA,iBAGD,kBACC,qBACA,gBAIA,aACC,sCACA,mCAGD,WACC,oCAGD,mBACC,sCACA,oBAMF,8CACC,WACA,YAGD,wBACC,WACA,YACA,mBACA,kBACA,+DAIA,oBACC,iBACA,gBAEA,uBACC,cAGD,uBACC,kBAIF,0BACC,YACA,gCAGD,oDACC,yBAGD,wDACC,2BAGD,uBACC,cAKD,oBACC,0BAGD,oCACC,gBAIF,2BACC,aACA,eACA,mDAEA,8BACC,kBAGD,6BACC,WAIF,eACC,mBAEA,iBACC,qBACA,cAIF,SACC,UAGD,eACC,iBACA,mBACA,WAGD,UACI,+CAGJ,2BACE,GACE,YAGJ,mCACE,GACE","file":"settings.css"}
\ No newline at end of file +{"version":3,"sourceRoot":"","sources":["settings.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAQC,0BACC,WAKF,OACC,WAID,4BC8CC,2CD1CD,mBC0CC,kDDtCD,qBCsCC,yCDlCD,0BCkCC,wCD9BD,oEC8BC,2CD1BD,oCACC,oBACA,0BACA,+BACA,mBAGD,4BACC,oBACA,kCAGD,yBACC,WAIA,wCACC,kBACA,yDACC,gBAIA,mOACC,WAKH,uCACC,aAGD,sCACC,WAED,uDACC,WAKD,gBACC,WAIF,mBACC,aACA,aACA,iBACA,uEACA,qBAEA,4BACC,kBACA,SAEA,+BACC,mBAIA,qCACC,iBAKH,kCACC,iBACA,mBACA,gBAGD,mGACC,4BACA,kBACA,WAMF,oBACC,kBACA,wCACC,0BAIF,aACC,qBACA,YACA,kBACA,8CACA,wCACA,wCACA,8CACA,6CAEA,qFAIC,6DACA,oDAGD,uBACC,kBACA,yBAIF,6BACC,oBACA,kCAEA,mCACC,WAIA,oCACC,kBACA,oBACA,iBACA,2BACA,WACA,mBACA,QAEA,0CACC,mBACA,uBACA,gBAKD,gIACC,kBACA,UACA,UACA,oBACA,YAKH,qCACC,kBACA,UACA,MACA,SAEA,yCACC,qBAIF,4CACC,eAGD,4CACC,sBACA,WACA,YACA,YAMF,qBACC,aACA,WACA,SACA,YAEA,uBACC,aAGD,uCACC,sBACA,cACA,yBAIF,iBACC,kBACA,eACA,WACA,YACA,aACA,SACA,gBACA,YAEA,8CAEC,+CACA,wCAEA,0FACC,WAIF,uCACC,kBACA,qBACA,gCACA,WACA,eAEA,wDACC,qBACA,sBACA,eAIF,sCACC,SAGC,4DAEC,iBACA,kBAEA,kFACC,YAGD,mEACC,oDAEA,kFACC,iBAIF,qEACC,WAEA,eAEA,uEACC,eAQN,gBACC,YAIA,2BACC,kCAGD,mBACC,YAIF,sCAEC,aAGD,eACC,WAGD,YACC,qBAIA,aACC,WACA,yBACA,YAGD,WACC,WACA,yBACA,YAMD,oBACC,iBAGD,iBACC,eAKD,iCACC,aACA,eACA,sBACA,SACA,gDACC,aACA,eACA,sBACA,sDACC,oBAIF,kGACC,cACA,YACA,gBAKA,iEACC,kBACA,UAED,+EACC,oBACA,eACA,wBACA,UAIF,wCACC,WAGD,iDACC,qBAGD,sDACC,kBACA,OACA,WACA,0BACA,eACA,gBACA,WAQF,oBACC,gBAGD,wBACC,iBAGD,oDACC,WACA,YACA,mBACA,wCAOD,oBACC,UACA,cACA,gBACA,uBAGD,2BACC,UAKD,oCAEC,cAKD,wEAEC,aAIF,gBACC,kBACA,QACA,QAEA,sBACC,YAGD,sBACC,iBAKF,WACC,WAEA,cACC,WACA,kBACA,4CACA,gBACA,mBAGD,cACC,4CACA,kBACA,gBACA,mBAKD,gBACC,kBACA,cACA,eACA,uBACA,gBAGD,wBACC,kBAEA,gCACC,kBAIF,sCACC,kBAGD,sDAEC,cACA,eACA,eAEA,0EACC,UACA,qBACA,uBACA,gBAIF,8BACC,eAGD,kCACC,mBACA,cAIF,2BACC,mBAMA,oBACC,mBACA,iBACA,WAGD,gCACC,kBAIA,gGACC,cAMH,SACC,gBAEA,0BACC,4CAID,YACC,mBAEA,uBACC,iBACA,2BACA,qBAMH,KACC,mBACA,mBAGD,SACC,aAGD,mBACC,mBAGD,eACC,gBAOA,+IACC,sBAEA,+KACC,aAGD,mKACC,WACA,YACA,kCACA,qBACA,kBAGD,mOACC,sCAGD,mNACC,sCAGD,mNACC,oCAMF,sBACC,aAGD,YACC,oBAGD,kBACC,kBAGD,yBACC,kBAGD,sBACC,kBAGD,oCACC,uBAIF,yCACC,kBAGD,wBACC,qBAGD,2BACC,wBAEA,gBACA,aACA,iBACA,sBAKD,WACC,kBACA,2BACA,WAGD,2DAGC,qBAIA,mCACC,qBACA,YACA,iBAGD,+EAEC,YAIF,yBACC,mCACC,YACA,gBACA,cACA,iDAIF,eACC,WAGD,SACC,iBAGD,QACC,qBACA,YACA,WACA,2BAEA,gBACC,kBAIF,qBACC,sBACA,qBACA,YACA,iBAGD,kBACC,qBACA,gBAIA,aACC,sCACA,mCAGD,WACC,oCAGD,mBACC,sCACA,oBAMF,8CACC,WACA,YAGD,wBACC,WACA,YACA,mBACA,kBACA,+DAIA,oBACC,iBACA,gBAEA,uBACC,cAGD,uBACC,kBAIF,0BACC,YACA,gCAGD,oDACC,yBAGD,wDACC,2BAGD,uBACC,cAKD,oBACC,0BAGD,oCACC,gBAIF,2BACC,aACA,eACA,mDAEA,8BACC,kBAGD,6BACC,WAIF,eACC,mBAEA,iBACC,qBACA,cAIF,SACC,UAGD,eACC,iBACA,mBACA,WAGD,UACI,+CAGJ,2BACE,GACE,YAGJ,mCACE,GACE","file":"settings.css"}
\ No newline at end of file diff --git a/apps/settings/css/settings.scss b/apps/settings/css/settings.scss index c77a420e8d4..04111cda4f7 100644 --- a/apps/settings/css/settings.scss +++ b/apps/settings/css/settings.scss @@ -538,21 +538,7 @@ span.usersLastLoginTooltip { white-space: nowrap; } -/* APPS */ -#app-content > svg.app-filter { - float: left; - height: 0; - width: 0; -} - -#app-category-app-bundles { - margin-bottom: 20px; -} - -.appinfo { - margin: 1em 40px; -} - +/* SETTINGS NAVIGATION */ #app-navigation { /* Navigation icons */ img { @@ -570,188 +556,9 @@ span.usersLastLoginTooltip { display: block; } } - - .appwarning { - background: #fcc; - } - - &.appwarning:hover { - background: #fbb; - } - - .app-external { - color: var(--color-text-maxcontrast); - } -} - -span.version { - margin-left: 1em; - margin-right: 1em; - color: var(--color-text-maxcontrast); -} - -.app-version { - color: var(--color-text-maxcontrast); -} - -.app-settings-content { - #searchresults { - display: none; - } - -} - -#apps-list.store { - .section { - border: 0; - } - - .app-name { - display: block; - margin: 5px 0; - } - - .app-image-icon .icon-settings-dark { - width: 100%; - height: 150px; - background-size: 45px; - opacity: 0.5; - } - - .app-score-image { - height: 14px; - } - - .actions { - margin-top: 10px; - - button { - margin: 10px 0; - } - } -} - -#app-sidebar #app-details-view { - h2 { - .icon-settings-dark, - svg { - display: inline-block; - width: 16px; - height: 16px; - margin-right: 10px; - opacity: .7; - } - } - - .app-author, .app-licence { - color: var(--color-text-maxcontrast); - } - - .app-dependencies { - margin: 10px 0; - } - - .app-description p { - margin: 10px 0; - } - - .close { - position: absolute; - top: 0; - right: 0; - padding: 14px; - opacity: 0.5; - z-index: 1; - width: 44px; - height: 44px; - } - - .actions { - display: flex; - align-items: center; - - .app-groups { - padding: 5px; - } - } - - .appslink { - text-decoration: underline; - margin-right: 5px; - } - - .app-level, - .actions, - .documentation, - .app-dependencies, - .app-description { - margin: 20px 0; - } -} - -@media only screen and (min-width: 1601px) { - .store .section { - width: 25%; - } - .with-app-sidebar .store .section { - width: 33%; - } -} - -@media only screen and (max-width: 1600px) { - .store .section { - width: 25%; - } - .with-app-sidebar .store .section { - width: 33%; - } -} - -@media only screen and (max-width: 1400px) { - .store .section { - width: 33%; - } - .with-app-sidebar .store .section { - width: 50%; - } -} - -@media only screen and (max-width: 900px) { - .store .section { - width: 50%; - } - .with-app-sidebar .store .section { - width: 100%; - } -} - -@media only screen and (max-width: variables.$breakpoint-mobile) { - .store .section { - width: 50%; - } -} - -@media only screen and (max-width: 480px) { - .store .section { - width: 100%; - } -} - -/* hide app version and level on narrower screens */ -@media only screen and (max-width: 900px) { - .apps-list.installed { - .app-version, .app-level { - display: none !important; - } - } -} - -@media only screen and (max-width: 500px) { - .apps-list.installed .app-groups { - display: none !important; - } } +/* SETTINGS SECTIONS */ .section { margin-bottom: 0; /* section divider lines, none needed for last one */ @@ -771,256 +578,6 @@ span.version { } } -.followupsection { - display: block; - padding: 0 30px 30px 30px; -} - -.app-image { - position: relative; - height: 150px; - opacity: 1; - overflow: hidden; -} - -.app-description-toggle-show, .app-description-toggle-hide { - clear: both; - padding: 7px 0; - cursor: pointer; - opacity: .5; -} - -.app-description-container { - clear: both; - position: relative; - top: 7px; -} - -.app-description { - clear: both; -} - -#app-category-1 { - margin-bottom: 18px; -} - -/* capitalize 'Other' category */ - -#app-category-925 { - text-transform: capitalize; -} - -.app-dependencies { - color: #ce3702; -} - -.missing-dependencies { - list-style: initial; - list-style-type: initial; - list-style-position: inside; -} - -.apps-list { - $toolbar-padding: 8px; - $toolbar-height: 44px + $toolbar-padding * 2; - - .app-list-move { - transition: transform 1s; - } - - #app-list-update-all { - margin-left: 10px; - } - - .toolbar { - height: $toolbar-height; - padding: $toolbar-padding; - // Leave room for app-navigation-toggle - padding-left: $toolbar-height; - width: 100%; - background-color: var(--color-main-background); - position: sticky; - top: 0; - z-index: 1; - display: flex; - align-items: center; - } - - &.installed { - .apps-list-container { - display: table; - width: 100%; - height: auto; - white-space: normal; - } - - margin-bottom: 100px; - - .section { - display: table-row; - padding: 0; - margin: 0; - - > * { - display: table-cell; - height: initial; - vertical-align: middle; - float: none; - border-bottom: 1px solid var(--color-border); - padding: 6px; - box-sizing: border-box; - } - - > .actions { - display: flex; - gap: 8px; - flex-wrap: wrap; - justify-content: end; - } - - &.selected { - background-color: var(--color-background-dark); - } - - } - - .groups-enable { - margin-top: 0; - - label { - margin-right: 3px; - } - } - - .app-image { - width: 44px; - height: auto; - text-align: right; - } - - .app-image-icon svg, - .app-image-icon .icon-settings-dark { - margin-top: 5px; - width: 20px; - height: 20px; - opacity: .5; - background-size: cover; - display: inline-block; - } - - .actions { - text-align: right; - - .icon-loading-small { - display: inline-block; - top: 4px; - margin-right: 10px; - } - } - } - - &:not(.installed) .app-image-icon svg { - position: absolute; - bottom: 43px; - /* position halfway vertically */ - width: 64px; - height: 64px; - opacity: .1; - } - - display: flex; - flex-wrap: wrap; - align-content: flex-start; - - &.hidden { - display: none; - } - - .section { - position: relative; - flex: 0 0 auto; - - h2.app-name { - display: block; - margin: 8px 0; - } - - &:hover { - background-color: var(--color-background-dark); - } - } - - .app-description { - p { - margin: 10px 0; - } - - ul { - list-style: disc; - } - - ol { - list-style: decimal; - - ol, ul { - padding-left: 15px; - } - } - - > { - ul, ol { - margin-left: 19px; - } - } - - ul { - ol, ul { - padding-left: 15px; - } - } - } - - /* Bundle header */ - .apps-header { - position: relative; - - div { - display: table-cell; - height: 70px; - } - - h2 { - padding-left: 6px; - padding-top: 15px; - margin-bottom: 12px; - .enable { - position: relative; - top: -1px; - margin-left: 12px; - } - - + .section { - margin-top: 50px; - } - } - } -} - -// Display buttons above each other on mobile -@media (max-width: math.div(variables.$breakpoint-mobile, 2)) { - .apps-list.installed .section > .actions { - display: table-cell; - } -} - -#apps-list-search { - .section { - h2 { - margin-bottom: 0; - } - } -} - /* LOG */ #log { white-space: normal; diff --git a/apps/settings/l10n/ar.js b/apps/settings/l10n/ar.js index 717b747b6ab..793637a35c4 100644 --- a/apps/settings/l10n/ar.js +++ b/apps/settings/l10n/ar.js @@ -672,7 +672,6 @@ OC.L10N.register( "Loading categories" : "تحميل الفئات", "Developer documentation ↗" : "توثيق المطورين ↗", "Version {version}, {license}-licensed" : "النسخة {version}, {license}-مُرخَّصَة", - "by {author}\n{license}" : "من قِبَل {author}\n{license}", "Active accounts" : "حسابات نشطة", "Admins" : "المُشرِفون", "Disabled accounts" : "حسابات موقوفة", @@ -683,7 +682,6 @@ OC.L10N.register( "Create group" : "أنشِيءْ مجموعةً ", "Group name" : "إسم الفريق", "Please enter a valid group name" : "رجاءً، قم بإدخال اسم مناسب للمجموعة", - "{license}-licensed" : "{license} مُرخّصٌ", "Failed to create group" : "تعذّر إنشاء المجموعة", "Sending…" : "الإرسال جارٍ …", "Email sent" : "تمّ إرسال الإيميل", @@ -837,6 +835,8 @@ OC.L10N.register( "Will be autogenerated" : "سيتم توليدها تلقائيًا", "Add a new user" : "إضافة مستخدِم جديد", "No users in here" : "لا يوجد مستخدمون هنا", + "{license}-licensed" : "{license} مُرخّصٌ", + "by {author}\n{license}" : "من قِبَل {author}\n{license}", "Enter group name" : "أدخِل اسم المجموعة", "Add group" : "إضافة مجموعة", "Active users" : "المستخدمون النشطون", diff --git a/apps/settings/l10n/ar.json b/apps/settings/l10n/ar.json index 4ed1c650c94..edba12857f7 100644 --- a/apps/settings/l10n/ar.json +++ b/apps/settings/l10n/ar.json @@ -670,7 +670,6 @@ "Loading categories" : "تحميل الفئات", "Developer documentation ↗" : "توثيق المطورين ↗", "Version {version}, {license}-licensed" : "النسخة {version}, {license}-مُرخَّصَة", - "by {author}\n{license}" : "من قِبَل {author}\n{license}", "Active accounts" : "حسابات نشطة", "Admins" : "المُشرِفون", "Disabled accounts" : "حسابات موقوفة", @@ -681,7 +680,6 @@ "Create group" : "أنشِيءْ مجموعةً ", "Group name" : "إسم الفريق", "Please enter a valid group name" : "رجاءً، قم بإدخال اسم مناسب للمجموعة", - "{license}-licensed" : "{license} مُرخّصٌ", "Failed to create group" : "تعذّر إنشاء المجموعة", "Sending…" : "الإرسال جارٍ …", "Email sent" : "تمّ إرسال الإيميل", @@ -835,6 +833,8 @@ "Will be autogenerated" : "سيتم توليدها تلقائيًا", "Add a new user" : "إضافة مستخدِم جديد", "No users in here" : "لا يوجد مستخدمون هنا", + "{license}-licensed" : "{license} مُرخّصٌ", + "by {author}\n{license}" : "من قِبَل {author}\n{license}", "Enter group name" : "أدخِل اسم المجموعة", "Add group" : "إضافة مجموعة", "Active users" : "المستخدمون النشطون", diff --git a/apps/settings/l10n/bg.js b/apps/settings/l10n/bg.js index c19057f3efa..1dd8054f100 100644 --- a/apps/settings/l10n/bg.js +++ b/apps/settings/l10n/bg.js @@ -372,10 +372,8 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Вашият браузър не поддържа WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Като администратор можете да прецизирате поведението на споделяне. Моля, вижте документацията за повече информация.", "You need to enable the File sharing App." : "Трябва да активирате приложението за споделяне на файлове.", - "by {author}\n{license}" : "от {author}\n{license}", "Admins" : "Администратори", "Group name" : "Име на групата", - "{license}-licensed" : "{license}-лицензиран", "Sending…" : "Изпращане...", "Email sent" : "Имейлът е изпратен", "Location" : "Местоположение", @@ -514,6 +512,8 @@ OC.L10N.register( "Will be autogenerated" : "Ще се генерира автоматично", "Add a new user" : "Добавяне на новия потребител", "No users in here" : "Тук няма потребители", + "{license}-licensed" : "{license}-лицензиран", + "by {author}\n{license}" : "от {author}\n{license}", "Enter group name" : "Въведете име на групата", "Add group" : "Нова група", "Active users" : "Активни потребители", diff --git a/apps/settings/l10n/bg.json b/apps/settings/l10n/bg.json index 6dcad44337a..4974979c2be 100644 --- a/apps/settings/l10n/bg.json +++ b/apps/settings/l10n/bg.json @@ -370,10 +370,8 @@ "Your browser does not support WebAuthn." : "Вашият браузър не поддържа WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Като администратор можете да прецизирате поведението на споделяне. Моля, вижте документацията за повече информация.", "You need to enable the File sharing App." : "Трябва да активирате приложението за споделяне на файлове.", - "by {author}\n{license}" : "от {author}\n{license}", "Admins" : "Администратори", "Group name" : "Име на групата", - "{license}-licensed" : "{license}-лицензиран", "Sending…" : "Изпращане...", "Email sent" : "Имейлът е изпратен", "Location" : "Местоположение", @@ -512,6 +510,8 @@ "Will be autogenerated" : "Ще се генерира автоматично", "Add a new user" : "Добавяне на новия потребител", "No users in here" : "Тук няма потребители", + "{license}-licensed" : "{license}-лицензиран", + "by {author}\n{license}" : "от {author}\n{license}", "Enter group name" : "Въведете име на групата", "Add group" : "Нова група", "Active users" : "Активни потребители", diff --git a/apps/settings/l10n/br.js b/apps/settings/l10n/br.js index 2d2f65e3fec..147ba1e3d0b 100644 --- a/apps/settings/l10n/br.js +++ b/apps/settings/l10n/br.js @@ -256,9 +256,7 @@ OC.L10N.register( "The following devices are configured for your account:" : "Stummet eo bet an ardivinkoù ma d'ho c'hont.", "Your browser does not support WebAuthn." : "Ne vez ket douget WebAuthn gant o furcher.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Evel ar merour eo posupl deoc'h stumañ pizh penaos e vez rannet. Sellit ouz an diellvadur evit muioc'h a ditouroù.", - "by {author}\n{license}" : "great gant {author}\n{license}", "Admins" : "Merourien", - "{license}-licensed" : "{license}-aotre", "Sending…" : "O kas...", "Email sent" : "Postel kaset", "Location" : "Lec'hiadur", @@ -354,6 +352,8 @@ OC.L10N.register( "Will be autogenerated" : "A vo krouet en un doare otomatek", "Add a new user" : "Ouzhpennan un im^lijer", "No users in here" : "Implijour ebet amañ", + "{license}-licensed" : "{license}-aotre", + "by {author}\n{license}" : "great gant {author}\n{license}", "Enter group name" : "Lakat un anv strollad", "Add group" : "Ouzhpenn strollad", "Disabled users" : "Disaotreañ implijer", diff --git a/apps/settings/l10n/br.json b/apps/settings/l10n/br.json index 89f450b97ed..f6c8d13ff66 100644 --- a/apps/settings/l10n/br.json +++ b/apps/settings/l10n/br.json @@ -254,9 +254,7 @@ "The following devices are configured for your account:" : "Stummet eo bet an ardivinkoù ma d'ho c'hont.", "Your browser does not support WebAuthn." : "Ne vez ket douget WebAuthn gant o furcher.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Evel ar merour eo posupl deoc'h stumañ pizh penaos e vez rannet. Sellit ouz an diellvadur evit muioc'h a ditouroù.", - "by {author}\n{license}" : "great gant {author}\n{license}", "Admins" : "Merourien", - "{license}-licensed" : "{license}-aotre", "Sending…" : "O kas...", "Email sent" : "Postel kaset", "Location" : "Lec'hiadur", @@ -352,6 +350,8 @@ "Will be autogenerated" : "A vo krouet en un doare otomatek", "Add a new user" : "Ouzhpennan un im^lijer", "No users in here" : "Implijour ebet amañ", + "{license}-licensed" : "{license}-aotre", + "by {author}\n{license}" : "great gant {author}\n{license}", "Enter group name" : "Lakat un anv strollad", "Add group" : "Ouzhpenn strollad", "Disabled users" : "Disaotreañ implijer", diff --git a/apps/settings/l10n/ca.js b/apps/settings/l10n/ca.js index e46c3295fef..e8f3917e335 100644 --- a/apps/settings/l10n/ca.js +++ b/apps/settings/l10n/ca.js @@ -515,13 +515,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "El vostre navegador no suporta WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Com a administrador, podeu afinar els ajustaments per compartir fitxers. Si us plau, per més informació llegiu la documentació.", "You need to enable the File sharing App." : "Heu d'habilitar l'aplicació per compartir Fitxers.", - "by {author}\n{license}" : "{author}\n{license}", "Admins" : "Administradors", "New account" : "Nou compte", "Create group" : "Crear grup", "Group name" : "Nom del grup", "Please enter a valid group name" : "Introduïu un nom de grup vàlid", - "{license}-licensed" : "sota la llicència - {license}", "Failed to create group" : "No s'ha pogut crear el grup", "Sending…" : "S'està enviant…", "Email sent" : "S'ha enviat el correu electrònic", @@ -670,6 +668,8 @@ OC.L10N.register( "Will be autogenerated" : "Serà auto-generat", "Add a new user" : "Afegeix un nou usuari", "No users in here" : "No hi ha usuaris aquí dins", + "{license}-licensed" : "sota la llicència - {license}", + "by {author}\n{license}" : "{author}\n{license}", "Enter group name" : "Introduïu el nom del grup", "Add group" : "Afegeix un grup", "Active users" : "Usuaris actius", diff --git a/apps/settings/l10n/ca.json b/apps/settings/l10n/ca.json index 3066e303f71..1f105dedc27 100644 --- a/apps/settings/l10n/ca.json +++ b/apps/settings/l10n/ca.json @@ -513,13 +513,11 @@ "Your browser does not support WebAuthn." : "El vostre navegador no suporta WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Com a administrador, podeu afinar els ajustaments per compartir fitxers. Si us plau, per més informació llegiu la documentació.", "You need to enable the File sharing App." : "Heu d'habilitar l'aplicació per compartir Fitxers.", - "by {author}\n{license}" : "{author}\n{license}", "Admins" : "Administradors", "New account" : "Nou compte", "Create group" : "Crear grup", "Group name" : "Nom del grup", "Please enter a valid group name" : "Introduïu un nom de grup vàlid", - "{license}-licensed" : "sota la llicència - {license}", "Failed to create group" : "No s'ha pogut crear el grup", "Sending…" : "S'està enviant…", "Email sent" : "S'ha enviat el correu electrònic", @@ -668,6 +666,8 @@ "Will be autogenerated" : "Serà auto-generat", "Add a new user" : "Afegeix un nou usuari", "No users in here" : "No hi ha usuaris aquí dins", + "{license}-licensed" : "sota la llicència - {license}", + "by {author}\n{license}" : "{author}\n{license}", "Enter group name" : "Introduïu el nom del grup", "Add group" : "Afegeix un grup", "Active users" : "Usuaris actius", diff --git a/apps/settings/l10n/cs.js b/apps/settings/l10n/cs.js index 462a009de13..36afd2a5ffe 100644 --- a/apps/settings/l10n/cs.js +++ b/apps/settings/l10n/cs.js @@ -583,13 +583,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Vámi používaný prohlížeč nepodporuje WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Jako správce můžete upravit chování sdílení. Více informací naleznete v dokumentaci.", "You need to enable the File sharing App." : "Je třeba zapnout aplikaci pro sdílení souborů.", - "by {author}\n{license}" : "od {author}\n{license}", "Admins" : "Správci", "New account" : "Nový účet", "Create group" : "Vytvořit skupinu", "Group name" : "Název skupiny", "Please enter a valid group name" : "Zadejte platný název pro skupinu", - "{license}-licensed" : "licencováno pod {license}", "Failed to create group" : "Skupinu se nepodařilo vytvořit", "Sending…" : "Odesílání…", "Email sent" : "E-mail odeslán", @@ -738,6 +736,8 @@ OC.L10N.register( "Will be autogenerated" : "Bude automaticky vytvořeno", "Add a new user" : "Přidat nového uživatele", "No users in here" : "Nejsou zde žádní uživatelé", + "{license}-licensed" : "licencováno pod {license}", + "by {author}\n{license}" : "od {author}\n{license}", "Enter group name" : "Zadejte název skupiny", "Add group" : "Přidat skupinu", "Active users" : "Aktivní uživatelé", diff --git a/apps/settings/l10n/cs.json b/apps/settings/l10n/cs.json index 56ae9d05b0b..21406088d64 100644 --- a/apps/settings/l10n/cs.json +++ b/apps/settings/l10n/cs.json @@ -581,13 +581,11 @@ "Your browser does not support WebAuthn." : "Vámi používaný prohlížeč nepodporuje WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Jako správce můžete upravit chování sdílení. Více informací naleznete v dokumentaci.", "You need to enable the File sharing App." : "Je třeba zapnout aplikaci pro sdílení souborů.", - "by {author}\n{license}" : "od {author}\n{license}", "Admins" : "Správci", "New account" : "Nový účet", "Create group" : "Vytvořit skupinu", "Group name" : "Název skupiny", "Please enter a valid group name" : "Zadejte platný název pro skupinu", - "{license}-licensed" : "licencováno pod {license}", "Failed to create group" : "Skupinu se nepodařilo vytvořit", "Sending…" : "Odesílání…", "Email sent" : "E-mail odeslán", @@ -736,6 +734,8 @@ "Will be autogenerated" : "Bude automaticky vytvořeno", "Add a new user" : "Přidat nového uživatele", "No users in here" : "Nejsou zde žádní uživatelé", + "{license}-licensed" : "licencováno pod {license}", + "by {author}\n{license}" : "od {author}\n{license}", "Enter group name" : "Zadejte název skupiny", "Add group" : "Přidat skupinu", "Active users" : "Aktivní uživatelé", diff --git a/apps/settings/l10n/da.js b/apps/settings/l10n/da.js index 9a6d3f62dcb..d8d4b4da48a 100644 --- a/apps/settings/l10n/da.js +++ b/apps/settings/l10n/da.js @@ -395,12 +395,10 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Din browser understøtter ikke WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Som administrator kan du finjustere delingsadfærden. Se venligst dokumentationen for mere information.", "You need to enable the File sharing App." : "Du skal aktivere fildelingsappen.", - "by {author}\n{license}" : "af {author}\n{licens}", "Admins" : "Administratorer", "Create group" : "Opret gruppe", "Group name" : "Gruppenavn", "Please enter a valid group name" : "Indtast venligst et gyldigt gruppenavn", - "{license}-licensed" : "{license}-licenseret", "Failed to create group" : "Kunne ikke oprette gruppe", "Sending…" : "Sender...", "Email sent" : "E-mail afsendt", @@ -534,6 +532,8 @@ OC.L10N.register( "Will be autogenerated" : "Vil blive autogenereret", "Add a new user" : "Tilføj en bruger", "No users in here" : "Ingen brugere her", + "{license}-licensed" : "{license}-licenseret", + "by {author}\n{license}" : "af {author}\n{licens}", "Enter group name" : "Indtast gruppenavn", "Add group" : "Tilføj gruppe", "Active users" : "Aktive brugere", diff --git a/apps/settings/l10n/da.json b/apps/settings/l10n/da.json index aeb4d28dbee..ce310a691dc 100644 --- a/apps/settings/l10n/da.json +++ b/apps/settings/l10n/da.json @@ -393,12 +393,10 @@ "Your browser does not support WebAuthn." : "Din browser understøtter ikke WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Som administrator kan du finjustere delingsadfærden. Se venligst dokumentationen for mere information.", "You need to enable the File sharing App." : "Du skal aktivere fildelingsappen.", - "by {author}\n{license}" : "af {author}\n{licens}", "Admins" : "Administratorer", "Create group" : "Opret gruppe", "Group name" : "Gruppenavn", "Please enter a valid group name" : "Indtast venligst et gyldigt gruppenavn", - "{license}-licensed" : "{license}-licenseret", "Failed to create group" : "Kunne ikke oprette gruppe", "Sending…" : "Sender...", "Email sent" : "E-mail afsendt", @@ -532,6 +530,8 @@ "Will be autogenerated" : "Vil blive autogenereret", "Add a new user" : "Tilføj en bruger", "No users in here" : "Ingen brugere her", + "{license}-licensed" : "{license}-licenseret", + "by {author}\n{license}" : "af {author}\n{licens}", "Enter group name" : "Indtast gruppenavn", "Add group" : "Tilføj gruppe", "Active users" : "Aktive brugere", diff --git a/apps/settings/l10n/de.js b/apps/settings/l10n/de.js index eba8d156b98..d19e60405f4 100644 --- a/apps/settings/l10n/de.js +++ b/apps/settings/l10n/de.js @@ -505,13 +505,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Dein Browser unterstützt kein WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als Administrator kannst du das Teilen-Verhalten feinabstimmen. Weitere Informationen findest du in der Dokumentation.", "You need to enable the File sharing App." : "Du musst die File sharing App aktivieren.", - "by {author}\n{license}" : "von {author}\n{license}", "Admins" : "Administratoren", "New account" : "Neues Konto", "Create group" : "Gruppe erstellen", "Group name" : "Gruppenname", "Please enter a valid group name" : "Bitte einen gültigen Gruppennamen eingeben", - "{license}-licensed" : "{license}-Lizenziert", "Failed to create group" : "Fehler beim Erstellen der Gruppe", "Sending…" : "Senden …", "Email sent" : "E-Mail gesendet", @@ -659,6 +657,8 @@ OC.L10N.register( "Will be autogenerated" : "Wird automatisch erzeugt", "Add a new user" : "Neuen Benutzer hinzufügen", "No users in here" : "Keine Benutzer vorhanden", + "{license}-licensed" : "{license}-Lizenziert", + "by {author}\n{license}" : "von {author}\n{license}", "Enter group name" : "Gruppenname eingeben", "Add group" : "Gruppe hinzufügen", "Active users" : "Aktive Benutzer", diff --git a/apps/settings/l10n/de.json b/apps/settings/l10n/de.json index 1462a861600..51d2e298cb6 100644 --- a/apps/settings/l10n/de.json +++ b/apps/settings/l10n/de.json @@ -503,13 +503,11 @@ "Your browser does not support WebAuthn." : "Dein Browser unterstützt kein WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als Administrator kannst du das Teilen-Verhalten feinabstimmen. Weitere Informationen findest du in der Dokumentation.", "You need to enable the File sharing App." : "Du musst die File sharing App aktivieren.", - "by {author}\n{license}" : "von {author}\n{license}", "Admins" : "Administratoren", "New account" : "Neues Konto", "Create group" : "Gruppe erstellen", "Group name" : "Gruppenname", "Please enter a valid group name" : "Bitte einen gültigen Gruppennamen eingeben", - "{license}-licensed" : "{license}-Lizenziert", "Failed to create group" : "Fehler beim Erstellen der Gruppe", "Sending…" : "Senden …", "Email sent" : "E-Mail gesendet", @@ -657,6 +655,8 @@ "Will be autogenerated" : "Wird automatisch erzeugt", "Add a new user" : "Neuen Benutzer hinzufügen", "No users in here" : "Keine Benutzer vorhanden", + "{license}-licensed" : "{license}-Lizenziert", + "by {author}\n{license}" : "von {author}\n{license}", "Enter group name" : "Gruppenname eingeben", "Add group" : "Gruppe hinzufügen", "Active users" : "Aktive Benutzer", diff --git a/apps/settings/l10n/de_DE.js b/apps/settings/l10n/de_DE.js index e31515ae438..fb2e8ba790e 100644 --- a/apps/settings/l10n/de_DE.js +++ b/apps/settings/l10n/de_DE.js @@ -672,7 +672,6 @@ OC.L10N.register( "Loading categories" : "Lade Kategorien", "Developer documentation ↗" : "Entwickler-DoKumentation ↗", "Version {version}, {license}-licensed" : "Version {version}, {license}-lizensiert", - "by {author}\n{license}" : "von {author}\n{license}", "Active accounts" : "Aktive Konten", "Admins" : "Administration", "Disabled accounts" : "Deaktivierte Konten", @@ -683,7 +682,6 @@ OC.L10N.register( "Create group" : "Gruppe erstellen", "Group name" : "Gruppenname", "Please enter a valid group name" : "Bitte einen gültigen Gruppennamen eingeben", - "{license}-licensed" : "{license}-Lizenziert", "Failed to create group" : "Fehler beim Erstellen der Gruppe", "Sending…" : "Senden…", "Email sent" : "E-Mail gesendet", @@ -837,6 +835,8 @@ OC.L10N.register( "Will be autogenerated" : "Wird automatisch erzeugt", "Add a new user" : "Neuen Benutzer hinzufügen", "No users in here" : "Keine Benutzer vorhanden", + "{license}-licensed" : "{license}-Lizenziert", + "by {author}\n{license}" : "von {author}\n{license}", "Enter group name" : "Gruppenname eingeben", "Add group" : "Gruppe hinzufügen", "Active users" : "Aktive Benutzer", diff --git a/apps/settings/l10n/de_DE.json b/apps/settings/l10n/de_DE.json index 884ce5d0e38..c8b1c714893 100644 --- a/apps/settings/l10n/de_DE.json +++ b/apps/settings/l10n/de_DE.json @@ -670,7 +670,6 @@ "Loading categories" : "Lade Kategorien", "Developer documentation ↗" : "Entwickler-DoKumentation ↗", "Version {version}, {license}-licensed" : "Version {version}, {license}-lizensiert", - "by {author}\n{license}" : "von {author}\n{license}", "Active accounts" : "Aktive Konten", "Admins" : "Administration", "Disabled accounts" : "Deaktivierte Konten", @@ -681,7 +680,6 @@ "Create group" : "Gruppe erstellen", "Group name" : "Gruppenname", "Please enter a valid group name" : "Bitte einen gültigen Gruppennamen eingeben", - "{license}-licensed" : "{license}-Lizenziert", "Failed to create group" : "Fehler beim Erstellen der Gruppe", "Sending…" : "Senden…", "Email sent" : "E-Mail gesendet", @@ -835,6 +833,8 @@ "Will be autogenerated" : "Wird automatisch erzeugt", "Add a new user" : "Neuen Benutzer hinzufügen", "No users in here" : "Keine Benutzer vorhanden", + "{license}-licensed" : "{license}-Lizenziert", + "by {author}\n{license}" : "von {author}\n{license}", "Enter group name" : "Gruppenname eingeben", "Add group" : "Gruppe hinzufügen", "Active users" : "Aktive Benutzer", diff --git a/apps/settings/l10n/el.js b/apps/settings/l10n/el.js index fbd4473a78d..cd1d0f261df 100644 --- a/apps/settings/l10n/el.js +++ b/apps/settings/l10n/el.js @@ -349,11 +349,9 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Ο περιηγητής σας δεν υποστηρίζει το WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ως διαχειριστής μπορείτε να ρυθμίσετε λεπτομερώς την συμπεριφορά διαμοιρασμού.\nΠαρακαλούμε ανατρέξτε στην τεκμηρίωση για περισσότερες πληροφορίες.", "You need to enable the File sharing App." : "Πρέπει να ενεργοποιήσετε την εφαρμογή File sharing", - "by {author}\n{license}" : "από {author}\n{license}", "Admins" : "Διαχειριστές", "New account" : "Νέος λογαριασμός", "Group name" : "Όνομα ομάδας", - "{license}-licensed" : "{license}-αδειοδοτημένο", "Sending…" : "Γινεται αποστολή...", "Email sent" : "Το Email απεστάλη ", "Location" : "Τοποθεσία", @@ -478,6 +476,8 @@ OC.L10N.register( "Will be autogenerated" : "Θα δημιουργηθεί αυτόματα", "Add a new user" : "Προσθήκη νέου χρήστη", "No users in here" : "Δεν υπάρχουν χρήστες εδώ", + "{license}-licensed" : "{license}-αδειοδοτημένο", + "by {author}\n{license}" : "από {author}\n{license}", "Enter group name" : "Εισάγετε όνομα ομάδας", "Add group" : "Προσθήκη ομάδας", "Active users" : "Ενεργοί χρήστες", diff --git a/apps/settings/l10n/el.json b/apps/settings/l10n/el.json index 7d40758a842..1b4aefc8faf 100644 --- a/apps/settings/l10n/el.json +++ b/apps/settings/l10n/el.json @@ -347,11 +347,9 @@ "Your browser does not support WebAuthn." : "Ο περιηγητής σας δεν υποστηρίζει το WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ως διαχειριστής μπορείτε να ρυθμίσετε λεπτομερώς την συμπεριφορά διαμοιρασμού.\nΠαρακαλούμε ανατρέξτε στην τεκμηρίωση για περισσότερες πληροφορίες.", "You need to enable the File sharing App." : "Πρέπει να ενεργοποιήσετε την εφαρμογή File sharing", - "by {author}\n{license}" : "από {author}\n{license}", "Admins" : "Διαχειριστές", "New account" : "Νέος λογαριασμός", "Group name" : "Όνομα ομάδας", - "{license}-licensed" : "{license}-αδειοδοτημένο", "Sending…" : "Γινεται αποστολή...", "Email sent" : "Το Email απεστάλη ", "Location" : "Τοποθεσία", @@ -476,6 +474,8 @@ "Will be autogenerated" : "Θα δημιουργηθεί αυτόματα", "Add a new user" : "Προσθήκη νέου χρήστη", "No users in here" : "Δεν υπάρχουν χρήστες εδώ", + "{license}-licensed" : "{license}-αδειοδοτημένο", + "by {author}\n{license}" : "από {author}\n{license}", "Enter group name" : "Εισάγετε όνομα ομάδας", "Add group" : "Προσθήκη ομάδας", "Active users" : "Ενεργοί χρήστες", diff --git a/apps/settings/l10n/en_GB.js b/apps/settings/l10n/en_GB.js index 48a383fe6d3..aefc94e3b50 100644 --- a/apps/settings/l10n/en_GB.js +++ b/apps/settings/l10n/en_GB.js @@ -672,7 +672,6 @@ OC.L10N.register( "Loading categories" : "Loading categories", "Developer documentation ↗" : "Developer documentation ↗", "Version {version}, {license}-licensed" : "Version {version}, {license}-licensed", - "by {author}\n{license}" : "by {author}\n{license}", "Active accounts" : "Active accounts", "Admins" : "Admins", "Disabled accounts" : "Disabled accounts", @@ -683,7 +682,6 @@ OC.L10N.register( "Create group" : "Create group", "Group name" : "Group name", "Please enter a valid group name" : "Please enter a valid group name", - "{license}-licensed" : "{license}-licensed", "Failed to create group" : "Failed to create group", "Sending…" : "Sending…", "Email sent" : "Email sent", @@ -837,6 +835,8 @@ OC.L10N.register( "Will be autogenerated" : "Will be autogenerated", "Add a new user" : "Add a new user", "No users in here" : "No users in here", + "{license}-licensed" : "{license}-licensed", + "by {author}\n{license}" : "by {author}\n{license}", "Enter group name" : "Enter group name", "Add group" : "Add group", "Active users" : "Active users", diff --git a/apps/settings/l10n/en_GB.json b/apps/settings/l10n/en_GB.json index 187775b4446..08cd52622c1 100644 --- a/apps/settings/l10n/en_GB.json +++ b/apps/settings/l10n/en_GB.json @@ -670,7 +670,6 @@ "Loading categories" : "Loading categories", "Developer documentation ↗" : "Developer documentation ↗", "Version {version}, {license}-licensed" : "Version {version}, {license}-licensed", - "by {author}\n{license}" : "by {author}\n{license}", "Active accounts" : "Active accounts", "Admins" : "Admins", "Disabled accounts" : "Disabled accounts", @@ -681,7 +680,6 @@ "Create group" : "Create group", "Group name" : "Group name", "Please enter a valid group name" : "Please enter a valid group name", - "{license}-licensed" : "{license}-licensed", "Failed to create group" : "Failed to create group", "Sending…" : "Sending…", "Email sent" : "Email sent", @@ -835,6 +833,8 @@ "Will be autogenerated" : "Will be autogenerated", "Add a new user" : "Add a new user", "No users in here" : "No users in here", + "{license}-licensed" : "{license}-licensed", + "by {author}\n{license}" : "by {author}\n{license}", "Enter group name" : "Enter group name", "Add group" : "Add group", "Active users" : "Active users", diff --git a/apps/settings/l10n/eo.js b/apps/settings/l10n/eo.js index 9ea04a423ee..d33674f6802 100644 --- a/apps/settings/l10n/eo.js +++ b/apps/settings/l10n/eo.js @@ -244,7 +244,6 @@ OC.L10N.register( "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Kiel administranto, vi povas agordi plidetale la kunhavigon. Bv. vidi la dokumentaron pri tio.", "Admins" : "Administrantoj", "Group name" : "Gruponomo", - "{license}-licensed" : "Permesilo: {license}", "Sending…" : "Sendado...", "Email sent" : "La retpoŝtaĵo sendiĝis", "Location" : "Loko", @@ -337,6 +336,7 @@ OC.L10N.register( "Will be autogenerated" : "Estos memgenerita", "Add a new user" : "Aldoni novan uzanton", "No users in here" : "Neniu uzanto ĉi tie", + "{license}-licensed" : "Permesilo: {license}", "Add group" : "Aldoni grupon", "Active users" : "Aktivaj uzantoj", "Disabled users" : "Malebligitaj uzantoj", diff --git a/apps/settings/l10n/eo.json b/apps/settings/l10n/eo.json index cda841503d9..3edc84196e5 100644 --- a/apps/settings/l10n/eo.json +++ b/apps/settings/l10n/eo.json @@ -242,7 +242,6 @@ "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Kiel administranto, vi povas agordi plidetale la kunhavigon. Bv. vidi la dokumentaron pri tio.", "Admins" : "Administrantoj", "Group name" : "Gruponomo", - "{license}-licensed" : "Permesilo: {license}", "Sending…" : "Sendado...", "Email sent" : "La retpoŝtaĵo sendiĝis", "Location" : "Loko", @@ -335,6 +334,7 @@ "Will be autogenerated" : "Estos memgenerita", "Add a new user" : "Aldoni novan uzanton", "No users in here" : "Neniu uzanto ĉi tie", + "{license}-licensed" : "Permesilo: {license}", "Add group" : "Aldoni grupon", "Active users" : "Aktivaj uzantoj", "Disabled users" : "Malebligitaj uzantoj", diff --git a/apps/settings/l10n/es.js b/apps/settings/l10n/es.js index ed58ffde608..5c6f1b2333f 100644 --- a/apps/settings/l10n/es.js +++ b/apps/settings/l10n/es.js @@ -579,13 +579,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Tu navegador no soporta WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador puede ajustar el comportamiento de compartir. Por favor, lea la documentación para más información.", "You need to enable the File sharing App." : "Tienes que activar la app File sharing", - "by {author}\n{license}" : "por {author}\n{license}", "Admins" : "Administradores", "New account" : "Nueva cuenta", "Create group" : "Crear grupo", "Group name" : "Nombre del grupo", "Please enter a valid group name" : "Por favor, ingrese un nombre de grupo válido", - "{license}-licensed" : "licenciado bajo {license}", "Failed to create group" : "Fallo al crear el grupo", "Sending…" : "Enviando...", "Email sent" : "Correo electrónico enviado", @@ -734,6 +732,8 @@ OC.L10N.register( "Will be autogenerated" : "Se generará de forma automática", "Add a new user" : "Añadir nuevo usuario", "No users in here" : "No hay usuarios aquí", + "{license}-licensed" : "licenciado bajo {license}", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Introduce el nombre del grupo", "Add group" : "Añadir grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/es.json b/apps/settings/l10n/es.json index 0345261b11e..c720e48e525 100644 --- a/apps/settings/l10n/es.json +++ b/apps/settings/l10n/es.json @@ -577,13 +577,11 @@ "Your browser does not support WebAuthn." : "Tu navegador no soporta WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador puede ajustar el comportamiento de compartir. Por favor, lea la documentación para más información.", "You need to enable the File sharing App." : "Tienes que activar la app File sharing", - "by {author}\n{license}" : "por {author}\n{license}", "Admins" : "Administradores", "New account" : "Nueva cuenta", "Create group" : "Crear grupo", "Group name" : "Nombre del grupo", "Please enter a valid group name" : "Por favor, ingrese un nombre de grupo válido", - "{license}-licensed" : "licenciado bajo {license}", "Failed to create group" : "Fallo al crear el grupo", "Sending…" : "Enviando...", "Email sent" : "Correo electrónico enviado", @@ -732,6 +730,8 @@ "Will be autogenerated" : "Se generará de forma automática", "Add a new user" : "Añadir nuevo usuario", "No users in here" : "No hay usuarios aquí", + "{license}-licensed" : "licenciado bajo {license}", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Introduce el nombre del grupo", "Add group" : "Añadir grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/es_EC.js b/apps/settings/l10n/es_EC.js index 383baf00435..15894b2c726 100644 --- a/apps/settings/l10n/es_EC.js +++ b/apps/settings/l10n/es_EC.js @@ -402,10 +402,8 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Tu navegador no admite WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, puedes hacer ajustes finos al comportamiento de compartir. Por favor consulta la documentación para más información. ", "You need to enable the File sharing App." : "Debes habilitar la aplicación Compartir archivos.", - "by {author}\n{license}" : "por {author}\n {license}", "Admins" : "Administradores", "Group name" : "Nombre del grupo", - "{license}-licensed" : "Licenciado con {license}", "Sending…" : "Enviando...", "Email sent" : "Correo electrónico enviado", "Location" : "Ubicación", @@ -545,6 +543,8 @@ OC.L10N.register( "Will be autogenerated" : "Se generará automáticamente", "Add a new user" : "Agregar un nuevo usuario", "No users in here" : "No hay usuarios aquí", + "{license}-licensed" : "Licenciado con {license}", + "by {author}\n{license}" : "por {author}\n {license}", "Enter group name" : "Ingresa el nombre del grupo", "Add group" : "Agregar grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/es_EC.json b/apps/settings/l10n/es_EC.json index df2f9b14dea..238893bff7b 100644 --- a/apps/settings/l10n/es_EC.json +++ b/apps/settings/l10n/es_EC.json @@ -400,10 +400,8 @@ "Your browser does not support WebAuthn." : "Tu navegador no admite WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador, puedes hacer ajustes finos al comportamiento de compartir. Por favor consulta la documentación para más información. ", "You need to enable the File sharing App." : "Debes habilitar la aplicación Compartir archivos.", - "by {author}\n{license}" : "por {author}\n {license}", "Admins" : "Administradores", "Group name" : "Nombre del grupo", - "{license}-licensed" : "Licenciado con {license}", "Sending…" : "Enviando...", "Email sent" : "Correo electrónico enviado", "Location" : "Ubicación", @@ -543,6 +541,8 @@ "Will be autogenerated" : "Se generará automáticamente", "Add a new user" : "Agregar un nuevo usuario", "No users in here" : "No hay usuarios aquí", + "{license}-licensed" : "Licenciado con {license}", + "by {author}\n{license}" : "por {author}\n {license}", "Enter group name" : "Ingresa el nombre del grupo", "Add group" : "Agregar grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/es_MX.js b/apps/settings/l10n/es_MX.js index ee815c17d74..630b221e6d1 100644 --- a/apps/settings/l10n/es_MX.js +++ b/apps/settings/l10n/es_MX.js @@ -601,7 +601,6 @@ OC.L10N.register( "Loading categories" : "Cargando categorías", "Developer documentation ↗" : "Documentación del desarrollador ↗", "Version {version}, {license}-licensed" : "Versión {version}, licencia {license}", - "by {author}\n{license}" : "por {author}\n{license}", "Active accounts" : "Cuentas activas", "Admins" : "Administradores", "Disabled accounts" : "Cuentas deshabilitadas", @@ -612,7 +611,6 @@ OC.L10N.register( "Create group" : "Crear grupo", "Group name" : "Nombre del grupo", "Please enter a valid group name" : "Por favor, ingrese un nombre de grupo válido", - "{license}-licensed" : "Licenciado bajo {license}", "Failed to create group" : "No se pudo crear el grupo", "Sending…" : "Enviando...", "Email sent" : "Correo electrónico enviado", @@ -748,6 +746,8 @@ OC.L10N.register( "Will be autogenerated" : "Será autogenerado", "Add a new user" : "Añadir nuevo usuario", "No users in here" : "No hay usuarios aquí", + "{license}-licensed" : "Licenciado bajo {license}", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Ingrese el nombre del grupo", "Add group" : "Agregar grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/es_MX.json b/apps/settings/l10n/es_MX.json index 4bef065aff9..fa977d8e372 100644 --- a/apps/settings/l10n/es_MX.json +++ b/apps/settings/l10n/es_MX.json @@ -599,7 +599,6 @@ "Loading categories" : "Cargando categorías", "Developer documentation ↗" : "Documentación del desarrollador ↗", "Version {version}, {license}-licensed" : "Versión {version}, licencia {license}", - "by {author}\n{license}" : "por {author}\n{license}", "Active accounts" : "Cuentas activas", "Admins" : "Administradores", "Disabled accounts" : "Cuentas deshabilitadas", @@ -610,7 +609,6 @@ "Create group" : "Crear grupo", "Group name" : "Nombre del grupo", "Please enter a valid group name" : "Por favor, ingrese un nombre de grupo válido", - "{license}-licensed" : "Licenciado bajo {license}", "Failed to create group" : "No se pudo crear el grupo", "Sending…" : "Enviando...", "Email sent" : "Correo electrónico enviado", @@ -746,6 +744,8 @@ "Will be autogenerated" : "Será autogenerado", "Add a new user" : "Añadir nuevo usuario", "No users in here" : "No hay usuarios aquí", + "{license}-licensed" : "Licenciado bajo {license}", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Ingrese el nombre del grupo", "Add group" : "Agregar grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/et_EE.js b/apps/settings/l10n/et_EE.js index 99b6051c1de..81cfdfc5bac 100644 --- a/apps/settings/l10n/et_EE.js +++ b/apps/settings/l10n/et_EE.js @@ -196,7 +196,6 @@ OC.L10N.register( "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saate jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", "Admins" : "Haldurid", "Group name" : "Grupi nimi", - "{license}-licensed" : "{license} litsents", "Sending…" : "Saadan...", "Email sent" : "E-kiri on saadetud", "Location" : "Asukoht", @@ -257,6 +256,7 @@ OC.L10N.register( "Disable user" : "Keela kasutaja", "Enable user" : "Luba kasutaja", "Add a new user" : "Lisa uus kasutaja", + "{license}-licensed" : "{license} litsents", "Add group" : "Lisa grupp", "Active users" : "Aktiivseid kasutajaid", "Disabled users" : "Keelatud kasutajad", diff --git a/apps/settings/l10n/et_EE.json b/apps/settings/l10n/et_EE.json index e64731c65d3..8319da25f69 100644 --- a/apps/settings/l10n/et_EE.json +++ b/apps/settings/l10n/et_EE.json @@ -194,7 +194,6 @@ "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administraatorina saate jagamise valikuid täpselt seadistada. Lisateavet leiad dokumentatsioonist.", "Admins" : "Haldurid", "Group name" : "Grupi nimi", - "{license}-licensed" : "{license} litsents", "Sending…" : "Saadan...", "Email sent" : "E-kiri on saadetud", "Location" : "Asukoht", @@ -255,6 +254,7 @@ "Disable user" : "Keela kasutaja", "Enable user" : "Luba kasutaja", "Add a new user" : "Lisa uus kasutaja", + "{license}-licensed" : "{license} litsents", "Add group" : "Lisa grupp", "Active users" : "Aktiivseid kasutajaid", "Disabled users" : "Keelatud kasutajad", diff --git a/apps/settings/l10n/eu.js b/apps/settings/l10n/eu.js index b21bdaea1e9..6e218ae8f90 100644 --- a/apps/settings/l10n/eu.js +++ b/apps/settings/l10n/eu.js @@ -423,11 +423,9 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Zure nabigatzaileak ez du WebAuthn onartzen.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Admin bezala partekatze portaerak zehaztasunez konfigura daitezke. Ikusi dokumentazioa informazio gehiagorako. ", "You need to enable the File sharing App." : "Fitxategi partekatze aplikazioa gaitu behar duzu.", - "by {author}\n{license}" : "{autor}-(e)k egina\n{license}", "Admins" : "Administratzaileak", "New account" : "Kontu berria", "Group name" : "Taldearen izena", - "{license}-licensed" : "{license}-lizentziaduna", "Sending…" : "Bidaltzen...", "Email sent" : "Eposta bidalia", "Location" : "Kokapena", @@ -573,6 +571,8 @@ OC.L10N.register( "Will be autogenerated" : "Automatikoki sortuko da", "Add a new user" : "Gehitu erabiltze berria", "No users in here" : "Ez dago erabiltzailerik hemen", + "{license}-licensed" : "{license}-lizentziaduna", + "by {author}\n{license}" : "{autor}-(e)k egina\n{license}", "Enter group name" : "Talderan izena sartu", "Add group" : "Taldea gehitu", "Active users" : "Erabiltzaile aktiboak", diff --git a/apps/settings/l10n/eu.json b/apps/settings/l10n/eu.json index ea7acbef5aa..f22b29c95bf 100644 --- a/apps/settings/l10n/eu.json +++ b/apps/settings/l10n/eu.json @@ -421,11 +421,9 @@ "Your browser does not support WebAuthn." : "Zure nabigatzaileak ez du WebAuthn onartzen.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Admin bezala partekatze portaerak zehaztasunez konfigura daitezke. Ikusi dokumentazioa informazio gehiagorako. ", "You need to enable the File sharing App." : "Fitxategi partekatze aplikazioa gaitu behar duzu.", - "by {author}\n{license}" : "{autor}-(e)k egina\n{license}", "Admins" : "Administratzaileak", "New account" : "Kontu berria", "Group name" : "Taldearen izena", - "{license}-licensed" : "{license}-lizentziaduna", "Sending…" : "Bidaltzen...", "Email sent" : "Eposta bidalia", "Location" : "Kokapena", @@ -571,6 +569,8 @@ "Will be autogenerated" : "Automatikoki sortuko da", "Add a new user" : "Gehitu erabiltze berria", "No users in here" : "Ez dago erabiltzailerik hemen", + "{license}-licensed" : "{license}-lizentziaduna", + "by {author}\n{license}" : "{autor}-(e)k egina\n{license}", "Enter group name" : "Talderan izena sartu", "Add group" : "Taldea gehitu", "Active users" : "Erabiltzaile aktiboak", diff --git a/apps/settings/l10n/fa.js b/apps/settings/l10n/fa.js index 87ccbfd69fc..046de149665 100644 --- a/apps/settings/l10n/fa.js +++ b/apps/settings/l10n/fa.js @@ -224,7 +224,7 @@ OC.L10N.register( "Allow filesystem access" : "اجازهٔ دسترسی به سامانهپرونده", "Rename" : "تغییرنام", "Revoke" : "لغو", - "Wipe device" : "زدودن افزاره", + "Wipe device" : "حذف دستگاه", "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Revoking this token might prevent the wiping of your device if it has not started the wipe yet.", "Google Chrome for Android" : "کروم گوگل برای اندروید", "{productName} iOS app" : "کارهٔ iOS {productName}", @@ -234,8 +234,8 @@ OC.L10N.register( "This session" : "این نشست", "Device" : "افزاره", "Last activity" : "آخرین فعّالیت", - "Devices & sessions" : "افزارهها و نشستها", - "Web, desktop and mobile clients currently logged in to your account." : "کارخواههای وب، میزکار و همراهی که اکنون به حسابتان وارد شدهاند.", + "Devices & sessions" : "دستگاه ها و نشست ها", + "Web, desktop and mobile clients currently logged in to your account." : "لیست دستگاه ها و نشست های فعال وارد شده با اکانت شما", "App name" : "نام برنامه", "Create new app password" : "ساختن رمزعبور برنامه جدید ", "Error while creating device token" : "هنگام ایجاد نشانه وسیله خطایی رخ داد", @@ -296,7 +296,7 @@ OC.L10N.register( "You are using <strong>{usage}</strong>" : "فضای مورد استفاده: <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "شما در حال استفادهٔ <strong>{usage}</strong> از <strong>{totalSpace}</strong> (<strong>{usageRelative}٪</strong>) فضا هستید", "Your full name" : "Your full name", - "Primary email for password reset and notifications" : "Primary email for password reset and notifications", + "Primary email for password reset and notifications" : "ایمیل اصلی برای بازیابی رمز عبور و دریافت اعلان ها", "Email options" : "Email options", "Remove primary email" : "Remove primary email", "Delete email" : "Delete email", @@ -311,22 +311,22 @@ OC.L10N.register( "Unable to delete additional email address" : "Unable to delete additional email address", "No email address set" : "آدرسایمیلی تنظیم نشده است", "Your handle" : "Your handle", - "Your headline" : "Your headline", + "Your headline" : "عنوان سرصفحه", "Help translate" : "به ترجمه آن کمک کنید", "Unable to update language" : "Unable to update language", "No language set" : "زبانی تنظیم نشده است.", "Week starts on {firstDayOfWeek}" : "Week starts on {firstDayOfWeek}", "Unable to update locale" : "Unable to update locale", "No locale set" : "No locale set", - "Your city" : "Your city", - "Your organisation" : "Your organisation", + "Your city" : "شهر شما", + "Your organisation" : "نام سازمان", "Your phone number" : "شماره تلفن شما", - "Edit your Profile visibility" : "Edit your Profile visibility", + "Edit your Profile visibility" : "ویرایش امکان مشاهده پروفایل", "Unable to update profile enabled state" : "Unable to update profile enabled state", "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected.", "Unable to update visibility of {displayId}" : "Unable to update visibility of {displayId}", - "Your role" : "Your role", - "Your website" : "Your website", + "Your role" : "نقش شما", + "Your website" : "وبسایت شما", "No {property} set" : "No {property} set", "Unable to update {property}" : "Unable to update {property}", "Change scope level of {property}, current scope is {scope}" : "Change scope level of {property}, current scope is {scope}", @@ -344,7 +344,7 @@ OC.L10N.register( "Other languages" : "Other languages", "Password change is disabled because the master key is disabled" : "تغییر رمز غیرفعال شده است زیرا کلید اصلی غیرفعال شده است", "New user" : "کاربر جدید", - "Display name" : "نام جهت نمایش", + "Display name" : "نمایش نام", "Either password or email is required" : "Either password or email is required", "Password (required)" : "Password (required)", "Email (required)" : "Email (required)", @@ -415,10 +415,8 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Your browser does not support WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "به عنوان مدیر ، می توانید رفتار اشتراک گذاری را تنظیم کنید. لطفا برای اطلاعات بیشتر به اسناد مراجعه کنید.", "You need to enable the File sharing App." : "You need to enable the File sharing App.", - "by {author}\n{license}" : "by {author}\n{license}", "Admins" : "مدیران", "Group name" : "نام گروه", - "{license}-licensed" : "دارای مجوز- {license}", "Sending…" : "در حال ارسال", "Email sent" : "ایمیل ارسال شد", "Location" : "مکان", @@ -432,7 +430,7 @@ OC.L10N.register( "Role" : "نقش", "Fediverse (e.g. Mastodon)" : "Fediverse (e.g. Mastodon)", "Website" : "وب سایت", - "Profile visibility" : "Profile visibility", + "Profile visibility" : "امکان دیده شدن پروفایل", "Locale" : "محل", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Not available as this property is required for core functionality including file sharing and calendar invitations", "Your apps" : "برنامههای شما", @@ -442,7 +440,7 @@ OC.L10N.register( "App bundles" : "بسته های برنامه", "Featured apps" : "برنامههای برگزیده", "Supported apps" : "Supported apps", - "Show to everyone" : "Show to everyone", + "Show to everyone" : "نمایش به همه", "Hide" : "پنهان کردن", "Download and enable" : "بارگیری و فعال سازی", "Allow untested app" : "Allow untested app", @@ -544,8 +542,8 @@ OC.L10N.register( "Your email address" : "پست الکترونیکی شما", "Additional emails" : "Additional emails", "Your location" : "مکان شما", - "Enable Profile" : "Enable Profile", - "Your Twitter handle" : "Your Twitter handle", + "Enable Profile" : "فعال کردن پروفایل", + "Your Twitter handle" : "آی دی شما در توییتر", "You do not have permissions to see the details of this user" : "شما مجوز دیدن جزئیات این کاربر را ندارید", "Add new password" : "رمزعبور جدید اضافه کنید", "Add new email address" : "آدرس ایمیل جدید اضافه کنید", @@ -560,6 +558,8 @@ OC.L10N.register( "Will be autogenerated" : "به صورت خودکار تولید می شود", "Add a new user" : "افزودن کاربر جدید", "No users in here" : "هیچ کاربر در اینجا نیست", + "{license}-licensed" : "دارای مجوز- {license}", + "by {author}\n{license}" : "by {author}\n{license}", "Enter group name" : "Enter group name", "Add group" : "افزودن گروه", "Active users" : "کاربران فعال", @@ -572,7 +572,7 @@ OC.L10N.register( "Twitter" : "توییتر", "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "Not available as federation has been disabled for your account, contact your system administrator if you have any questions", "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions", - "Show to logged in users only" : "Show to logged in users only", + "Show to logged in users only" : "نمایش فقط برای کاربران وارد شده به سامانه", "Enable untested app" : "برنامه آزمایش نشده را فعال کنید", "SMTP Username" : "نام کاربری SMTP", "Expire after" : "Expire after", diff --git a/apps/settings/l10n/fa.json b/apps/settings/l10n/fa.json index bcd32819a48..63e2e45e4ff 100644 --- a/apps/settings/l10n/fa.json +++ b/apps/settings/l10n/fa.json @@ -222,7 +222,7 @@ "Allow filesystem access" : "اجازهٔ دسترسی به سامانهپرونده", "Rename" : "تغییرنام", "Revoke" : "لغو", - "Wipe device" : "زدودن افزاره", + "Wipe device" : "حذف دستگاه", "Revoking this token might prevent the wiping of your device if it has not started the wipe yet." : "Revoking this token might prevent the wiping of your device if it has not started the wipe yet.", "Google Chrome for Android" : "کروم گوگل برای اندروید", "{productName} iOS app" : "کارهٔ iOS {productName}", @@ -232,8 +232,8 @@ "This session" : "این نشست", "Device" : "افزاره", "Last activity" : "آخرین فعّالیت", - "Devices & sessions" : "افزارهها و نشستها", - "Web, desktop and mobile clients currently logged in to your account." : "کارخواههای وب، میزکار و همراهی که اکنون به حسابتان وارد شدهاند.", + "Devices & sessions" : "دستگاه ها و نشست ها", + "Web, desktop and mobile clients currently logged in to your account." : "لیست دستگاه ها و نشست های فعال وارد شده با اکانت شما", "App name" : "نام برنامه", "Create new app password" : "ساختن رمزعبور برنامه جدید ", "Error while creating device token" : "هنگام ایجاد نشانه وسیله خطایی رخ داد", @@ -294,7 +294,7 @@ "You are using <strong>{usage}</strong>" : "فضای مورد استفاده: <strong>{usage}</strong>", "You are using <strong>{usage}</strong> of <strong>{totalSpace}</strong> (<strong>{usageRelative}%</strong>)" : "شما در حال استفادهٔ <strong>{usage}</strong> از <strong>{totalSpace}</strong> (<strong>{usageRelative}٪</strong>) فضا هستید", "Your full name" : "Your full name", - "Primary email for password reset and notifications" : "Primary email for password reset and notifications", + "Primary email for password reset and notifications" : "ایمیل اصلی برای بازیابی رمز عبور و دریافت اعلان ها", "Email options" : "Email options", "Remove primary email" : "Remove primary email", "Delete email" : "Delete email", @@ -309,22 +309,22 @@ "Unable to delete additional email address" : "Unable to delete additional email address", "No email address set" : "آدرسایمیلی تنظیم نشده است", "Your handle" : "Your handle", - "Your headline" : "Your headline", + "Your headline" : "عنوان سرصفحه", "Help translate" : "به ترجمه آن کمک کنید", "Unable to update language" : "Unable to update language", "No language set" : "زبانی تنظیم نشده است.", "Week starts on {firstDayOfWeek}" : "Week starts on {firstDayOfWeek}", "Unable to update locale" : "Unable to update locale", "No locale set" : "No locale set", - "Your city" : "Your city", - "Your organisation" : "Your organisation", + "Your city" : "شهر شما", + "Your organisation" : "نام سازمان", "Your phone number" : "شماره تلفن شما", - "Edit your Profile visibility" : "Edit your Profile visibility", + "Edit your Profile visibility" : "ویرایش امکان مشاهده پروفایل", "Unable to update profile enabled state" : "Unable to update profile enabled state", "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected." : "The more restrictive setting of either visibility or scope is respected on your Profile. For example, if visibility is set to \"Show to everyone\" and scope is set to \"Private\", \"Private\" is respected.", "Unable to update visibility of {displayId}" : "Unable to update visibility of {displayId}", - "Your role" : "Your role", - "Your website" : "Your website", + "Your role" : "نقش شما", + "Your website" : "وبسایت شما", "No {property} set" : "No {property} set", "Unable to update {property}" : "Unable to update {property}", "Change scope level of {property}, current scope is {scope}" : "Change scope level of {property}, current scope is {scope}", @@ -342,7 +342,7 @@ "Other languages" : "Other languages", "Password change is disabled because the master key is disabled" : "تغییر رمز غیرفعال شده است زیرا کلید اصلی غیرفعال شده است", "New user" : "کاربر جدید", - "Display name" : "نام جهت نمایش", + "Display name" : "نمایش نام", "Either password or email is required" : "Either password or email is required", "Password (required)" : "Password (required)", "Email (required)" : "Email (required)", @@ -413,10 +413,8 @@ "Your browser does not support WebAuthn." : "Your browser does not support WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "به عنوان مدیر ، می توانید رفتار اشتراک گذاری را تنظیم کنید. لطفا برای اطلاعات بیشتر به اسناد مراجعه کنید.", "You need to enable the File sharing App." : "You need to enable the File sharing App.", - "by {author}\n{license}" : "by {author}\n{license}", "Admins" : "مدیران", "Group name" : "نام گروه", - "{license}-licensed" : "دارای مجوز- {license}", "Sending…" : "در حال ارسال", "Email sent" : "ایمیل ارسال شد", "Location" : "مکان", @@ -430,7 +428,7 @@ "Role" : "نقش", "Fediverse (e.g. Mastodon)" : "Fediverse (e.g. Mastodon)", "Website" : "وب سایت", - "Profile visibility" : "Profile visibility", + "Profile visibility" : "امکان دیده شدن پروفایل", "Locale" : "محل", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Not available as this property is required for core functionality including file sharing and calendar invitations", "Your apps" : "برنامههای شما", @@ -440,7 +438,7 @@ "App bundles" : "بسته های برنامه", "Featured apps" : "برنامههای برگزیده", "Supported apps" : "Supported apps", - "Show to everyone" : "Show to everyone", + "Show to everyone" : "نمایش به همه", "Hide" : "پنهان کردن", "Download and enable" : "بارگیری و فعال سازی", "Allow untested app" : "Allow untested app", @@ -542,8 +540,8 @@ "Your email address" : "پست الکترونیکی شما", "Additional emails" : "Additional emails", "Your location" : "مکان شما", - "Enable Profile" : "Enable Profile", - "Your Twitter handle" : "Your Twitter handle", + "Enable Profile" : "فعال کردن پروفایل", + "Your Twitter handle" : "آی دی شما در توییتر", "You do not have permissions to see the details of this user" : "شما مجوز دیدن جزئیات این کاربر را ندارید", "Add new password" : "رمزعبور جدید اضافه کنید", "Add new email address" : "آدرس ایمیل جدید اضافه کنید", @@ -558,6 +556,8 @@ "Will be autogenerated" : "به صورت خودکار تولید می شود", "Add a new user" : "افزودن کاربر جدید", "No users in here" : "هیچ کاربر در اینجا نیست", + "{license}-licensed" : "دارای مجوز- {license}", + "by {author}\n{license}" : "by {author}\n{license}", "Enter group name" : "Enter group name", "Add group" : "افزودن گروه", "Active users" : "کاربران فعال", @@ -570,7 +570,7 @@ "Twitter" : "توییتر", "Not available as federation has been disabled for your account, contact your system administrator if you have any questions" : "Not available as federation has been disabled for your account, contact your system administrator if you have any questions", "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions" : "Not available as publishing user specific data to the lookup server is not allowed, contact your system administrator if you have any questions", - "Show to logged in users only" : "Show to logged in users only", + "Show to logged in users only" : "نمایش فقط برای کاربران وارد شده به سامانه", "Enable untested app" : "برنامه آزمایش نشده را فعال کنید", "SMTP Username" : "نام کاربری SMTP", "Expire after" : "Expire after", diff --git a/apps/settings/l10n/fi.js b/apps/settings/l10n/fi.js index 376b93efebe..9bc8840c7ee 100644 --- a/apps/settings/l10n/fi.js +++ b/apps/settings/l10n/fi.js @@ -393,13 +393,11 @@ OC.L10N.register( "The following devices are configured for your account:" : "Seuraavat laitteet on määritetty tilillesi:", "Your browser does not support WebAuthn." : "Selaimesi ei tue WebAuthn-standardia.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ylläpitäjänä voit hienosäätää jakamista. Katso dokumentaatiosta lisätietoa.", - "by {author}\n{license}" : "tekijä {author}\n{license}", "Admins" : "Ylläpitäjät", "New account" : "Uusi tili", "Create group" : "Luo ryhmä", "Group name" : "Ryhmän nimi", "Please enter a valid group name" : "Kirjoita kelvollinen ryhmän nimi", - "{license}-licensed" : "{license}-lisensoitu", "Failed to create group" : "Ryhmän luonti epäonnistui", "Sending…" : "Lähetetään…", "Email sent" : "Sähköposti lähetetty", @@ -524,6 +522,8 @@ OC.L10N.register( "Will be autogenerated" : "Luodaan automaattisesti", "Add a new user" : "Lisää uusi käyttäjä", "No users in here" : "Täällä ei ole käyttäjiä", + "{license}-licensed" : "{license}-lisensoitu", + "by {author}\n{license}" : "tekijä {author}\n{license}", "Enter group name" : "Kirjoita ryhmän nimi", "Add group" : "Lisää ryhmä", "Active users" : "Aktiiviset käyttäjät", diff --git a/apps/settings/l10n/fi.json b/apps/settings/l10n/fi.json index 5fe127ed03f..30f68615970 100644 --- a/apps/settings/l10n/fi.json +++ b/apps/settings/l10n/fi.json @@ -391,13 +391,11 @@ "The following devices are configured for your account:" : "Seuraavat laitteet on määritetty tilillesi:", "Your browser does not support WebAuthn." : "Selaimesi ei tue WebAuthn-standardia.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ylläpitäjänä voit hienosäätää jakamista. Katso dokumentaatiosta lisätietoa.", - "by {author}\n{license}" : "tekijä {author}\n{license}", "Admins" : "Ylläpitäjät", "New account" : "Uusi tili", "Create group" : "Luo ryhmä", "Group name" : "Ryhmän nimi", "Please enter a valid group name" : "Kirjoita kelvollinen ryhmän nimi", - "{license}-licensed" : "{license}-lisensoitu", "Failed to create group" : "Ryhmän luonti epäonnistui", "Sending…" : "Lähetetään…", "Email sent" : "Sähköposti lähetetty", @@ -522,6 +520,8 @@ "Will be autogenerated" : "Luodaan automaattisesti", "Add a new user" : "Lisää uusi käyttäjä", "No users in here" : "Täällä ei ole käyttäjiä", + "{license}-licensed" : "{license}-lisensoitu", + "by {author}\n{license}" : "tekijä {author}\n{license}", "Enter group name" : "Kirjoita ryhmän nimi", "Add group" : "Lisää ryhmä", "Active users" : "Aktiiviset käyttäjät", diff --git a/apps/settings/l10n/fr.js b/apps/settings/l10n/fr.js index b495737c5a2..df491106c59 100644 --- a/apps/settings/l10n/fr.js +++ b/apps/settings/l10n/fr.js @@ -623,7 +623,6 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Votre navigateur ne prend pas en charge WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "En tant qu'administrateur, vous pouvez affiner le comportement de partage. Veuillez consulter la documentation pour plus d'informations.", "You need to enable the File sharing App." : "Vous devez activer l'application de partage de fichiers", - "by {author}\n{license}" : "par {author}\n{license}", "Active accounts" : "Comptes actifs", "Admins" : "Administrateurs", "Disabled accounts" : "Comptes désactivés", @@ -633,7 +632,6 @@ OC.L10N.register( "Create group" : "Créer un groupe", "Group name" : "Nom du groupe", "Please enter a valid group name" : "Merci de saisir un nom de groupe valide", - "{license}-licensed" : "Sous licence {license}", "Failed to create group" : "La création du groupe a échoué", "Sending…" : "Envoi en cours...", "Email sent" : "E-mail envoyé", @@ -786,6 +784,8 @@ OC.L10N.register( "Will be autogenerated" : "Sera généré automatiquement", "Add a new user" : "Ajouter un nouvel utilisateur", "No users in here" : "Aucun utilisateur", + "{license}-licensed" : "Sous licence {license}", + "by {author}\n{license}" : "par {author}\n{license}", "Enter group name" : "Saisissez le nom du groupe", "Add group" : "Ajouter un groupe", "Active users" : "Utilisateurs actifs", diff --git a/apps/settings/l10n/fr.json b/apps/settings/l10n/fr.json index 45e3b34dbf2..ca2811225a4 100644 --- a/apps/settings/l10n/fr.json +++ b/apps/settings/l10n/fr.json @@ -621,7 +621,6 @@ "Your browser does not support WebAuthn." : "Votre navigateur ne prend pas en charge WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "En tant qu'administrateur, vous pouvez affiner le comportement de partage. Veuillez consulter la documentation pour plus d'informations.", "You need to enable the File sharing App." : "Vous devez activer l'application de partage de fichiers", - "by {author}\n{license}" : "par {author}\n{license}", "Active accounts" : "Comptes actifs", "Admins" : "Administrateurs", "Disabled accounts" : "Comptes désactivés", @@ -631,7 +630,6 @@ "Create group" : "Créer un groupe", "Group name" : "Nom du groupe", "Please enter a valid group name" : "Merci de saisir un nom de groupe valide", - "{license}-licensed" : "Sous licence {license}", "Failed to create group" : "La création du groupe a échoué", "Sending…" : "Envoi en cours...", "Email sent" : "E-mail envoyé", @@ -784,6 +782,8 @@ "Will be autogenerated" : "Sera généré automatiquement", "Add a new user" : "Ajouter un nouvel utilisateur", "No users in here" : "Aucun utilisateur", + "{license}-licensed" : "Sous licence {license}", + "by {author}\n{license}" : "par {author}\n{license}", "Enter group name" : "Saisissez le nom du groupe", "Add group" : "Ajouter un groupe", "Active users" : "Utilisateurs actifs", diff --git a/apps/settings/l10n/gl.js b/apps/settings/l10n/gl.js index 06641ebc5c5..b360d1b3dd2 100644 --- a/apps/settings/l10n/gl.js +++ b/apps/settings/l10n/gl.js @@ -501,13 +501,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "O seu navegador non é compatíbel co WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador pode facer axustes finos do comportamento ao compartir. Lea a documentación para obter máis información.", "You need to enable the File sharing App." : "Debe activar a aplicación Compartir ficheiros.", - "by {author}\n{license}" : "por {author}\n{license}", "Admins" : "Administración", "New account" : "Conta nova", "Create group" : "Creando o grupo", "Group name" : "Nome do grupo", "Please enter a valid group name" : "Introduza un nome de grupo válido", - "{license}-licensed" : "Licenciado baixo a {license}", "Failed to create group" : "Produciuse un fallo ao crear o grupo", "Sending…" : "Enviando…", "Email sent" : "Correo enviado", @@ -655,6 +653,8 @@ OC.L10N.register( "Will be autogenerated" : "Vai ser xerado automaticamente", "Add a new user" : "Engadir un novo usuario", "No users in here" : "Aquí non hai usuarios", + "{license}-licensed" : "Licenciado baixo a {license}", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Introduza o nome do grupo", "Add group" : "Engadir un grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/gl.json b/apps/settings/l10n/gl.json index b5d337577d9..e3cbd2de08d 100644 --- a/apps/settings/l10n/gl.json +++ b/apps/settings/l10n/gl.json @@ -499,13 +499,11 @@ "Your browser does not support WebAuthn." : "O seu navegador non é compatíbel co WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Como administrador pode facer axustes finos do comportamento ao compartir. Lea a documentación para obter máis información.", "You need to enable the File sharing App." : "Debe activar a aplicación Compartir ficheiros.", - "by {author}\n{license}" : "por {author}\n{license}", "Admins" : "Administración", "New account" : "Conta nova", "Create group" : "Creando o grupo", "Group name" : "Nome do grupo", "Please enter a valid group name" : "Introduza un nome de grupo válido", - "{license}-licensed" : "Licenciado baixo a {license}", "Failed to create group" : "Produciuse un fallo ao crear o grupo", "Sending…" : "Enviando…", "Email sent" : "Correo enviado", @@ -653,6 +651,8 @@ "Will be autogenerated" : "Vai ser xerado automaticamente", "Add a new user" : "Engadir un novo usuario", "No users in here" : "Aquí non hai usuarios", + "{license}-licensed" : "Licenciado baixo a {license}", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Introduza o nome do grupo", "Add group" : "Engadir un grupo", "Active users" : "Usuarios activos", diff --git a/apps/settings/l10n/he.js b/apps/settings/l10n/he.js index ab3116a09b9..58fe1a64f6f 100644 --- a/apps/settings/l10n/he.js +++ b/apps/settings/l10n/he.js @@ -270,11 +270,9 @@ OC.L10N.register( "The following devices are configured for your account:" : "ההתקנים הבאים הוגדרו לחשבון שלך:", "Your browser does not support WebAuthn." : "הדפדפן שלך אינו תומך ב־WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "כמנהל יש לך אפשרות לכוונן את התנהגות השיתוף. נא לעיין בתיעוד לפרטים נוספים.", - "by {author}\n{license}" : "מאת {author}\n{license}", "Admins" : "מנהלים", "New account" : "חשבון חדש", "Group name" : "שם קבוצה", - "{license}-licensed" : "ברישיון {license}", "Sending…" : "בשליחה…", "Email sent" : "הודעת הדואר האלקטרוני נשלחה", "Location" : "מיקום", @@ -376,6 +374,8 @@ OC.L10N.register( "Will be autogenerated" : "ייווצר אוטומטית", "Add a new user" : "הוספת משתמש חדש", "No users in here" : "אין כאן משתמשים", + "{license}-licensed" : "ברישיון {license}", + "by {author}\n{license}" : "מאת {author}\n{license}", "Enter group name" : "נא להקליד שם קבוצה", "Add group" : "הוספת קבוצה", "Active users" : "משתמשים פעילים", diff --git a/apps/settings/l10n/he.json b/apps/settings/l10n/he.json index 30c18b9d1a4..50055fd888e 100644 --- a/apps/settings/l10n/he.json +++ b/apps/settings/l10n/he.json @@ -268,11 +268,9 @@ "The following devices are configured for your account:" : "ההתקנים הבאים הוגדרו לחשבון שלך:", "Your browser does not support WebAuthn." : "הדפדפן שלך אינו תומך ב־WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "כמנהל יש לך אפשרות לכוונן את התנהגות השיתוף. נא לעיין בתיעוד לפרטים נוספים.", - "by {author}\n{license}" : "מאת {author}\n{license}", "Admins" : "מנהלים", "New account" : "חשבון חדש", "Group name" : "שם קבוצה", - "{license}-licensed" : "ברישיון {license}", "Sending…" : "בשליחה…", "Email sent" : "הודעת הדואר האלקטרוני נשלחה", "Location" : "מיקום", @@ -374,6 +372,8 @@ "Will be autogenerated" : "ייווצר אוטומטית", "Add a new user" : "הוספת משתמש חדש", "No users in here" : "אין כאן משתמשים", + "{license}-licensed" : "ברישיון {license}", + "by {author}\n{license}" : "מאת {author}\n{license}", "Enter group name" : "נא להקליד שם קבוצה", "Add group" : "הוספת קבוצה", "Active users" : "משתמשים פעילים", diff --git a/apps/settings/l10n/hr.js b/apps/settings/l10n/hr.js index 1d5f521a61d..11a07ca6cc2 100644 --- a/apps/settings/l10n/hr.js +++ b/apps/settings/l10n/hr.js @@ -312,11 +312,9 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Vaš preglednik ne podržava WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administrator možete detaljnije podešavati dijeljenja. Pogledajte odgovarajuću dokumentaciju za više informacija.", "You need to enable the File sharing App." : "Morate omogućiti aplikaciju za dijeljenje datoteka.", - "by {author}\n{license}" : "{autor}\n{licenca}", "Admins" : "Administratori", "New account" : "Novi račun", "Group name" : "Naziv grupe", - "{license}-licensed" : "Licencirano prema {license}", "Sending…" : "Slanje…", "Email sent" : "E-pošta je poslana", "Location" : "Lokacija", @@ -431,6 +429,8 @@ OC.L10N.register( "Will be autogenerated" : "Automatski će se generirati", "Add a new user" : "Dodaj novog korisnika", "No users in here" : "Ovdje nema korisnika", + "{license}-licensed" : "Licencirano prema {license}", + "by {author}\n{license}" : "{autor}\n{licenca}", "Enter group name" : "Unesite naziv grupe", "Add group" : "Dodaj grupu", "Active users" : "Aktivni korisnici", diff --git a/apps/settings/l10n/hr.json b/apps/settings/l10n/hr.json index be271bb2d3f..8e1a88a09e6 100644 --- a/apps/settings/l10n/hr.json +++ b/apps/settings/l10n/hr.json @@ -310,11 +310,9 @@ "Your browser does not support WebAuthn." : "Vaš preglednik ne podržava WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Administrator možete detaljnije podešavati dijeljenja. Pogledajte odgovarajuću dokumentaciju za više informacija.", "You need to enable the File sharing App." : "Morate omogućiti aplikaciju za dijeljenje datoteka.", - "by {author}\n{license}" : "{autor}\n{licenca}", "Admins" : "Administratori", "New account" : "Novi račun", "Group name" : "Naziv grupe", - "{license}-licensed" : "Licencirano prema {license}", "Sending…" : "Slanje…", "Email sent" : "E-pošta je poslana", "Location" : "Lokacija", @@ -429,6 +427,8 @@ "Will be autogenerated" : "Automatski će se generirati", "Add a new user" : "Dodaj novog korisnika", "No users in here" : "Ovdje nema korisnika", + "{license}-licensed" : "Licencirano prema {license}", + "by {author}\n{license}" : "{autor}\n{licenca}", "Enter group name" : "Unesite naziv grupe", "Add group" : "Dodaj grupu", "Active users" : "Aktivni korisnici", diff --git a/apps/settings/l10n/hu.js b/apps/settings/l10n/hu.js index f6810d83fb8..e78859b9cc6 100644 --- a/apps/settings/l10n/hu.js +++ b/apps/settings/l10n/hu.js @@ -448,13 +448,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "A böngészője nem támogatja a WebAuthn szabványt.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Rendszergazdaként finomhangolhatja a megosztás viselkedését. A részletekért lásd a dokumentációt.", "You need to enable the File sharing App." : "Engedélyeznie kell a Fájlmegosztás alkalmazást.", - "by {author}\n{license}" : "szerző: {author}\n{license}", "Admins" : "Rendszergazdák", "New account" : "Új fiók", "Create group" : "Csoport létrehozása", "Group name" : "Csoport neve", "Please enter a valid group name" : "Adjon meg egy érvényes csoportnevet", - "{license}-licensed" : "{license}-licencelt", "Failed to create group" : "A csoport létrehozása sikertelen", "Sending…" : "Küldés…", "Email sent" : "E-mail elküldve", @@ -601,6 +599,8 @@ OC.L10N.register( "Will be autogenerated" : "Automatikusan lesz elkészítve", "Add a new user" : "Új felhasználó felvétele", "No users in here" : "Nincsenek felhasználók", + "{license}-licensed" : "{license}-licencelt", + "by {author}\n{license}" : "szerző: {author}\n{license}", "Enter group name" : "Adja meg a csoport nevét", "Add group" : "Csoport hozzáadása", "Active users" : "Aktív felhasználók", diff --git a/apps/settings/l10n/hu.json b/apps/settings/l10n/hu.json index bd3b575e40a..80a48d21a3a 100644 --- a/apps/settings/l10n/hu.json +++ b/apps/settings/l10n/hu.json @@ -446,13 +446,11 @@ "Your browser does not support WebAuthn." : "A böngészője nem támogatja a WebAuthn szabványt.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Rendszergazdaként finomhangolhatja a megosztás viselkedését. A részletekért lásd a dokumentációt.", "You need to enable the File sharing App." : "Engedélyeznie kell a Fájlmegosztás alkalmazást.", - "by {author}\n{license}" : "szerző: {author}\n{license}", "Admins" : "Rendszergazdák", "New account" : "Új fiók", "Create group" : "Csoport létrehozása", "Group name" : "Csoport neve", "Please enter a valid group name" : "Adjon meg egy érvényes csoportnevet", - "{license}-licensed" : "{license}-licencelt", "Failed to create group" : "A csoport létrehozása sikertelen", "Sending…" : "Küldés…", "Email sent" : "E-mail elküldve", @@ -599,6 +597,8 @@ "Will be autogenerated" : "Automatikusan lesz elkészítve", "Add a new user" : "Új felhasználó felvétele", "No users in here" : "Nincsenek felhasználók", + "{license}-licensed" : "{license}-licencelt", + "by {author}\n{license}" : "szerző: {author}\n{license}", "Enter group name" : "Adja meg a csoport nevét", "Add group" : "Csoport hozzáadása", "Active users" : "Aktív felhasználók", diff --git a/apps/settings/l10n/id.js b/apps/settings/l10n/id.js index 6550cc67581..abd2c69b8d7 100644 --- a/apps/settings/l10n/id.js +++ b/apps/settings/l10n/id.js @@ -266,7 +266,6 @@ OC.L10N.register( "No devices configured." : "Tidak ada perangkat yang dikonfigurasi.", "Admins" : "Admin", "Group name" : "Nama grup", - "{license}-licensed" : "{license}-dilisensikan", "Sending…" : "Mengirim…", "Email sent" : "Surel terkirim", "Location" : "Lokasi", @@ -358,6 +357,7 @@ OC.L10N.register( "Enable user" : "Aktifkan pengguna", "Add a new user" : "Tambah pengguna baru", "No users in here" : "Tidak ada pengguna di sini", + "{license}-licensed" : "{license}-dilisensikan", "Add group" : "Tambah grup", "Active users" : "Pengguna aktif", "Disabled users" : "Nonaktifkan pengguna", diff --git a/apps/settings/l10n/id.json b/apps/settings/l10n/id.json index 82675fce661..4e5c208fde3 100644 --- a/apps/settings/l10n/id.json +++ b/apps/settings/l10n/id.json @@ -264,7 +264,6 @@ "No devices configured." : "Tidak ada perangkat yang dikonfigurasi.", "Admins" : "Admin", "Group name" : "Nama grup", - "{license}-licensed" : "{license}-dilisensikan", "Sending…" : "Mengirim…", "Email sent" : "Surel terkirim", "Location" : "Lokasi", @@ -356,6 +355,7 @@ "Enable user" : "Aktifkan pengguna", "Add a new user" : "Tambah pengguna baru", "No users in here" : "Tidak ada pengguna di sini", + "{license}-licensed" : "{license}-dilisensikan", "Add group" : "Tambah grup", "Active users" : "Pengguna aktif", "Disabled users" : "Nonaktifkan pengguna", diff --git a/apps/settings/l10n/is.js b/apps/settings/l10n/is.js index 52438258922..2ae41beea18 100644 --- a/apps/settings/l10n/is.js +++ b/apps/settings/l10n/is.js @@ -465,12 +465,10 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Vafrinn þinn styður ekki WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Sem stjórnandi geturðu fínstillt hegðun við deilingu. Endilega kíktu á hjálparskjölin til að sjá ítarlegri upplýsingar.", "You need to enable the File sharing App." : "Þú verður að virkja skráardeilingarforritið.", - "by {author}\n{license}" : "frá {author}\n{license}", "Admins" : "Kerfisstjórar", "Create group" : "Búa til hóp", "Group name" : "Heiti hóps", "Please enter a valid group name" : "Settu inn gilt nafn á hópi", - "{license}-licensed" : "{license}-notkunarleyfi", "Failed to create group" : "Mistókst að búa til hóp", "Sending…" : "Sendi...", "Email sent" : "Tölvupóstur sendur", @@ -608,6 +606,8 @@ OC.L10N.register( "Will be autogenerated" : "Verður útbúið sjálfvirkt", "Add a new user" : "Bæta við nýjum notanda", "No users in here" : "Engir notendur hér", + "{license}-licensed" : "{license}-notkunarleyfi", + "by {author}\n{license}" : "frá {author}\n{license}", "Enter group name" : "Settu hér inn heiti á hópi", "Add group" : "Bæta við hópi", "Active users" : "Virkir notendur", diff --git a/apps/settings/l10n/is.json b/apps/settings/l10n/is.json index 66b06ce2615..7113a52c8db 100644 --- a/apps/settings/l10n/is.json +++ b/apps/settings/l10n/is.json @@ -463,12 +463,10 @@ "Your browser does not support WebAuthn." : "Vafrinn þinn styður ekki WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Sem stjórnandi geturðu fínstillt hegðun við deilingu. Endilega kíktu á hjálparskjölin til að sjá ítarlegri upplýsingar.", "You need to enable the File sharing App." : "Þú verður að virkja skráardeilingarforritið.", - "by {author}\n{license}" : "frá {author}\n{license}", "Admins" : "Kerfisstjórar", "Create group" : "Búa til hóp", "Group name" : "Heiti hóps", "Please enter a valid group name" : "Settu inn gilt nafn á hópi", - "{license}-licensed" : "{license}-notkunarleyfi", "Failed to create group" : "Mistókst að búa til hóp", "Sending…" : "Sendi...", "Email sent" : "Tölvupóstur sendur", @@ -606,6 +604,8 @@ "Will be autogenerated" : "Verður útbúið sjálfvirkt", "Add a new user" : "Bæta við nýjum notanda", "No users in here" : "Engir notendur hér", + "{license}-licensed" : "{license}-notkunarleyfi", + "by {author}\n{license}" : "frá {author}\n{license}", "Enter group name" : "Settu hér inn heiti á hópi", "Add group" : "Bæta við hópi", "Active users" : "Virkir notendur", diff --git a/apps/settings/l10n/it.js b/apps/settings/l10n/it.js index ce13a2dcf96..75f32497392 100644 --- a/apps/settings/l10n/it.js +++ b/apps/settings/l10n/it.js @@ -519,13 +519,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Il tuo browser non supporta WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "In qualità di amministratore puoi configurare in modo granulare il comportamento della condivisione. Vedi la documentazione per ulteriori informazioni.", "You need to enable the File sharing App." : "Devi attivare l'applicazione Condivisione file.", - "by {author}\n{license}" : "di {author}\n{license}", "Admins" : "Amministratori", "New account" : "Nuovo account", "Create group" : "Crea gruppo", "Group name" : "Nome del gruppo", "Please enter a valid group name" : "Inserisci un nome di gruppo valido", - "{license}-licensed" : "sotto licenza {license}", "Failed to create group" : "Creazione gruppo fallita", "Sending…" : "Invio in corso...", "Email sent" : "Email inviata", @@ -674,6 +672,8 @@ OC.L10N.register( "Will be autogenerated" : "Sarà generata automaticamente", "Add a new user" : "Aggiungi un nuovo utente", "No users in here" : "Non ci sono utenti qui", + "{license}-licensed" : "sotto licenza {license}", + "by {author}\n{license}" : "di {author}\n{license}", "Enter group name" : "Digita il nome del gruppo", "Add group" : "Aggiungi gruppo", "Active users" : "Utenti attivi", diff --git a/apps/settings/l10n/it.json b/apps/settings/l10n/it.json index c1ec8d7259a..9244847dc75 100644 --- a/apps/settings/l10n/it.json +++ b/apps/settings/l10n/it.json @@ -517,13 +517,11 @@ "Your browser does not support WebAuthn." : "Il tuo browser non supporta WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "In qualità di amministratore puoi configurare in modo granulare il comportamento della condivisione. Vedi la documentazione per ulteriori informazioni.", "You need to enable the File sharing App." : "Devi attivare l'applicazione Condivisione file.", - "by {author}\n{license}" : "di {author}\n{license}", "Admins" : "Amministratori", "New account" : "Nuovo account", "Create group" : "Crea gruppo", "Group name" : "Nome del gruppo", "Please enter a valid group name" : "Inserisci un nome di gruppo valido", - "{license}-licensed" : "sotto licenza {license}", "Failed to create group" : "Creazione gruppo fallita", "Sending…" : "Invio in corso...", "Email sent" : "Email inviata", @@ -672,6 +670,8 @@ "Will be autogenerated" : "Sarà generata automaticamente", "Add a new user" : "Aggiungi un nuovo utente", "No users in here" : "Non ci sono utenti qui", + "{license}-licensed" : "sotto licenza {license}", + "by {author}\n{license}" : "di {author}\n{license}", "Enter group name" : "Digita il nome del gruppo", "Add group" : "Aggiungi gruppo", "Active users" : "Utenti attivi", diff --git a/apps/settings/l10n/ja.js b/apps/settings/l10n/ja.js index 60e19f538d2..140c4d3a148 100644 --- a/apps/settings/l10n/ja.js +++ b/apps/settings/l10n/ja.js @@ -610,7 +610,6 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "お使いのブラウザーは WebAuthn をサポートしていません。", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "管理者であれば共有時の挙動を微調整できます。詳細な情報はドキュメントを参照してください。", "You need to enable the File sharing App." : "ファイル共有アプリを有効にする必要があります。", - "by {author}\n{license}" : "作者 {author}\n{license}", "Active accounts" : "アクティブなアカウント", "Admins" : "管理者", "Disabled accounts" : "無効なアカウント", @@ -620,7 +619,6 @@ OC.L10N.register( "Create group" : "グループを作成", "Group name" : "グループ名", "Please enter a valid group name" : "有効なグループ名を入力してください", - "{license}-licensed" : "{license}-に許諾されています", "Failed to create group" : "グループの作成に失敗しました", "Sending…" : "送信中 …", "Email sent" : "メールを送信しました", @@ -773,6 +771,8 @@ OC.L10N.register( "Will be autogenerated" : "自動生成されます", "Add a new user" : "新しいユーザーを追加", "No users in here" : "ここにはユーザーがありません", + "{license}-licensed" : "{license}-に許諾されています", + "by {author}\n{license}" : "作者 {author}\n{license}", "Enter group name" : "グループ名を入力", "Add group" : "グループを追加する", "Active users" : "アクティブユーザー", diff --git a/apps/settings/l10n/ja.json b/apps/settings/l10n/ja.json index 36f59e2077e..f3b5ebada79 100644 --- a/apps/settings/l10n/ja.json +++ b/apps/settings/l10n/ja.json @@ -608,7 +608,6 @@ "Your browser does not support WebAuthn." : "お使いのブラウザーは WebAuthn をサポートしていません。", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "管理者であれば共有時の挙動を微調整できます。詳細な情報はドキュメントを参照してください。", "You need to enable the File sharing App." : "ファイル共有アプリを有効にする必要があります。", - "by {author}\n{license}" : "作者 {author}\n{license}", "Active accounts" : "アクティブなアカウント", "Admins" : "管理者", "Disabled accounts" : "無効なアカウント", @@ -618,7 +617,6 @@ "Create group" : "グループを作成", "Group name" : "グループ名", "Please enter a valid group name" : "有効なグループ名を入力してください", - "{license}-licensed" : "{license}-に許諾されています", "Failed to create group" : "グループの作成に失敗しました", "Sending…" : "送信中 …", "Email sent" : "メールを送信しました", @@ -771,6 +769,8 @@ "Will be autogenerated" : "自動生成されます", "Add a new user" : "新しいユーザーを追加", "No users in here" : "ここにはユーザーがありません", + "{license}-licensed" : "{license}-に許諾されています", + "by {author}\n{license}" : "作者 {author}\n{license}", "Enter group name" : "グループ名を入力", "Add group" : "グループを追加する", "Active users" : "アクティブユーザー", diff --git a/apps/settings/l10n/ka.js b/apps/settings/l10n/ka.js index 51ee0c3d386..ef774ebb930 100644 --- a/apps/settings/l10n/ka.js +++ b/apps/settings/l10n/ka.js @@ -512,12 +512,10 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Your browser does not support WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "As admin you can fine-tune the sharing behavior. Please see the documentation for more information.", "You need to enable the File sharing App." : "You need to enable the File sharing App.", - "by {author}\n{license}" : "by {author}\n{license}", "Admins" : "Admins", "Create group" : "Create group", "Group name" : "Group name", "Please enter a valid group name" : "Please enter a valid group name", - "{license}-licensed" : "{license}-licensed", "Failed to create group" : "Failed to create group", "Sending…" : "Sending…", "Email sent" : "Email sent", @@ -666,6 +664,8 @@ OC.L10N.register( "Will be autogenerated" : "Will be autogenerated", "Add a new user" : "Add a new user", "No users in here" : "No users in here", + "{license}-licensed" : "{license}-licensed", + "by {author}\n{license}" : "by {author}\n{license}", "Enter group name" : "Enter group name", "Add group" : "Add group", "Active users" : "Active users", diff --git a/apps/settings/l10n/ka.json b/apps/settings/l10n/ka.json index 990da76ec70..d69dd8e5f45 100644 --- a/apps/settings/l10n/ka.json +++ b/apps/settings/l10n/ka.json @@ -510,12 +510,10 @@ "Your browser does not support WebAuthn." : "Your browser does not support WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "As admin you can fine-tune the sharing behavior. Please see the documentation for more information.", "You need to enable the File sharing App." : "You need to enable the File sharing App.", - "by {author}\n{license}" : "by {author}\n{license}", "Admins" : "Admins", "Create group" : "Create group", "Group name" : "Group name", "Please enter a valid group name" : "Please enter a valid group name", - "{license}-licensed" : "{license}-licensed", "Failed to create group" : "Failed to create group", "Sending…" : "Sending…", "Email sent" : "Email sent", @@ -664,6 +662,8 @@ "Will be autogenerated" : "Will be autogenerated", "Add a new user" : "Add a new user", "No users in here" : "No users in here", + "{license}-licensed" : "{license}-licensed", + "by {author}\n{license}" : "by {author}\n{license}", "Enter group name" : "Enter group name", "Add group" : "Add group", "Active users" : "Active users", diff --git a/apps/settings/l10n/ko.js b/apps/settings/l10n/ko.js index ffc993eb54e..51a4d30e40f 100644 --- a/apps/settings/l10n/ko.js +++ b/apps/settings/l10n/ko.js @@ -587,7 +587,6 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "WebAuthn이 현재 브라우저를 지원하지 않습니다.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "관리자로 공유 행동을 미세 조정할 수 있습니다. 더 많은 정보를 보려면 문서를 참조하십시오.", "You need to enable the File sharing App." : "파일 공유 앱을 활성화해야 합니다.", - "by {author}\n{license}" : "{author} 님이 작성\n{license}", "Active accounts" : "활성화된 계정", "Admins" : "관리자", "Disabled accounts" : "비활성화된 계정", @@ -597,7 +596,6 @@ OC.L10N.register( "Create group" : "그룹 생성", "Group name" : "그룹 이름", "Please enter a valid group name" : "올바른 그룹 이름을 입력하세요", - "{license}-licensed" : "{license} 라이선스", "Failed to create group" : "그룹을 만들 수 없음", "Sending…" : "보내는 중…", "Email sent" : "이메일 보냄", @@ -747,6 +745,8 @@ OC.L10N.register( "Will be autogenerated" : "자동으로 생성될 것임", "Add a new user" : "새 사용자 추가", "No users in here" : "사용자가 이곳에 없습니다.", + "{license}-licensed" : "{license} 라이선스", + "by {author}\n{license}" : "{author} 님이 작성\n{license}", "Enter group name" : "그룹 이름 입력", "Add group" : "그룹 추가", "Active users" : "활성 사용자", diff --git a/apps/settings/l10n/ko.json b/apps/settings/l10n/ko.json index 077d9cb911f..5d649bbef0c 100644 --- a/apps/settings/l10n/ko.json +++ b/apps/settings/l10n/ko.json @@ -585,7 +585,6 @@ "Your browser does not support WebAuthn." : "WebAuthn이 현재 브라우저를 지원하지 않습니다.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "관리자로 공유 행동을 미세 조정할 수 있습니다. 더 많은 정보를 보려면 문서를 참조하십시오.", "You need to enable the File sharing App." : "파일 공유 앱을 활성화해야 합니다.", - "by {author}\n{license}" : "{author} 님이 작성\n{license}", "Active accounts" : "활성화된 계정", "Admins" : "관리자", "Disabled accounts" : "비활성화된 계정", @@ -595,7 +594,6 @@ "Create group" : "그룹 생성", "Group name" : "그룹 이름", "Please enter a valid group name" : "올바른 그룹 이름을 입력하세요", - "{license}-licensed" : "{license} 라이선스", "Failed to create group" : "그룹을 만들 수 없음", "Sending…" : "보내는 중…", "Email sent" : "이메일 보냄", @@ -745,6 +743,8 @@ "Will be autogenerated" : "자동으로 생성될 것임", "Add a new user" : "새 사용자 추가", "No users in here" : "사용자가 이곳에 없습니다.", + "{license}-licensed" : "{license} 라이선스", + "by {author}\n{license}" : "{author} 님이 작성\n{license}", "Enter group name" : "그룹 이름 입력", "Add group" : "그룹 추가", "Active users" : "활성 사용자", diff --git a/apps/settings/l10n/lt_LT.js b/apps/settings/l10n/lt_LT.js index 0dfdfd20d02..ec20b9dcc5b 100644 --- a/apps/settings/l10n/lt_LT.js +++ b/apps/settings/l10n/lt_LT.js @@ -328,11 +328,9 @@ OC.L10N.register( "The following devices are configured for your account:" : "Jūsų paskyrai sukonfiguruoti šie įrenginiai:", "Your browser does not support WebAuthn." : "Jūsų naršyklė nepalaiko WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Būdami administratoriumi, galite reguliuoti bendrinimo elgseną. Išsamesnei informacijai, žiūrėkite dokumentaciją.", - "by {author}\n{license}" : "pagal {author}\n{license}", "Admins" : "Administratoriai", "New account" : "Nauja paskyra", "Group name" : "Grupės pavadinimas", - "{license}-licensed" : "Licencijuota pagal {license}", "Sending…" : "Siunčiama…", "Email sent" : "El. paštas išsiųstas", "Location" : "Vieta", @@ -452,6 +450,8 @@ OC.L10N.register( "Will be autogenerated" : "Bus automatiškai sugeneruotas ", "Add a new user" : "Pridėti naują naudotoją", "No users in here" : "Čia naudotojų nėra", + "{license}-licensed" : "Licencijuota pagal {license}", + "by {author}\n{license}" : "pagal {author}\n{license}", "Enter group name" : "Įveskite grupės pavadinimą", "Add group" : "Pridėti grupę", "Active users" : "Aktyvūs naudotojai", diff --git a/apps/settings/l10n/lt_LT.json b/apps/settings/l10n/lt_LT.json index 1e92ed2f5f3..76901ee87f8 100644 --- a/apps/settings/l10n/lt_LT.json +++ b/apps/settings/l10n/lt_LT.json @@ -326,11 +326,9 @@ "The following devices are configured for your account:" : "Jūsų paskyrai sukonfiguruoti šie įrenginiai:", "Your browser does not support WebAuthn." : "Jūsų naršyklė nepalaiko WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Būdami administratoriumi, galite reguliuoti bendrinimo elgseną. Išsamesnei informacijai, žiūrėkite dokumentaciją.", - "by {author}\n{license}" : "pagal {author}\n{license}", "Admins" : "Administratoriai", "New account" : "Nauja paskyra", "Group name" : "Grupės pavadinimas", - "{license}-licensed" : "Licencijuota pagal {license}", "Sending…" : "Siunčiama…", "Email sent" : "El. paštas išsiųstas", "Location" : "Vieta", @@ -450,6 +448,8 @@ "Will be autogenerated" : "Bus automatiškai sugeneruotas ", "Add a new user" : "Pridėti naują naudotoją", "No users in here" : "Čia naudotojų nėra", + "{license}-licensed" : "Licencijuota pagal {license}", + "by {author}\n{license}" : "pagal {author}\n{license}", "Enter group name" : "Įveskite grupės pavadinimą", "Add group" : "Pridėti grupę", "Active users" : "Aktyvūs naudotojai", diff --git a/apps/settings/l10n/mk.js b/apps/settings/l10n/mk.js index d2d881510ae..52029a3a806 100644 --- a/apps/settings/l10n/mk.js +++ b/apps/settings/l10n/mk.js @@ -402,10 +402,8 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Вашиот прелистувач не поддржува WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Како администратор, можете детално да го прилагодите однесувањето на споделувањето. Погледнете ја документацијата за повеќе информации.", "You need to enable the File sharing App." : "Треба да ја овозможите апликацијата Споделување на датотеки.", - "by {author}\n{license}" : "од {author}\n{license}", "Admins" : "Администратори", "Group name" : "Име на група", - "{license}-licensed" : "{license}-лиценца", "Sending…" : "Испраќа…", "Email sent" : "Е-порака пратена", "Location" : "Локација", @@ -537,6 +535,8 @@ OC.L10N.register( "Will be autogenerated" : "Ќе бидат автоматски генерирани", "Add a new user" : "Додади нов корисник", "No users in here" : "Тука нема корисници", + "{license}-licensed" : "{license}-лиценца", + "by {author}\n{license}" : "од {author}\n{license}", "Enter group name" : "Внеси име на групата", "Add group" : "Додади група", "Active users" : "Активни корисници", diff --git a/apps/settings/l10n/mk.json b/apps/settings/l10n/mk.json index ff35376f847..d249e4f7678 100644 --- a/apps/settings/l10n/mk.json +++ b/apps/settings/l10n/mk.json @@ -400,10 +400,8 @@ "Your browser does not support WebAuthn." : "Вашиот прелистувач не поддржува WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Како администратор, можете детално да го прилагодите однесувањето на споделувањето. Погледнете ја документацијата за повеќе информации.", "You need to enable the File sharing App." : "Треба да ја овозможите апликацијата Споделување на датотеки.", - "by {author}\n{license}" : "од {author}\n{license}", "Admins" : "Администратори", "Group name" : "Име на група", - "{license}-licensed" : "{license}-лиценца", "Sending…" : "Испраќа…", "Email sent" : "Е-порака пратена", "Location" : "Локација", @@ -535,6 +533,8 @@ "Will be autogenerated" : "Ќе бидат автоматски генерирани", "Add a new user" : "Додади нов корисник", "No users in here" : "Тука нема корисници", + "{license}-licensed" : "{license}-лиценца", + "by {author}\n{license}" : "од {author}\n{license}", "Enter group name" : "Внеси име на групата", "Add group" : "Додади група", "Active users" : "Активни корисници", diff --git a/apps/settings/l10n/nb.js b/apps/settings/l10n/nb.js index e9e165d23f1..d5f4c746e6d 100644 --- a/apps/settings/l10n/nb.js +++ b/apps/settings/l10n/nb.js @@ -672,7 +672,6 @@ OC.L10N.register( "Loading categories" : "Laster kategorier", "Developer documentation ↗" : "Utviklerdokumentasjon ↗", "Version {version}, {license}-licensed" : "Versjon {version}, {license}-lisensiert", - "by {author}\n{license}" : "av {author}\n{license}", "Active accounts" : "Aktive kontoer", "Admins" : "Administratorer", "Disabled accounts" : "Deaktiverte kontoer", @@ -683,7 +682,6 @@ OC.L10N.register( "Create group" : "Opprett gruppe", "Group name" : "Gruppenavn", "Please enter a valid group name" : "Vennligst angi et gyldig gruppenavn", - "{license}-licensed" : "{license}-lisensiert", "Failed to create group" : "Kunne ikke opprette gruppe", "Sending…" : "Sender…", "Email sent" : "E-post sendt", @@ -837,6 +835,8 @@ OC.L10N.register( "Will be autogenerated" : "Blir generert automatisk", "Add a new user" : "Legg til en ny bruker", "No users in here" : "Ingen brukere her", + "{license}-licensed" : "{license}-lisensiert", + "by {author}\n{license}" : "av {author}\n{license}", "Enter group name" : "Skriv inn gruppenavn", "Add group" : "Legg til gruppe", "Active users" : "Aktive brukere", diff --git a/apps/settings/l10n/nb.json b/apps/settings/l10n/nb.json index 4600f393e9e..79953f4efb2 100644 --- a/apps/settings/l10n/nb.json +++ b/apps/settings/l10n/nb.json @@ -670,7 +670,6 @@ "Loading categories" : "Laster kategorier", "Developer documentation ↗" : "Utviklerdokumentasjon ↗", "Version {version}, {license}-licensed" : "Versjon {version}, {license}-lisensiert", - "by {author}\n{license}" : "av {author}\n{license}", "Active accounts" : "Aktive kontoer", "Admins" : "Administratorer", "Disabled accounts" : "Deaktiverte kontoer", @@ -681,7 +680,6 @@ "Create group" : "Opprett gruppe", "Group name" : "Gruppenavn", "Please enter a valid group name" : "Vennligst angi et gyldig gruppenavn", - "{license}-licensed" : "{license}-lisensiert", "Failed to create group" : "Kunne ikke opprette gruppe", "Sending…" : "Sender…", "Email sent" : "E-post sendt", @@ -835,6 +833,8 @@ "Will be autogenerated" : "Blir generert automatisk", "Add a new user" : "Legg til en ny bruker", "No users in here" : "Ingen brukere her", + "{license}-licensed" : "{license}-lisensiert", + "by {author}\n{license}" : "av {author}\n{license}", "Enter group name" : "Skriv inn gruppenavn", "Add group" : "Legg til gruppe", "Active users" : "Aktive brukere", diff --git a/apps/settings/l10n/nl.js b/apps/settings/l10n/nl.js index 70cc28612c0..d864732cbb5 100644 --- a/apps/settings/l10n/nl.js +++ b/apps/settings/l10n/nl.js @@ -335,11 +335,9 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Je browser ondersteunt WebAuthn niet.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als beheerder kun je gedetailleerde regels voor delen instellen. Bekijk de documentatie voor meer informatie.", "You need to enable the File sharing App." : "Je dient de File sharing App in te schakelen", - "by {author}\n{license}" : "door {author}\n{license}", "Admins" : "Beheerders", "New account" : "Nieuw account", "Group name" : "Groepsnaam", - "{license}-licensed" : "{license}-gelicenseerd", "Sending…" : "Versturen...", "Email sent" : "E-mail verzonden", "Location" : "Locatie", @@ -467,6 +465,8 @@ OC.L10N.register( "Will be autogenerated" : "Wordt automatisch gegenereerd", "Add a new user" : "Nieuwe gebruiker toevoegen", "No users in here" : "Hier zijn geen gebruikers", + "{license}-licensed" : "{license}-gelicenseerd", + "by {author}\n{license}" : "door {author}\n{license}", "Enter group name" : "Geef een groepsnaam op", "Add group" : "Groep toevoegen", "Active users" : "Actieve gebruikers", diff --git a/apps/settings/l10n/nl.json b/apps/settings/l10n/nl.json index 00054529e82..308ad280c29 100644 --- a/apps/settings/l10n/nl.json +++ b/apps/settings/l10n/nl.json @@ -333,11 +333,9 @@ "Your browser does not support WebAuthn." : "Je browser ondersteunt WebAuthn niet.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Als beheerder kun je gedetailleerde regels voor delen instellen. Bekijk de documentatie voor meer informatie.", "You need to enable the File sharing App." : "Je dient de File sharing App in te schakelen", - "by {author}\n{license}" : "door {author}\n{license}", "Admins" : "Beheerders", "New account" : "Nieuw account", "Group name" : "Groepsnaam", - "{license}-licensed" : "{license}-gelicenseerd", "Sending…" : "Versturen...", "Email sent" : "E-mail verzonden", "Location" : "Locatie", @@ -465,6 +463,8 @@ "Will be autogenerated" : "Wordt automatisch gegenereerd", "Add a new user" : "Nieuwe gebruiker toevoegen", "No users in here" : "Hier zijn geen gebruikers", + "{license}-licensed" : "{license}-gelicenseerd", + "by {author}\n{license}" : "door {author}\n{license}", "Enter group name" : "Geef een groepsnaam op", "Add group" : "Groep toevoegen", "Active users" : "Actieve gebruikers", diff --git a/apps/settings/l10n/oc.js b/apps/settings/l10n/oc.js index be695ab62f3..1c95f6ba170 100644 --- a/apps/settings/l10n/oc.js +++ b/apps/settings/l10n/oc.js @@ -184,7 +184,6 @@ OC.L10N.register( "Passwordless Authentication" : "Autentificacion sens senhal", "No devices configured." : "Cap de periferic pas configurat.", "Your browser does not support WebAuthn." : "Vòstre navigador es pas compatible amb WebAuthn.", - "by {author}\n{license}" : "per {author}\n{license}", "Admins" : "Admins", "Group name" : "Nom del grop", "Sending…" : "Mandadís…", @@ -253,6 +252,7 @@ OC.L10N.register( "Edit User" : "Modificar l’utilizaire", "Add a new user" : "Apondre un utilizaire novè", "No users in here" : "Cap d’utilizaire aquí", + "by {author}\n{license}" : "per {author}\n{license}", "Enter group name" : "Picatz un nom de grop", "Add group" : "Apondre grop", "Active users" : "Utilizaires actius", diff --git a/apps/settings/l10n/oc.json b/apps/settings/l10n/oc.json index 6152bdb98ec..b07965b2dac 100644 --- a/apps/settings/l10n/oc.json +++ b/apps/settings/l10n/oc.json @@ -182,7 +182,6 @@ "Passwordless Authentication" : "Autentificacion sens senhal", "No devices configured." : "Cap de periferic pas configurat.", "Your browser does not support WebAuthn." : "Vòstre navigador es pas compatible amb WebAuthn.", - "by {author}\n{license}" : "per {author}\n{license}", "Admins" : "Admins", "Group name" : "Nom del grop", "Sending…" : "Mandadís…", @@ -251,6 +250,7 @@ "Edit User" : "Modificar l’utilizaire", "Add a new user" : "Apondre un utilizaire novè", "No users in here" : "Cap d’utilizaire aquí", + "by {author}\n{license}" : "per {author}\n{license}", "Enter group name" : "Picatz un nom de grop", "Add group" : "Apondre grop", "Active users" : "Utilizaires actius", diff --git a/apps/settings/l10n/pl.js b/apps/settings/l10n/pl.js index 48f363b10f5..2aa4fadfb51 100644 --- a/apps/settings/l10n/pl.js +++ b/apps/settings/l10n/pl.js @@ -491,13 +491,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Twoja przeglądarka nie obsługuje WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Jako administrator możesz zoptymalizować ustawienia udostępniania. Szczegółowe informacje znajdziesz w dokumentacji.", "You need to enable the File sharing App." : "Musisz włączyć aplikację do udostępniania plików.", - "by {author}\n{license}" : "wykonane przez {author}\n{license}", "Admins" : "Administratorzy", "New account" : "Nowe konto", "Create group" : "Utwórz grupę", "Group name" : "Nazwa grupy", "Please enter a valid group name" : "Podaj właściwą nazwę grupy", - "{license}-licensed" : "na licencji {license}", "Failed to create group" : "Nie udało się utworzyć grupy", "Sending…" : "Wysyłam…", "Email sent" : "E-mail został wysłany", @@ -645,6 +643,8 @@ OC.L10N.register( "Will be autogenerated" : "Zostanie automatycznie wygenerowany", "Add a new user" : "Dodaj użytkownika", "No users in here" : "Brak użytkowników", + "{license}-licensed" : "na licencji {license}", + "by {author}\n{license}" : "wykonane przez {author}\n{license}", "Enter group name" : "Wpisz nazwę grupy", "Add group" : "Dodaj grupę", "Active users" : "Aktywni użytkownicy", diff --git a/apps/settings/l10n/pl.json b/apps/settings/l10n/pl.json index 865276d14ce..585da390ec0 100644 --- a/apps/settings/l10n/pl.json +++ b/apps/settings/l10n/pl.json @@ -489,13 +489,11 @@ "Your browser does not support WebAuthn." : "Twoja przeglądarka nie obsługuje WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Jako administrator możesz zoptymalizować ustawienia udostępniania. Szczegółowe informacje znajdziesz w dokumentacji.", "You need to enable the File sharing App." : "Musisz włączyć aplikację do udostępniania plików.", - "by {author}\n{license}" : "wykonane przez {author}\n{license}", "Admins" : "Administratorzy", "New account" : "Nowe konto", "Create group" : "Utwórz grupę", "Group name" : "Nazwa grupy", "Please enter a valid group name" : "Podaj właściwą nazwę grupy", - "{license}-licensed" : "na licencji {license}", "Failed to create group" : "Nie udało się utworzyć grupy", "Sending…" : "Wysyłam…", "Email sent" : "E-mail został wysłany", @@ -643,6 +641,8 @@ "Will be autogenerated" : "Zostanie automatycznie wygenerowany", "Add a new user" : "Dodaj użytkownika", "No users in here" : "Brak użytkowników", + "{license}-licensed" : "na licencji {license}", + "by {author}\n{license}" : "wykonane przez {author}\n{license}", "Enter group name" : "Wpisz nazwę grupy", "Add group" : "Dodaj grupę", "Active users" : "Aktywni użytkownicy", diff --git a/apps/settings/l10n/pt_BR.js b/apps/settings/l10n/pt_BR.js index f1014a9c3ea..2ffb7b47f91 100644 --- a/apps/settings/l10n/pt_BR.js +++ b/apps/settings/l10n/pt_BR.js @@ -665,7 +665,6 @@ OC.L10N.register( "Loading categories" : "Carregando categorias", "Developer documentation ↗" : "Documentação do desenvolvedor ↗", "Version {version}, {license}-licensed" : "Versão {version}, licenciada por {license}", - "by {author}\n{license}" : "por {author}\n{license}", "Active accounts" : "Contas ativas", "Admins" : "Administradores", "Disabled accounts" : "Contas desativadas", @@ -676,7 +675,6 @@ OC.L10N.register( "Create group" : "Criar grupo", "Group name" : "Nome do grupo", "Please enter a valid group name" : "Insira um nome de grupo válido", - "{license}-licensed" : "{license}-licenciado", "Failed to create group" : "Falha ao criar grupo", "Sending…" : "Enviando...", "Email sent" : "E-mail enviado", @@ -830,6 +828,8 @@ OC.L10N.register( "Will be autogenerated" : "Será autogerado", "Add a new user" : "Adicionar o novo usuário", "No users in here" : "Nenhum usuário aqui", + "{license}-licensed" : "{license}-licenciado", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Insira o nome do grupo", "Add group" : "Adicionar grupo", "Active users" : "Usuários ativos ", diff --git a/apps/settings/l10n/pt_BR.json b/apps/settings/l10n/pt_BR.json index 6808785bf6c..24333bd3347 100644 --- a/apps/settings/l10n/pt_BR.json +++ b/apps/settings/l10n/pt_BR.json @@ -663,7 +663,6 @@ "Loading categories" : "Carregando categorias", "Developer documentation ↗" : "Documentação do desenvolvedor ↗", "Version {version}, {license}-licensed" : "Versão {version}, licenciada por {license}", - "by {author}\n{license}" : "por {author}\n{license}", "Active accounts" : "Contas ativas", "Admins" : "Administradores", "Disabled accounts" : "Contas desativadas", @@ -674,7 +673,6 @@ "Create group" : "Criar grupo", "Group name" : "Nome do grupo", "Please enter a valid group name" : "Insira um nome de grupo válido", - "{license}-licensed" : "{license}-licenciado", "Failed to create group" : "Falha ao criar grupo", "Sending…" : "Enviando...", "Email sent" : "E-mail enviado", @@ -828,6 +826,8 @@ "Will be autogenerated" : "Será autogerado", "Add a new user" : "Adicionar o novo usuário", "No users in here" : "Nenhum usuário aqui", + "{license}-licensed" : "{license}-licenciado", + "by {author}\n{license}" : "por {author}\n{license}", "Enter group name" : "Insira o nome do grupo", "Add group" : "Adicionar grupo", "Active users" : "Usuários ativos ", diff --git a/apps/settings/l10n/ru.js b/apps/settings/l10n/ru.js index adc2256889e..9c6df376fe9 100644 --- a/apps/settings/l10n/ru.js +++ b/apps/settings/l10n/ru.js @@ -457,13 +457,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Ваш браузер не поддерживает WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "В этом разделе администраторы могут тонко настроить поведение механизма предоставления общего доступа. Обратитесь к документации для получения дополнительной информации.", "You need to enable the File sharing App." : "Необходимо включить приложение публикации файлов.", - "by {author}\n{license}" : "автор: {author}\n{license}", "Admins" : "Администраторы", "New account" : "Новая учётная запись", "Create group" : "Создать группу", "Group name" : "Название группы", "Please enter a valid group name" : "Пожалуйста, введите допустимое название группы", - "{license}-licensed" : "Лицензия: {license}", "Failed to create group" : "Не удалось создать группу", "Sending…" : "Отправка…", "Email sent" : "Письмо отправлено", @@ -606,6 +604,8 @@ OC.L10N.register( "Will be autogenerated" : "Будет сгенерирован автоматически", "Add a new user" : "Создать пользователя", "No users in here" : "Здесь нет ни одного пользователя", + "{license}-licensed" : "Лицензия: {license}", + "by {author}\n{license}" : "автор: {author}\n{license}", "Enter group name" : "Введите название группы", "Add group" : "Добавить группу", "Active users" : "Активные пользователи", diff --git a/apps/settings/l10n/ru.json b/apps/settings/l10n/ru.json index 53880432654..a8bf630a110 100644 --- a/apps/settings/l10n/ru.json +++ b/apps/settings/l10n/ru.json @@ -455,13 +455,11 @@ "Your browser does not support WebAuthn." : "Ваш браузер не поддерживает WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "В этом разделе администраторы могут тонко настроить поведение механизма предоставления общего доступа. Обратитесь к документации для получения дополнительной информации.", "You need to enable the File sharing App." : "Необходимо включить приложение публикации файлов.", - "by {author}\n{license}" : "автор: {author}\n{license}", "Admins" : "Администраторы", "New account" : "Новая учётная запись", "Create group" : "Создать группу", "Group name" : "Название группы", "Please enter a valid group name" : "Пожалуйста, введите допустимое название группы", - "{license}-licensed" : "Лицензия: {license}", "Failed to create group" : "Не удалось создать группу", "Sending…" : "Отправка…", "Email sent" : "Письмо отправлено", @@ -604,6 +602,8 @@ "Will be autogenerated" : "Будет сгенерирован автоматически", "Add a new user" : "Создать пользователя", "No users in here" : "Здесь нет ни одного пользователя", + "{license}-licensed" : "Лицензия: {license}", + "by {author}\n{license}" : "автор: {author}\n{license}", "Enter group name" : "Введите название группы", "Add group" : "Добавить группу", "Active users" : "Активные пользователи", diff --git a/apps/settings/l10n/sc.js b/apps/settings/l10n/sc.js index d54c0c38312..19b47adb44d 100644 --- a/apps/settings/l10n/sc.js +++ b/apps/settings/l10n/sc.js @@ -288,9 +288,7 @@ OC.L10N.register( "The following devices are configured for your account:" : "Is dispositivos in fatu sunt cunfigurados pro su contu tuo:", "Your browser does not support WebAuthn." : "Su serbidore tuo non suportat WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Comente parte de s'amministratzione podes afinigare su cumportamentu de cumpartzidura. Càstia sa documentatzione pro àteras informatziones.", - "by {author}\n{license}" : "de {author}\n{license}", "Admins" : "Amministratzione", - "{license}-licensed" : "suta lissèntzia {license}", "Sending…" : "Imbiende...", "Email sent" : "Messàgiu de posta imbiadu", "Location" : "Positzione", @@ -396,6 +394,8 @@ OC.L10N.register( "Will be autogenerated" : "At a èssere auto-generadu", "Add a new user" : "Agiunghe un'utèntzia noa", "No users in here" : "Peruna utèntzia inoghe", + "{license}-licensed" : "suta lissèntzia {license}", + "by {author}\n{license}" : "de {author}\n{license}", "Enter group name" : "Inserta nùmene de su grupu", "Add group" : "Agiunghe grupu", "Active users" : "Utèntzias ativas", diff --git a/apps/settings/l10n/sc.json b/apps/settings/l10n/sc.json index 6437e5a3b44..fee50c204e1 100644 --- a/apps/settings/l10n/sc.json +++ b/apps/settings/l10n/sc.json @@ -286,9 +286,7 @@ "The following devices are configured for your account:" : "Is dispositivos in fatu sunt cunfigurados pro su contu tuo:", "Your browser does not support WebAuthn." : "Su serbidore tuo non suportat WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Comente parte de s'amministratzione podes afinigare su cumportamentu de cumpartzidura. Càstia sa documentatzione pro àteras informatziones.", - "by {author}\n{license}" : "de {author}\n{license}", "Admins" : "Amministratzione", - "{license}-licensed" : "suta lissèntzia {license}", "Sending…" : "Imbiende...", "Email sent" : "Messàgiu de posta imbiadu", "Location" : "Positzione", @@ -394,6 +392,8 @@ "Will be autogenerated" : "At a èssere auto-generadu", "Add a new user" : "Agiunghe un'utèntzia noa", "No users in here" : "Peruna utèntzia inoghe", + "{license}-licensed" : "suta lissèntzia {license}", + "by {author}\n{license}" : "de {author}\n{license}", "Enter group name" : "Inserta nùmene de su grupu", "Add group" : "Agiunghe grupu", "Active users" : "Utèntzias ativas", diff --git a/apps/settings/l10n/sk.js b/apps/settings/l10n/sk.js index 8b93b29a4a5..0d7bf3f34cd 100644 --- a/apps/settings/l10n/sk.js +++ b/apps/settings/l10n/sk.js @@ -634,7 +634,6 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Váš prehliadač nepodporuje WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ako administrátor môžete nastaviť správanie sprístupňovania. Pre viac informácií pozrite dokumentáciu.", "You need to enable the File sharing App." : "Musíte povoliť Aplikáciu pre zdieľanie súborov.", - "by {author}\n{license}" : "od {author}\n{license}", "Active accounts" : "Aktívne účty", "Admins" : "Administrátori", "Disabled accounts" : "Zakázané účty", @@ -644,7 +643,6 @@ OC.L10N.register( "Create group" : "Vytvoriť skupinu", "Group name" : "Názov skupiny", "Please enter a valid group name" : "Prosím, zadajte platné meno skupiny", - "{license}-licensed" : "{license}-licencovaný", "Failed to create group" : "Nepodarilo sa vytvoriť skupinu", "Sending…" : "Odosielam...", "Email sent" : "Email odoslaný", @@ -797,6 +795,8 @@ OC.L10N.register( "Will be autogenerated" : "Bude automaticky vytvorené", "Add a new user" : "Pridať nového používateľa", "No users in here" : "Nie sú tu žiadni používatelia", + "{license}-licensed" : "{license}-licencovaný", + "by {author}\n{license}" : "od {author}\n{license}", "Enter group name" : "Zadajte názov skupiny", "Add group" : "Pridať skupinu", "Active users" : "Aktívni používatelia", diff --git a/apps/settings/l10n/sk.json b/apps/settings/l10n/sk.json index eb4081cbfbe..43619fcebae 100644 --- a/apps/settings/l10n/sk.json +++ b/apps/settings/l10n/sk.json @@ -632,7 +632,6 @@ "Your browser does not support WebAuthn." : "Váš prehliadač nepodporuje WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Ako administrátor môžete nastaviť správanie sprístupňovania. Pre viac informácií pozrite dokumentáciu.", "You need to enable the File sharing App." : "Musíte povoliť Aplikáciu pre zdieľanie súborov.", - "by {author}\n{license}" : "od {author}\n{license}", "Active accounts" : "Aktívne účty", "Admins" : "Administrátori", "Disabled accounts" : "Zakázané účty", @@ -642,7 +641,6 @@ "Create group" : "Vytvoriť skupinu", "Group name" : "Názov skupiny", "Please enter a valid group name" : "Prosím, zadajte platné meno skupiny", - "{license}-licensed" : "{license}-licencovaný", "Failed to create group" : "Nepodarilo sa vytvoriť skupinu", "Sending…" : "Odosielam...", "Email sent" : "Email odoslaný", @@ -795,6 +793,8 @@ "Will be autogenerated" : "Bude automaticky vytvorené", "Add a new user" : "Pridať nového používateľa", "No users in here" : "Nie sú tu žiadni používatelia", + "{license}-licensed" : "{license}-licencovaný", + "by {author}\n{license}" : "od {author}\n{license}", "Enter group name" : "Zadajte názov skupiny", "Add group" : "Pridať skupinu", "Active users" : "Aktívni používatelia", diff --git a/apps/settings/l10n/sl.js b/apps/settings/l10n/sl.js index d746f209f92..5641f361d01 100644 --- a/apps/settings/l10n/sl.js +++ b/apps/settings/l10n/sl.js @@ -485,13 +485,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Brskalnik ne podpira overitve WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Skrbnik lahko prilagodi možnosti souporabe. Več podrobnosti je zapisanih v dokumentaciji.", "You need to enable the File sharing App." : "Omogočiti je treba program Souporabe datotek.", - "by {author}\n{license}" : "Razvoj: {author}\nDovoljenje: {license}", "Admins" : "Skrbniki", "New account" : "Nov račun", "Create group" : "Ustvari skupino", "Group name" : "Ime skupine", "Please enter a valid group name" : "Vpisati je treba veljavno ime skupine", - "{license}-licensed" : "dovoljenje {license}", "Failed to create group" : "Ustvarjanje skupine je spodletelo", "Sending…" : "Poteka pošiljanje ...", "Email sent" : "Elektronsko sporočilo je poslano", @@ -638,6 +636,8 @@ OC.L10N.register( "Will be autogenerated" : "Samodejno ustvarjeno", "Add a new user" : "Dodaj uporabnika", "No users in here" : "Ni še vključenih uporabnikov", + "{license}-licensed" : "dovoljenje {license}", + "by {author}\n{license}" : "Razvoj: {author}\nDovoljenje: {license}", "Enter group name" : "Vpis imena skupine", "Add group" : "Dodaj skupino", "Active users" : "Dejavni uporabniki", diff --git a/apps/settings/l10n/sl.json b/apps/settings/l10n/sl.json index eda769df961..8f1a117be19 100644 --- a/apps/settings/l10n/sl.json +++ b/apps/settings/l10n/sl.json @@ -483,13 +483,11 @@ "Your browser does not support WebAuthn." : "Brskalnik ne podpira overitve WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Skrbnik lahko prilagodi možnosti souporabe. Več podrobnosti je zapisanih v dokumentaciji.", "You need to enable the File sharing App." : "Omogočiti je treba program Souporabe datotek.", - "by {author}\n{license}" : "Razvoj: {author}\nDovoljenje: {license}", "Admins" : "Skrbniki", "New account" : "Nov račun", "Create group" : "Ustvari skupino", "Group name" : "Ime skupine", "Please enter a valid group name" : "Vpisati je treba veljavno ime skupine", - "{license}-licensed" : "dovoljenje {license}", "Failed to create group" : "Ustvarjanje skupine je spodletelo", "Sending…" : "Poteka pošiljanje ...", "Email sent" : "Elektronsko sporočilo je poslano", @@ -636,6 +634,8 @@ "Will be autogenerated" : "Samodejno ustvarjeno", "Add a new user" : "Dodaj uporabnika", "No users in here" : "Ni še vključenih uporabnikov", + "{license}-licensed" : "dovoljenje {license}", + "by {author}\n{license}" : "Razvoj: {author}\nDovoljenje: {license}", "Enter group name" : "Vpis imena skupine", "Add group" : "Dodaj skupino", "Active users" : "Dejavni uporabniki", diff --git a/apps/settings/l10n/sr.js b/apps/settings/l10n/sr.js index 60dbf7cc6e4..0682f722081 100644 --- a/apps/settings/l10n/sr.js +++ b/apps/settings/l10n/sr.js @@ -325,7 +325,13 @@ OC.L10N.register( "Enforce password protection" : "Захтевај заштиту лозинком", "Exclude groups from password requirements" : "Изузми групе из захтева за лозинком", "Exclude groups from creating link shares" : "Изузми групе из креирања дељења путем линка", + "Limit sharing based on groups" : "Ограничи дељење по групама", + "Allow sharing for everyone (default)" : "Дозволи дељење свима (подразумевано)", + "Exclude some groups from sharing" : "Изузми неке групе из дељења", + "Limit sharing to some groups" : "Ограничи дељење на одређене групе", + "Groups allowed to share" : "Групе које смеју да деле", "Groups excluded from sharing" : "Групе изузете од дељења", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "Забрањеним групама ће моћи да се дели, али оне не могу да иницирају дељење.", "Set default expiration date for shares" : "Постави подразумевано време истека дељења", "Enforce expiration date" : "Захтевај датум истека", "Default expiration time of new shares in days" : "Подразумевано време трајања нових дељења у данима", @@ -616,6 +622,7 @@ OC.L10N.register( "Set line manager" : "Избор надређеног менаџера", "{size} used" : "{size} искоришћено", "Delete account" : "Обриши рачун", + "Disconnect all devices and delete local data" : "Раскини везу са свим уређајима и обриши локалне податке", "Disable account" : "Искључи налог", "Enable account" : "Укључи налог", "Resend welcome email" : "Поново пошаљи е-пошту добродошлице", @@ -665,7 +672,6 @@ OC.L10N.register( "Loading categories" : "Учитавају се категорије", "Developer documentation ↗" : "Програмерска документација ↗", "Version {version}, {license}-licensed" : "Верзија {version}, {license}-лиценцирано", - "by {author}\n{license}" : "од {author}\n{license}", "Active accounts" : "Активни налози", "Admins" : "Администратори", "Disabled accounts" : "Искључени налози", @@ -676,7 +682,6 @@ OC.L10N.register( "Create group" : "Креирај групу", "Group name" : "Назив групе", "Please enter a valid group name" : "Молимо вас да унесете исправно име групе", - "{license}-licensed" : "{license}-лиценцирано", "Failed to create group" : "Није успело креирање групе", "Sending…" : "Шаљем…", "Email sent" : "Порука је послата", @@ -830,6 +835,8 @@ OC.L10N.register( "Will be autogenerated" : "Биће генерисано аутоматски", "Add a new user" : "Додај новог корисника", "No users in here" : "Овде нема корисника", + "{license}-licensed" : "{license}-лиценцирано", + "by {author}\n{license}" : "од {author}\n{license}", "Enter group name" : "Унесите назив групе", "Add group" : "Додај групу", "Active users" : "Активних корисника", diff --git a/apps/settings/l10n/sr.json b/apps/settings/l10n/sr.json index 8ce8487f765..acbd69f74bd 100644 --- a/apps/settings/l10n/sr.json +++ b/apps/settings/l10n/sr.json @@ -323,7 +323,13 @@ "Enforce password protection" : "Захтевај заштиту лозинком", "Exclude groups from password requirements" : "Изузми групе из захтева за лозинком", "Exclude groups from creating link shares" : "Изузми групе из креирања дељења путем линка", + "Limit sharing based on groups" : "Ограничи дељење по групама", + "Allow sharing for everyone (default)" : "Дозволи дељење свима (подразумевано)", + "Exclude some groups from sharing" : "Изузми неке групе из дељења", + "Limit sharing to some groups" : "Ограничи дељење на одређене групе", + "Groups allowed to share" : "Групе које смеју да деле", "Groups excluded from sharing" : "Групе изузете од дељења", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "Забрањеним групама ће моћи да се дели, али оне не могу да иницирају дељење.", "Set default expiration date for shares" : "Постави подразумевано време истека дељења", "Enforce expiration date" : "Захтевај датум истека", "Default expiration time of new shares in days" : "Подразумевано време трајања нових дељења у данима", @@ -614,6 +620,7 @@ "Set line manager" : "Избор надређеног менаџера", "{size} used" : "{size} искоришћено", "Delete account" : "Обриши рачун", + "Disconnect all devices and delete local data" : "Раскини везу са свим уређајима и обриши локалне податке", "Disable account" : "Искључи налог", "Enable account" : "Укључи налог", "Resend welcome email" : "Поново пошаљи е-пошту добродошлице", @@ -663,7 +670,6 @@ "Loading categories" : "Учитавају се категорије", "Developer documentation ↗" : "Програмерска документација ↗", "Version {version}, {license}-licensed" : "Верзија {version}, {license}-лиценцирано", - "by {author}\n{license}" : "од {author}\n{license}", "Active accounts" : "Активни налози", "Admins" : "Администратори", "Disabled accounts" : "Искључени налози", @@ -674,7 +680,6 @@ "Create group" : "Креирај групу", "Group name" : "Назив групе", "Please enter a valid group name" : "Молимо вас да унесете исправно име групе", - "{license}-licensed" : "{license}-лиценцирано", "Failed to create group" : "Није успело креирање групе", "Sending…" : "Шаљем…", "Email sent" : "Порука је послата", @@ -828,6 +833,8 @@ "Will be autogenerated" : "Биће генерисано аутоматски", "Add a new user" : "Додај новог корисника", "No users in here" : "Овде нема корисника", + "{license}-licensed" : "{license}-лиценцирано", + "by {author}\n{license}" : "од {author}\n{license}", "Enter group name" : "Унесите назив групе", "Add group" : "Додај групу", "Active users" : "Активних корисника", diff --git a/apps/settings/l10n/sv.js b/apps/settings/l10n/sv.js index 83d5f39fe84..6f19b54a3b3 100644 --- a/apps/settings/l10n/sv.js +++ b/apps/settings/l10n/sv.js @@ -282,7 +282,11 @@ OC.L10N.register( "Download and enable all" : "Ladda ner och aktivera alla", "_%n app has an update available_::_%n apps have an update available_" : ["%n app har en uppdatering tillgänglig","%n appar har en uppdatering tillgänglig"], "_Update_::_Update all_" : ["Uppdatera","Uppdatera alla"], + "Nothing to show" : "Inget att visa", + "Could not load section content from app store." : "Det gick inte att ladda avsnittsinnehåll från app store.", "Loading" : "Läser in", + "Fetching the latest news…" : "Hämtar de senaste nyheterna...", + "Carousel" : "Karusell", "Description" : "Beskrivning", "Details" : "Detaljer", "All" : "Alla", @@ -358,6 +362,7 @@ OC.L10N.register( "Enable or disable profile by default for new accounts." : "Aktivera eller inaktivera profil som standard för nya konton.", "Enable" : "Aktivera", "Unable to update profile default setting" : "Det gick inte att uppdatera profilens standardinställning", + "Failed to save setting" : "Kunde inte spara inställning", "Server-side encryption" : "Serverkryptering", "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Kryptering från servern möjliggör kryptering av filer som är uppladdade till servern. Detta innebär vissa begränsningar som prestandaförluster, så aktivera bara om det behövs.", "Enable server-side encryption" : "Aktivera kryptering på server.", @@ -544,7 +549,6 @@ OC.L10N.register( "Loading app list" : "Laddar applista", "Loading categories" : "Laddar kategorier", "Developer documentation ↗" : "Utvecklardokumentation ↗", - "by {author}\n{license}" : "av {author}\n{license}", "Active accounts" : "Aktiva konton", "Admins" : "Administratörer", "Disabled accounts" : "Inaktiverade konton", @@ -555,7 +559,6 @@ OC.L10N.register( "Create group" : "Skapa grupp", "Group name" : "Gruppnamn", "Please enter a valid group name" : "Ange ett giltigt gruppnamn", - "{license}-licensed" : "{license}-licensierad", "Failed to create group" : "Det gick inte att skapa gruppen", "Sending…" : "Skickar...", "Email sent" : "E-post skickad", @@ -575,6 +578,7 @@ OC.L10N.register( "Locale" : "Plats", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Inte tillgänglig då denna inställning krävs för essentiell funktionalitet såsom fildelning och kalenderinbjudningar", "Not available as federation has been disabled for your account, contact your system administration if you have any questions" : "Ej tillgängligt eftersom federation har inaktiverats för ditt konto, kontakta din systemadministratör om du har några frågor", + "Discover" : "Upptäck", "Your apps" : "Dina appar", "Active apps" : "Aktiva appar", "Disabled apps" : "Inaktiverade appar", @@ -618,6 +622,7 @@ OC.L10N.register( "Authentication" : "Autentisering", "Authentication required" : "Autentisering krävs", "Credentials" : "Inloggningsuppgifter", + "SMTP Login" : "SMTP-inloggning", "SMTP Password" : "SMTP-lösenord", "Save" : "Spara", "Test and verify email settings" : "Testa och verifiera e-postinställningar", @@ -706,6 +711,8 @@ OC.L10N.register( "Will be autogenerated" : "Kommer att autogenereras", "Add a new user" : "Lägg till ny användare", "No users in here" : "Inga användare här", + "{license}-licensed" : "{license}-licensierad", + "by {author}\n{license}" : "av {author}\n{license}", "Enter group name" : "Ange gruppnamn", "Add group" : "Lägg till grupp", "Active users" : "Aktiva användare", diff --git a/apps/settings/l10n/sv.json b/apps/settings/l10n/sv.json index 114a62ef7f0..867074d779c 100644 --- a/apps/settings/l10n/sv.json +++ b/apps/settings/l10n/sv.json @@ -280,7 +280,11 @@ "Download and enable all" : "Ladda ner och aktivera alla", "_%n app has an update available_::_%n apps have an update available_" : ["%n app har en uppdatering tillgänglig","%n appar har en uppdatering tillgänglig"], "_Update_::_Update all_" : ["Uppdatera","Uppdatera alla"], + "Nothing to show" : "Inget att visa", + "Could not load section content from app store." : "Det gick inte att ladda avsnittsinnehåll från app store.", "Loading" : "Läser in", + "Fetching the latest news…" : "Hämtar de senaste nyheterna...", + "Carousel" : "Karusell", "Description" : "Beskrivning", "Details" : "Detaljer", "All" : "Alla", @@ -356,6 +360,7 @@ "Enable or disable profile by default for new accounts." : "Aktivera eller inaktivera profil som standard för nya konton.", "Enable" : "Aktivera", "Unable to update profile default setting" : "Det gick inte att uppdatera profilens standardinställning", + "Failed to save setting" : "Kunde inte spara inställning", "Server-side encryption" : "Serverkryptering", "Server-side encryption makes it possible to encrypt files which are uploaded to this server. This comes with limitations like a performance penalty, so enable this only if needed." : "Kryptering från servern möjliggör kryptering av filer som är uppladdade till servern. Detta innebär vissa begränsningar som prestandaförluster, så aktivera bara om det behövs.", "Enable server-side encryption" : "Aktivera kryptering på server.", @@ -542,7 +547,6 @@ "Loading app list" : "Laddar applista", "Loading categories" : "Laddar kategorier", "Developer documentation ↗" : "Utvecklardokumentation ↗", - "by {author}\n{license}" : "av {author}\n{license}", "Active accounts" : "Aktiva konton", "Admins" : "Administratörer", "Disabled accounts" : "Inaktiverade konton", @@ -553,7 +557,6 @@ "Create group" : "Skapa grupp", "Group name" : "Gruppnamn", "Please enter a valid group name" : "Ange ett giltigt gruppnamn", - "{license}-licensed" : "{license}-licensierad", "Failed to create group" : "Det gick inte att skapa gruppen", "Sending…" : "Skickar...", "Email sent" : "E-post skickad", @@ -573,6 +576,7 @@ "Locale" : "Plats", "Not available as this property is required for core functionality including file sharing and calendar invitations" : "Inte tillgänglig då denna inställning krävs för essentiell funktionalitet såsom fildelning och kalenderinbjudningar", "Not available as federation has been disabled for your account, contact your system administration if you have any questions" : "Ej tillgängligt eftersom federation har inaktiverats för ditt konto, kontakta din systemadministratör om du har några frågor", + "Discover" : "Upptäck", "Your apps" : "Dina appar", "Active apps" : "Aktiva appar", "Disabled apps" : "Inaktiverade appar", @@ -616,6 +620,7 @@ "Authentication" : "Autentisering", "Authentication required" : "Autentisering krävs", "Credentials" : "Inloggningsuppgifter", + "SMTP Login" : "SMTP-inloggning", "SMTP Password" : "SMTP-lösenord", "Save" : "Spara", "Test and verify email settings" : "Testa och verifiera e-postinställningar", @@ -704,6 +709,8 @@ "Will be autogenerated" : "Kommer att autogenereras", "Add a new user" : "Lägg till ny användare", "No users in here" : "Inga användare här", + "{license}-licensed" : "{license}-licensierad", + "by {author}\n{license}" : "av {author}\n{license}", "Enter group name" : "Ange gruppnamn", "Add group" : "Lägg till grupp", "Active users" : "Aktiva användare", diff --git a/apps/settings/l10n/th.js b/apps/settings/l10n/th.js index 2f7b0e209b4..d6d6a354120 100644 --- a/apps/settings/l10n/th.js +++ b/apps/settings/l10n/th.js @@ -218,10 +218,8 @@ OC.L10N.register( "No devices configured." : "ไม่มีอุปกรณ์ที่กำหนดค่า", "The following devices are configured for your account:" : "อุปกรณ์เหล่านี้มีการกำหนดค่าสำหรับบัญชีของคุณแล้ว:", "Your browser does not support WebAuthn." : "เบราว์เซอร์ของคุณไม่รองรับ WebAuthn", - "by {author}\n{license}" : "โดย {author}\n{license}", "Admins" : "ผู้ดูแลระบบ", "Group name" : "ชื่อกลุ่ม", - "{license}-licensed" : "สัญญาอนุญาต {license}", "Sending…" : "กำลังส่ง....", "Email sent" : "ส่งอีเมลแล้ว", "Location" : "ตำแหน่ง", @@ -312,6 +310,8 @@ OC.L10N.register( "Will be autogenerated" : "จะถูกสร้างขึ้นโดยอัตโนมัติ", "Add a new user" : "เพิ่มผู้ใช้ใหม่", "No users in here" : "ไม่มีผู้ใช้ที่นี่", + "{license}-licensed" : "สัญญาอนุญาต {license}", + "by {author}\n{license}" : "โดย {author}\n{license}", "Enter group name" : "ใส่ชื่อกลุ่ม", "Add group" : "เพิ่มกลุ่ม", "Active users" : "ผู้ใช้ที่ใช้งานอยู่", diff --git a/apps/settings/l10n/th.json b/apps/settings/l10n/th.json index a2ee2a765b8..c4e3a5a0267 100644 --- a/apps/settings/l10n/th.json +++ b/apps/settings/l10n/th.json @@ -216,10 +216,8 @@ "No devices configured." : "ไม่มีอุปกรณ์ที่กำหนดค่า", "The following devices are configured for your account:" : "อุปกรณ์เหล่านี้มีการกำหนดค่าสำหรับบัญชีของคุณแล้ว:", "Your browser does not support WebAuthn." : "เบราว์เซอร์ของคุณไม่รองรับ WebAuthn", - "by {author}\n{license}" : "โดย {author}\n{license}", "Admins" : "ผู้ดูแลระบบ", "Group name" : "ชื่อกลุ่ม", - "{license}-licensed" : "สัญญาอนุญาต {license}", "Sending…" : "กำลังส่ง....", "Email sent" : "ส่งอีเมลแล้ว", "Location" : "ตำแหน่ง", @@ -310,6 +308,8 @@ "Will be autogenerated" : "จะถูกสร้างขึ้นโดยอัตโนมัติ", "Add a new user" : "เพิ่มผู้ใช้ใหม่", "No users in here" : "ไม่มีผู้ใช้ที่นี่", + "{license}-licensed" : "สัญญาอนุญาต {license}", + "by {author}\n{license}" : "โดย {author}\n{license}", "Enter group name" : "ใส่ชื่อกลุ่ม", "Add group" : "เพิ่มกลุ่ม", "Active users" : "ผู้ใช้ที่ใช้งานอยู่", diff --git a/apps/settings/l10n/tr.js b/apps/settings/l10n/tr.js index 188f643c78f..ea81c642a68 100644 --- a/apps/settings/l10n/tr.js +++ b/apps/settings/l10n/tr.js @@ -617,7 +617,6 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Tarayıcınız WebAuthn desteklemiyor.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Yönetici olarak paylaşma davranışı ile ilgili ince ayarları yapabilirsiniz. Ayrıntılı bilgi almak için belgelere bakabilirsiniz.", "You need to enable the File sharing App." : "Dosya paylaşımı uygulamasını etkinleştirmelisiniz.", - "by {author}\n{license}" : "{author} tarafından\n{license}", "Active accounts" : "Etkin hesaplar", "Admins" : "Yöneticiler", "Disabled accounts" : "Devre dışı hesaplar", @@ -627,7 +626,6 @@ OC.L10N.register( "Create group" : "Grup ekle", "Group name" : "Grup adı", "Please enter a valid group name" : "Lütfen geçerli bir grup adı yazın", - "{license}-licensed" : "{license}-lisanslı", "Failed to create group" : "Grup eklenemedi", "Sending…" : "Gönderiliyor …", "Email sent" : "E-posta gönderildi", @@ -780,6 +778,8 @@ OC.L10N.register( "Will be autogenerated" : "Otomatik olarak oluşturulacak", "Add a new user" : "Kullanıcı ekle", "No users in here" : "Henüz herhangi bir kullanıcı eklenmemiş", + "{license}-licensed" : "{license}-lisanslı", + "by {author}\n{license}" : "{author} tarafından\n{license}", "Enter group name" : "Grup adını yazın", "Add group" : "Grup ekle", "Active users" : "Etkin kullanıcılar", diff --git a/apps/settings/l10n/tr.json b/apps/settings/l10n/tr.json index e21818aa16c..95e95b2ae72 100644 --- a/apps/settings/l10n/tr.json +++ b/apps/settings/l10n/tr.json @@ -615,7 +615,6 @@ "Your browser does not support WebAuthn." : "Tarayıcınız WebAuthn desteklemiyor.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Yönetici olarak paylaşma davranışı ile ilgili ince ayarları yapabilirsiniz. Ayrıntılı bilgi almak için belgelere bakabilirsiniz.", "You need to enable the File sharing App." : "Dosya paylaşımı uygulamasını etkinleştirmelisiniz.", - "by {author}\n{license}" : "{author} tarafından\n{license}", "Active accounts" : "Etkin hesaplar", "Admins" : "Yöneticiler", "Disabled accounts" : "Devre dışı hesaplar", @@ -625,7 +624,6 @@ "Create group" : "Grup ekle", "Group name" : "Grup adı", "Please enter a valid group name" : "Lütfen geçerli bir grup adı yazın", - "{license}-licensed" : "{license}-lisanslı", "Failed to create group" : "Grup eklenemedi", "Sending…" : "Gönderiliyor …", "Email sent" : "E-posta gönderildi", @@ -778,6 +776,8 @@ "Will be autogenerated" : "Otomatik olarak oluşturulacak", "Add a new user" : "Kullanıcı ekle", "No users in here" : "Henüz herhangi bir kullanıcı eklenmemiş", + "{license}-licensed" : "{license}-lisanslı", + "by {author}\n{license}" : "{author} tarafından\n{license}", "Enter group name" : "Grup adını yazın", "Add group" : "Grup ekle", "Active users" : "Etkin kullanıcılar", diff --git a/apps/settings/l10n/uk.js b/apps/settings/l10n/uk.js index a2de717130e..cf4a444e7dd 100644 --- a/apps/settings/l10n/uk.js +++ b/apps/settings/l10n/uk.js @@ -285,7 +285,13 @@ OC.L10N.register( "Enforce password protection" : "Захист паролем обов'язковий", "Exclude groups from password requirements" : "Виключення щодо вимог пароля для груп", "Exclude groups from creating link shares" : "Виключення щодо створення посилань спільного доступу для груп", + "Limit sharing based on groups" : "Обмежити надання у спільний доступ на основі груп", + "Allow sharing for everyone (default)" : "Дозволити надання у спільний доступ для всіх (типово)", + "Exclude some groups from sharing" : "Виключити окремі групи зі спільного доступу", + "Limit sharing to some groups" : "Обмежити надання у спільний для окремих груп", + "Groups allowed to share" : "Групи, які можуть надавати у спільний доступ", "Groups excluded from sharing" : "Групи, виключені зі спільного доступу", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "Групи, в яких відсутні дозволи, все ще зможуть отримувати дані, що у спільному доступі, але самі не зможуть надавати у спільний доступ.", "Set default expiration date for shares" : "Установіть типовий термін дії для спільних ресурсів", "Enforce expiration date" : "Термін дії обов'язковий", "Default expiration time of new shares in days" : "Типовий термін дії спільних ресурсів у днях", @@ -325,6 +331,7 @@ OC.L10N.register( "Featured" : "Функціональні", "This app is supported via your current Nextcloud subscription." : "Підтримка застосунку через вашу поточну передплату Nextcloud.", "Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Функціональні застосунки розробляються спільнотою. Вони пропонують основну функціональність та готові до використання в продуктивному середовищі.", + "Community rating: {score}/5" : "Рейтинг спільноти: {score}/5", "All apps are up-to-date." : "Усі застосунки оновлено", "Icon" : "Значок", "Name" : "Назва", @@ -338,6 +345,7 @@ OC.L10N.register( "_%n app has an update available_::_%n apps have an update available_" : ["Для %n застосунку доступне оновлення","Для %n застосунків доступні оновлення","Для %n застосунків доступні оновлення","Для %n застосунків доступні оновлення"], "_Update_::_Update all_" : ["Оновити","Оновити все","Оновити все","Оновити все"], "Nothing to show" : "Відсутня інформація для показу", + "Could not load section content from app store." : "Не вдалося отримати розділ вмісту із крамнички.", "Loading" : "Завантаження", "Description" : "Опис", "Details" : "Деталі", @@ -593,7 +601,6 @@ OC.L10N.register( "You need to enable the File sharing App." : "Потрібно увімкнути застосунок для обміну файлами.", "Loading app list" : "Завантаження переліку застосунків", "Loading categories" : "Завантаження категорій", - "by {author}\n{license}" : "Автор: {author}\n{license}", "Active accounts" : "Активні облікові записи", "Admins" : "Адміністратори", "Disabled accounts" : "Вимкнені облікові записи", @@ -604,7 +611,6 @@ OC.L10N.register( "Create group" : "Створити групу", "Group name" : "Назва групи", "Please enter a valid group name" : "Введіть дійсну назву групи", - "{license}-licensed" : "Ліцензія: {license}", "Failed to create group" : "Не вдалося створити групу", "Sending…" : "Надсилання...", "Email sent" : "Лист надіслано", @@ -755,6 +761,8 @@ OC.L10N.register( "Will be autogenerated" : "Буде створено автоматично", "Add a new user" : "Додати нового користувача", "No users in here" : "Немає користувачів", + "{license}-licensed" : "Ліцензія: {license}", + "by {author}\n{license}" : "Автор: {author}\n{license}", "Enter group name" : "Зазначте назву групи", "Add group" : "Додати групу", "Active users" : "Активні користувачі", diff --git a/apps/settings/l10n/uk.json b/apps/settings/l10n/uk.json index a69ae786a37..80394644018 100644 --- a/apps/settings/l10n/uk.json +++ b/apps/settings/l10n/uk.json @@ -283,7 +283,13 @@ "Enforce password protection" : "Захист паролем обов'язковий", "Exclude groups from password requirements" : "Виключення щодо вимог пароля для груп", "Exclude groups from creating link shares" : "Виключення щодо створення посилань спільного доступу для груп", + "Limit sharing based on groups" : "Обмежити надання у спільний доступ на основі груп", + "Allow sharing for everyone (default)" : "Дозволити надання у спільний доступ для всіх (типово)", + "Exclude some groups from sharing" : "Виключити окремі групи зі спільного доступу", + "Limit sharing to some groups" : "Обмежити надання у спільний для окремих груп", + "Groups allowed to share" : "Групи, які можуть надавати у спільний доступ", "Groups excluded from sharing" : "Групи, виключені зі спільного доступу", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "Групи, в яких відсутні дозволи, все ще зможуть отримувати дані, що у спільному доступі, але самі не зможуть надавати у спільний доступ.", "Set default expiration date for shares" : "Установіть типовий термін дії для спільних ресурсів", "Enforce expiration date" : "Термін дії обов'язковий", "Default expiration time of new shares in days" : "Типовий термін дії спільних ресурсів у днях", @@ -323,6 +329,7 @@ "Featured" : "Функціональні", "This app is supported via your current Nextcloud subscription." : "Підтримка застосунку через вашу поточну передплату Nextcloud.", "Featured apps are developed by and within the community. They offer central functionality and are ready for production use." : "Функціональні застосунки розробляються спільнотою. Вони пропонують основну функціональність та готові до використання в продуктивному середовищі.", + "Community rating: {score}/5" : "Рейтинг спільноти: {score}/5", "All apps are up-to-date." : "Усі застосунки оновлено", "Icon" : "Значок", "Name" : "Назва", @@ -336,6 +343,7 @@ "_%n app has an update available_::_%n apps have an update available_" : ["Для %n застосунку доступне оновлення","Для %n застосунків доступні оновлення","Для %n застосунків доступні оновлення","Для %n застосунків доступні оновлення"], "_Update_::_Update all_" : ["Оновити","Оновити все","Оновити все","Оновити все"], "Nothing to show" : "Відсутня інформація для показу", + "Could not load section content from app store." : "Не вдалося отримати розділ вмісту із крамнички.", "Loading" : "Завантаження", "Description" : "Опис", "Details" : "Деталі", @@ -591,7 +599,6 @@ "You need to enable the File sharing App." : "Потрібно увімкнути застосунок для обміну файлами.", "Loading app list" : "Завантаження переліку застосунків", "Loading categories" : "Завантаження категорій", - "by {author}\n{license}" : "Автор: {author}\n{license}", "Active accounts" : "Активні облікові записи", "Admins" : "Адміністратори", "Disabled accounts" : "Вимкнені облікові записи", @@ -602,7 +609,6 @@ "Create group" : "Створити групу", "Group name" : "Назва групи", "Please enter a valid group name" : "Введіть дійсну назву групи", - "{license}-licensed" : "Ліцензія: {license}", "Failed to create group" : "Не вдалося створити групу", "Sending…" : "Надсилання...", "Email sent" : "Лист надіслано", @@ -753,6 +759,8 @@ "Will be autogenerated" : "Буде створено автоматично", "Add a new user" : "Додати нового користувача", "No users in here" : "Немає користувачів", + "{license}-licensed" : "Ліцензія: {license}", + "by {author}\n{license}" : "Автор: {author}\n{license}", "Enter group name" : "Зазначте назву групи", "Add group" : "Додати групу", "Active users" : "Активні користувачі", diff --git a/apps/settings/l10n/vi.js b/apps/settings/l10n/vi.js index a4ad706ca7e..6e052e9a9e3 100644 --- a/apps/settings/l10n/vi.js +++ b/apps/settings/l10n/vi.js @@ -424,12 +424,10 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "Trình duyệt của bạn không hỗ trợ WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Với tư cách là quản trị viên, bạn có thể tinh chỉnh hành vi chia sẻ. Vui lòng xem tài liệu để biết thêm thông tin.", "You need to enable the File sharing App." : "Bạn cần kích hoạt Ứng dụng chia sẻ tệp.", - "by {author}\n{license}" : "bởi {tác giả}{giấy phép}", "Admins" : "Quản trị viên", "Create group" : "Tạo nhóm", "Group name" : "Tên nhóm", "Please enter a valid group name" : "Vui lòng nhập tên nhóm hợp lệ", - "{license}-licensed" : "{license}-được cấp phép", "Failed to create group" : "Không tạo được nhóm", "Sending…" : "Đang gửi...", "Email sent" : "Email đã được gửi", @@ -558,6 +556,8 @@ OC.L10N.register( "Will be autogenerated" : "Sẽ được tạo tự động", "Add a new user" : "Thêm người dùng mới", "No users in here" : "Không có người dùng nào tại đây", + "{license}-licensed" : "{license}-được cấp phép", + "by {author}\n{license}" : "bởi {tác giả}{giấy phép}", "Enter group name" : "Nhập tên nhóm", "Add group" : "Thêm nhóm", "Active users" : "Người dùng hoạt động", diff --git a/apps/settings/l10n/vi.json b/apps/settings/l10n/vi.json index 5b4e7f363a8..428033af53a 100644 --- a/apps/settings/l10n/vi.json +++ b/apps/settings/l10n/vi.json @@ -422,12 +422,10 @@ "Your browser does not support WebAuthn." : "Trình duyệt của bạn không hỗ trợ WebAuthn.", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Với tư cách là quản trị viên, bạn có thể tinh chỉnh hành vi chia sẻ. Vui lòng xem tài liệu để biết thêm thông tin.", "You need to enable the File sharing App." : "Bạn cần kích hoạt Ứng dụng chia sẻ tệp.", - "by {author}\n{license}" : "bởi {tác giả}{giấy phép}", "Admins" : "Quản trị viên", "Create group" : "Tạo nhóm", "Group name" : "Tên nhóm", "Please enter a valid group name" : "Vui lòng nhập tên nhóm hợp lệ", - "{license}-licensed" : "{license}-được cấp phép", "Failed to create group" : "Không tạo được nhóm", "Sending…" : "Đang gửi...", "Email sent" : "Email đã được gửi", @@ -556,6 +554,8 @@ "Will be autogenerated" : "Sẽ được tạo tự động", "Add a new user" : "Thêm người dùng mới", "No users in here" : "Không có người dùng nào tại đây", + "{license}-licensed" : "{license}-được cấp phép", + "by {author}\n{license}" : "bởi {tác giả}{giấy phép}", "Enter group name" : "Nhập tên nhóm", "Add group" : "Thêm nhóm", "Active users" : "Người dùng hoạt động", diff --git a/apps/settings/l10n/zh_CN.js b/apps/settings/l10n/zh_CN.js index 66bf04ee15b..df37a356d25 100644 --- a/apps/settings/l10n/zh_CN.js +++ b/apps/settings/l10n/zh_CN.js @@ -493,13 +493,11 @@ OC.L10N.register( "Your browser does not support WebAuthn." : "您的浏览器不支持 WebAuthn。", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "作为管理员,您可以调整共享行为。 有关详细信息,请参阅文档。", "You need to enable the File sharing App." : "您需要启用文件共享应用", - "by {author}\n{license}" : "按照 {author}\n{license}", "Admins" : "管理员", "New account" : "新建帐号", "Create group" : "创建群组", "Group name" : "分组名称", "Please enter a valid group name" : "请处输入一个有效的群组名称", - "{license}-licensed" : "{license}-许可协议", "Failed to create group" : "创建群组失败", "Sending…" : "正在发送 ...", "Email sent" : "邮件已发送", @@ -647,6 +645,8 @@ OC.L10N.register( "Will be autogenerated" : "将自动生成", "Add a new user" : "添加新用户", "No users in here" : "这里没有用户", + "{license}-licensed" : "{license}-许可协议", + "by {author}\n{license}" : "按照 {author}\n{license}", "Enter group name" : "输入群组名称", "Add group" : "添加分组", "Active users" : "活跃用户", diff --git a/apps/settings/l10n/zh_CN.json b/apps/settings/l10n/zh_CN.json index efdfef292fa..0c7aa103a57 100644 --- a/apps/settings/l10n/zh_CN.json +++ b/apps/settings/l10n/zh_CN.json @@ -491,13 +491,11 @@ "Your browser does not support WebAuthn." : "您的浏览器不支持 WebAuthn。", "As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "作为管理员,您可以调整共享行为。 有关详细信息,请参阅文档。", "You need to enable the File sharing App." : "您需要启用文件共享应用", - "by {author}\n{license}" : "按照 {author}\n{license}", "Admins" : "管理员", "New account" : "新建帐号", "Create group" : "创建群组", "Group name" : "分组名称", "Please enter a valid group name" : "请处输入一个有效的群组名称", - "{license}-licensed" : "{license}-许可协议", "Failed to create group" : "创建群组失败", "Sending…" : "正在发送 ...", "Email sent" : "邮件已发送", @@ -645,6 +643,8 @@ "Will be autogenerated" : "将自动生成", "Add a new user" : "添加新用户", "No users in here" : "这里没有用户", + "{license}-licensed" : "{license}-许可协议", + "by {author}\n{license}" : "按照 {author}\n{license}", "Enter group name" : "输入群组名称", "Add group" : "添加分组", "Active users" : "活跃用户", diff --git a/apps/settings/l10n/zh_HK.js b/apps/settings/l10n/zh_HK.js index 5ec78426f18..ef7c2a7a514 100644 --- a/apps/settings/l10n/zh_HK.js +++ b/apps/settings/l10n/zh_HK.js @@ -622,7 +622,7 @@ OC.L10N.register( "Set line manager" : "設定行管理員", "{size} used" : "已使用 {size}", "Delete account" : "刪除賬戶", - "Disconnect all devices and delete local data" : "中斷所有裝置並刪除近端數據", + "Disconnect all devices and delete local data" : "中斷所有裝置連結並刪除近端數據", "Disable account" : "停用賬戶", "Enable account" : "啟用賬戶", "Resend welcome email" : "重新傳送歡迎電子郵件", @@ -672,7 +672,6 @@ OC.L10N.register( "Loading categories" : "正在加載分類", "Developer documentation ↗" : "開發人員使用手冊 ↗", "Version {version}, {license}-licensed" : "版本 {version},授權條款:{license}", - "by {author}\n{license}" : "作者為 {author}\n{license}", "Active accounts" : "活躍賬戶", "Admins" : "管理員", "Disabled accounts" : "已停用賬戶", @@ -683,7 +682,6 @@ OC.L10N.register( "Create group" : "創建群組", "Group name" : "群組名稱", "Please enter a valid group name" : "請輸入有效的群組名稱", - "{license}-licensed" : "以 {license} 授權", "Failed to create group" : "創建群組失敗", "Sending…" : "正在傳送……", "Email sent" : "電子郵件已寄出", @@ -837,6 +835,8 @@ OC.L10N.register( "Will be autogenerated" : "將自動生成", "Add a new user" : "新增用戶", "No users in here" : "這裡沒有用戶", + "{license}-licensed" : "以 {license} 授權", + "by {author}\n{license}" : "作者為 {author}\n{license}", "Enter group name" : "輸入群組名稱", "Add group" : "新增群組", "Active users" : "活躍用戶", diff --git a/apps/settings/l10n/zh_HK.json b/apps/settings/l10n/zh_HK.json index 17144ff885f..df970d1a077 100644 --- a/apps/settings/l10n/zh_HK.json +++ b/apps/settings/l10n/zh_HK.json @@ -620,7 +620,7 @@ "Set line manager" : "設定行管理員", "{size} used" : "已使用 {size}", "Delete account" : "刪除賬戶", - "Disconnect all devices and delete local data" : "中斷所有裝置並刪除近端數據", + "Disconnect all devices and delete local data" : "中斷所有裝置連結並刪除近端數據", "Disable account" : "停用賬戶", "Enable account" : "啟用賬戶", "Resend welcome email" : "重新傳送歡迎電子郵件", @@ -670,7 +670,6 @@ "Loading categories" : "正在加載分類", "Developer documentation ↗" : "開發人員使用手冊 ↗", "Version {version}, {license}-licensed" : "版本 {version},授權條款:{license}", - "by {author}\n{license}" : "作者為 {author}\n{license}", "Active accounts" : "活躍賬戶", "Admins" : "管理員", "Disabled accounts" : "已停用賬戶", @@ -681,7 +680,6 @@ "Create group" : "創建群組", "Group name" : "群組名稱", "Please enter a valid group name" : "請輸入有效的群組名稱", - "{license}-licensed" : "以 {license} 授權", "Failed to create group" : "創建群組失敗", "Sending…" : "正在傳送……", "Email sent" : "電子郵件已寄出", @@ -835,6 +833,8 @@ "Will be autogenerated" : "將自動生成", "Add a new user" : "新增用戶", "No users in here" : "這裡沒有用戶", + "{license}-licensed" : "以 {license} 授權", + "by {author}\n{license}" : "作者為 {author}\n{license}", "Enter group name" : "輸入群組名稱", "Add group" : "新增群組", "Active users" : "活躍用戶", diff --git a/apps/settings/l10n/zh_TW.js b/apps/settings/l10n/zh_TW.js index bd7ae6c9770..9c196b3af92 100644 --- a/apps/settings/l10n/zh_TW.js +++ b/apps/settings/l10n/zh_TW.js @@ -325,7 +325,13 @@ OC.L10N.register( "Enforce password protection" : "強制密碼保護", "Exclude groups from password requirements" : "從密碼要求中排除特定群組", "Exclude groups from creating link shares" : "禁止特定群組建立分享連結", + "Limit sharing based on groups" : "以群組為基礎進行分享限制", + "Allow sharing for everyone (default)" : "允許所有人分享(預設)", + "Exclude some groups from sharing" : "從分享中排除部份群組", + "Limit sharing to some groups" : "限制分享給部份群組", + "Groups allowed to share" : "允許分享的群組", "Groups excluded from sharing" : "排除分享的群組", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "不允許的群組仍然可以接收分享,但無法發起分享。", "Set default expiration date for shares" : "設定分享的預設到期日", "Enforce expiration date" : "強制設定到期日", "Default expiration time of new shares in days" : "新分享預設到期時間(天)", @@ -616,6 +622,7 @@ OC.L10N.register( "Set line manager" : "設定行管理員", "{size} used" : "已使用 {size}", "Delete account" : "刪除帳號", + "Disconnect all devices and delete local data" : "取消連結所有裝置並刪除本機資料", "Disable account" : "停用帳號", "Enable account" : "啟用帳號", "Resend welcome email" : "重新傳送歡迎電子郵件", @@ -665,7 +672,6 @@ OC.L10N.register( "Loading categories" : "正在載入分類", "Developer documentation ↗" : "開發者文件 ↗", "Version {version}, {license}-licensed" : "版本 {version},授權條款:{license}", - "by {author}\n{license}" : "作者為 {author}\n{license}", "Active accounts" : "活躍帳號", "Admins" : "管理者", "Disabled accounts" : "已停用帳號", @@ -676,7 +682,6 @@ OC.L10N.register( "Create group" : "建立群組", "Group name" : "群組名稱", "Please enter a valid group name" : "請輸入有效的群組名稱", - "{license}-licensed" : "以 {license} 授權", "Failed to create group" : "建立群組失敗", "Sending…" : "正在傳送……", "Email sent" : "電子郵件已寄出", @@ -830,6 +835,8 @@ OC.L10N.register( "Will be autogenerated" : "將自動生成", "Add a new user" : "新增使用者", "No users in here" : "這裡沒有使用者", + "{license}-licensed" : "以 {license} 授權", + "by {author}\n{license}" : "作者為 {author}\n{license}", "Enter group name" : "輸入群組名稱", "Add group" : "新增群組", "Active users" : "活躍使用者", diff --git a/apps/settings/l10n/zh_TW.json b/apps/settings/l10n/zh_TW.json index 9c0d9547a14..e4049030a87 100644 --- a/apps/settings/l10n/zh_TW.json +++ b/apps/settings/l10n/zh_TW.json @@ -323,7 +323,13 @@ "Enforce password protection" : "強制密碼保護", "Exclude groups from password requirements" : "從密碼要求中排除特定群組", "Exclude groups from creating link shares" : "禁止特定群組建立分享連結", + "Limit sharing based on groups" : "以群組為基礎進行分享限制", + "Allow sharing for everyone (default)" : "允許所有人分享(預設)", + "Exclude some groups from sharing" : "從分享中排除部份群組", + "Limit sharing to some groups" : "限制分享給部份群組", + "Groups allowed to share" : "允許分享的群組", "Groups excluded from sharing" : "排除分享的群組", + "Not allowed groups will still be able to receive shares, but not to initiate them." : "不允許的群組仍然可以接收分享,但無法發起分享。", "Set default expiration date for shares" : "設定分享的預設到期日", "Enforce expiration date" : "強制設定到期日", "Default expiration time of new shares in days" : "新分享預設到期時間(天)", @@ -614,6 +620,7 @@ "Set line manager" : "設定行管理員", "{size} used" : "已使用 {size}", "Delete account" : "刪除帳號", + "Disconnect all devices and delete local data" : "取消連結所有裝置並刪除本機資料", "Disable account" : "停用帳號", "Enable account" : "啟用帳號", "Resend welcome email" : "重新傳送歡迎電子郵件", @@ -663,7 +670,6 @@ "Loading categories" : "正在載入分類", "Developer documentation ↗" : "開發者文件 ↗", "Version {version}, {license}-licensed" : "版本 {version},授權條款:{license}", - "by {author}\n{license}" : "作者為 {author}\n{license}", "Active accounts" : "活躍帳號", "Admins" : "管理者", "Disabled accounts" : "已停用帳號", @@ -674,7 +680,6 @@ "Create group" : "建立群組", "Group name" : "群組名稱", "Please enter a valid group name" : "請輸入有效的群組名稱", - "{license}-licensed" : "以 {license} 授權", "Failed to create group" : "建立群組失敗", "Sending…" : "正在傳送……", "Email sent" : "電子郵件已寄出", @@ -828,6 +833,8 @@ "Will be autogenerated" : "將自動生成", "Add a new user" : "新增使用者", "No users in here" : "這裡沒有使用者", + "{license}-licensed" : "以 {license} 授權", + "by {author}\n{license}" : "作者為 {author}\n{license}", "Enter group name" : "輸入群組名稱", "Add group" : "新增群組", "Active users" : "活躍使用者", diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php index 5d92b02d5c1..9dfe4772b93 100644 --- a/apps/settings/lib/Controller/AppSettingsController.php +++ b/apps/settings/lib/Controller/AppSettingsController.php @@ -131,7 +131,7 @@ class AppSettingsController extends Controller { * @NoCSRFRequired */ public function getAppDiscoverJSON(): JSONResponse { - $data = $this->discoverFetcher->get(); + $data = $this->discoverFetcher->get(true); return new JSONResponse($data); } diff --git a/apps/settings/src/app-types.ts b/apps/settings/src/app-types.ts index 99f0c1ef679..4c5c21a079d 100644 --- a/apps/settings/src/app-types.ts +++ b/apps/settings/src/app-types.ts @@ -66,5 +66,5 @@ export interface IAppstoreApp { isCompatible: boolean appstoreData: Record<string, never> - releases: IAppstoreAppRelease[] + releases?: IAppstoreAppRelease[] } diff --git a/apps/settings/src/components/AppList.vue b/apps/settings/src/components/AppList.vue index 33fb2c725f0..bcd9a23112c 100644 --- a/apps/settings/src/components/AppList.vue +++ b/apps/settings/src/components/AppList.vue @@ -22,9 +22,14 @@ <template> <div id="app-content-inner"> - <div id="apps-list" class="apps-list" :class="{installed: (useBundleView || useListView), store: useAppStoreView}"> + <div id="apps-list" + class="apps-list" + :class="{ + 'apps-list--list-view': (useBundleView || useListView), + 'apps-list--store-view': useAppStoreView, + }"> <template v-if="useListView"> - <div v-if="showUpdateAll" class="toolbar"> + <div v-if="showUpdateAll" class="apps-list__toolbar"> {{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }} <NcButton v-if="showUpdateAll" id="app-list-update-all" @@ -34,25 +39,25 @@ </NcButton> </div> - <div v-if="!showUpdateAll" class="toolbar"> + <div v-if="!showUpdateAll" class="apps-list__toolbar"> {{ t('settings', 'All apps are up-to-date.') }} </div> - <transition-group name="app-list" tag="table" class="apps-list-container"> - <tr key="app-list-view-header" class="apps-header"> - <th class="app-image"> + <TransitionGroup name="apps-list" tag="table" class="apps-list__list-container"> + <tr key="app-list-view-header"> + <th> <span class="hidden-visually">{{ t('settings', 'Icon') }}</span> </th> - <th class="app-name"> + <th> <span class="hidden-visually">{{ t('settings', 'Name') }}</span> </th> - <th class="app-version"> + <th> <span class="hidden-visually">{{ t('settings', 'Version') }}</span> </th> - <th class="app-level"> + <th> <span class="hidden-visually">{{ t('settings', 'Level') }}</span> </th> - <th class="actions"> + <th> <span class="hidden-visually">{{ t('settings', 'Actions') }}</span> </th> </tr> @@ -60,33 +65,33 @@ :key="app.id" :app="app" :category="category" /> - </transition-group> + </TransitionGroup> </template> <table v-if="useBundleView" - class="apps-list-container"> - <tr key="app-list-view-header" class="apps-header"> - <th id="app-table-col-icon" class="app-image"> + class="apps-list__list-container"> + <tr key="app-list-view-header"> + <th id="app-table-col-icon"> <span class="hidden-visually">{{ t('settings', 'Icon') }}</span> </th> - <th id="app-table-col-name" class="app-name"> + <th id="app-table-col-name"> <span class="hidden-visually">{{ t('settings', 'Name') }}</span> </th> - <th id="app-table-col-version" class="app-version"> + <th id="app-table-col-version"> <span class="hidden-visually">{{ t('settings', 'Version') }}</span> </th> - <th id="app-table-col-level" class="app-level"> + <th id="app-table-col-level"> <span class="hidden-visually">{{ t('settings', 'Level') }}</span> </th> - <th id="app-table-col-actions" class="actions"> + <th id="app-table-col-actions"> <span class="hidden-visually">{{ t('settings', 'Actions') }}</span> </th> </tr> <template v-for="bundle in bundles"> <tr :key="bundle.id"> <th :id="`app-table-rowgroup-${bundle.id}`" colspan="5" scope="rowgroup"> - <div class="app-bundle-heading"> - <span class="app-bundle-header"> + <div class="apps-list__bundle-heading"> + <span class="apps-list__bundle-header"> {{ bundle.name }} </span> <NcButton type="secondary" @click="toggleBundle(bundle.id)"> @@ -103,7 +108,7 @@ :category="category" /> </template> </table> - <ul v-if="useAppStoreView" class="apps-store-view"> + <ul v-if="useAppStoreView" class="apps-list__store-container"> <AppItem v-for="app in apps" :key="app.id" :app="app" @@ -112,20 +117,34 @@ </ul> </div> - <div id="apps-list-search" class="apps-list installed"> - <div class="apps-list-container"> - <template v-if="search !== '' && searchApps.length > 0"> - <div class="section"> - <div /> - <td colspan="5"> - <h2>{{ t('settings', 'Results from other categories') }}</h2> - </td> - </div> + <div id="apps-list-search" class="apps-list apps-list--list-view"> + <div class="apps-list__list-container"> + <table v-if="search !== '' && searchApps.length > 0" class="apps-list__list-container"> + <caption class="apps-list__bundle-header"> + {{ t('settings', 'Results from other categories') }} + </caption> + <tr key="app-list-view-header"> + <th> + <span class="hidden-visually">{{ t('settings', 'Icon') }}</span> + </th> + <th> + <span class="hidden-visually">{{ t('settings', 'Name') }}</span> + </th> + <th> + <span class="hidden-visually">{{ t('settings', 'Version') }}</span> + </th> + <th> + <span class="hidden-visually">{{ t('settings', 'Level') }}</span> + </th> + <th> + <span class="hidden-visually">{{ t('settings', 'Actions') }}</span> + </th> + </tr> <AppItem v-for="app in searchApps" :key="app.id" :app="app" :category="category" /> - </template> + </table> </div> </div> @@ -133,8 +152,6 @@ <div id="app-list-empty-icon" class="icon-settings-dark" /> <h2>{{ t('settings', 'No apps found for your version') }}</h2> </div> - - <div id="searchresults" /> </div> </template> @@ -208,6 +225,7 @@ export default { // An app level of `200` will be set for apps featured on the app store return apps.filter(app => app.level === 200) } + // filter app store categories return apps.filter(app => { return app.appstore && app.category !== undefined @@ -311,20 +329,72 @@ export default { </script> <style lang="scss" scoped> - .app-bundle-heading { +$toolbar-padding: 8px; +$toolbar-height: 44px + $toolbar-padding * 2; + +.apps-list { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + + // For transition group + &--move { + transition: transform 1s; + } + + #app-list-update-all { + margin-left: 10px; + } + + &__toolbar { + height: $toolbar-height; + padding: $toolbar-padding; + // Leave room for app-navigation-toggle + padding-left: $toolbar-height; + width: 100%; + background-color: var(--color-main-background); + position: sticky; + top: 0; + z-index: 1; + display: flex; + align-items: center; + } + + &--list-view { + margin-bottom: 100px; + // For positioning link overlay on rows + position: relative; + } + + &__list-container { + width: 100%; + } + + &__store-container { + display: flex; + flex-wrap: wrap; + } + + &__bundle-heading { display: flex; align-items: center; margin: 20px 10px 20px 0; } - .app-bundle-header { + + &__bundle-header { margin: 0 10px 0 50px; font-weight: bold; font-size: 20px; line-height: 30px; color: var(--color-text-light); } - .apps-store-view { - display: flex; - flex-wrap: wrap; +} + +#apps-list-search { + .app-item { + h2 { + margin-bottom: 0; + } } +} </style> diff --git a/apps/settings/src/components/AppList/AppItem.vue b/apps/settings/src/components/AppList/AppItem.vue index fb8f4f6b30b..51d0997c007 100644 --- a/apps/settings/src/components/AppList/AppItem.vue +++ b/apps/settings/src/components/AppList/AppItem.vue @@ -21,9 +21,14 @@ --> <template> - <component :is="listView ? `tr` : `li`" - class="section" - :class="{ selected: isSelected }"> + <component :is="listView ? 'tr' : (inline ? 'article' : 'li')" + class="app-item" + :class="{ + 'app-item--list-view': listView, + 'app-item--store-view': !listView, + 'app-item--selected': isSelected, + 'app-item--with-sidebar': withSidebar, + }"> <component :is="dataItemTag" class="app-image app-image-icon" :headers="getDataItemHeaders(`app-table-col-icon`)"> @@ -73,11 +78,14 @@ <span v-else-if="app.appstoreData.releases[0].version">{{ app.appstoreData.releases[0].version }}</span> </component> - <component :is="dataItemTag" :headers="getDataItemHeaders(`app-table-col-level`)"> + <component :is="dataItemTag" :headers="getDataItemHeaders(`app-table-col-level`)" class="app-level"> <AppLevelBadge :level="app.level" /> <AppScore v-if="hasRating && !listView" :score="app.score" /> </component> - <component :is="dataItemTag" :headers="getDataItemHeaders(`app-table-col-actions`)" class="actions"> + <component :is="dataItemTag" + v-if="!inline" + :headers="getDataItemHeaders(`app-table-col-actions`)" + class="app-actions"> <div v-if="app.error" class="warning"> {{ app.error }} </div> @@ -140,7 +148,10 @@ export default { type: Object, required: true, }, - category: {}, + category: { + type: String, + required: true, + }, listView: { type: Boolean, default: true, @@ -153,6 +164,10 @@ export default { type: String, default: null, }, + inline: { + type: Boolean, + default: false, + }, }, data() { return { @@ -168,6 +183,9 @@ export default { dataItemTag() { return this.listView ? 'td' : 'div' }, + withSidebar() { + return !!this.$route.params.id + }, }, watch: { '$route.params.id'(id) { @@ -200,21 +218,191 @@ export default { </script> <style scoped lang="scss"> +@use '../../../../../core/css/variables.scss' as variables; +@use 'sass:math'; + +.app-item { + position: relative; + + &:hover { + background-color: var(--color-background-dark); + } + + &--list-view { + --app-item-padding: calc(var(--default-grid-baseline) * 2); + --app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2); + + &.app-item--selected { + background-color: var(--color-background-dark); + } + + > * { + vertical-align: middle; + border-bottom: 1px solid var(--color-border); + padding: var(--app-item-padding); + height: var(--app-item-height); + } + + .app-image { + width: var(--default-clickable-area); + height: auto; + text-align: right; + } + + .app-image-icon svg, + .app-image-icon .icon-settings-dark { + margin-top: 5px; + width: 20px; + height: 20px; + opacity: .5; + background-size: cover; + display: inline-block; + } + + .app-name { + padding: 0 var(--app-item-padding); + } + + .app-name--link { + height: var(--app-item-height); + display: flex; + align-items: center; + } + + // Note: because of Safari bug, we cannot position link overlay relative to the table row + // So we need to manually position it relative to the table container and cell + // See: https://bugs.webkit.org/show_bug.cgi?id=240961 + .app-name--link::after { + content: ''; + position: absolute; + left: 0; + right: 0; + height: var(--app-item-height); + } + + .app-actions { + display: flex; + gap: var(--app-item-padding); + flex-wrap: wrap; + justify-content: end; + + .icon-loading-small { + display: inline-block; + top: 4px; + margin-right: 10px; + } + } + + /* hide app version and level on narrower screens */ + @media only screen and (max-width: 900px) { + .app-version, + .app-level { + display: none; + } + } + + /* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */ + @media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) { + .app-actions { + display: none; + } + } + } + + &--store-view { + padding: 30px; + + .app-image-icon .icon-settings-dark { + width: 100%; + height: 150px; + background-size: 45px; + opacity: 0.5; + } + + .app-image-icon svg { + position: absolute; + bottom: 43px; + /* position halfway vertically */ + width: 64px; + height: 64px; + opacity: .1; + } + + .app-name { + margin: 5px 0; + } + + .app-name--link::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + } + + .app-actions { + margin: 10px 0; + } + + @media only screen and (min-width: 1601px) { + width: 25%; + + &.app-item--with-sidebar { + width: 33%; + } + } + + @media only screen and (max-width: 1600px) { + width: 25%; + + &.app-item--with-sidebar { + width: 33%; + } + } + + @media only screen and (max-width: 1400px) { + width: 33%; + + &.app-item--with-sidebar { + width: 50%; + } + } + + @media only screen and (max-width: 900px) { + width: 50%; + + &.app-item--with-sidebar { + width: 100%; + } + } + + @media only screen and (max-width: variables.$breakpoint-mobile) { + width: 50%; + } + + @media only screen and (max-width: 480px) { + width: 100%; + } + } +} + .app-icon { filter: var(--background-invert-if-bright); } -.app-image img { - width: 100%; -} +.app-image { + position: relative; + height: 150px; + opacity: 1; + overflow: hidden; -.app-name--link::after { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; + img { + width: 100%; + } } +.app-version { + color: var(--color-text-maxcontrast); +} </style> diff --git a/apps/settings/src/components/AppStoreDiscover/AppLink.vue b/apps/settings/src/components/AppStoreDiscover/AppLink.vue new file mode 100644 index 00000000000..44776f37ffb --- /dev/null +++ b/apps/settings/src/components/AppStoreDiscover/AppLink.vue @@ -0,0 +1,117 @@ +<!-- + - @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de> + - + - @author Ferdinand Thiessen <opensource@fthiessen.de> + - + - @license AGPL-3.0-or-later + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + - + --> +<template> + <a v-if="linkProps" v-bind="linkProps"> + <slot /> + </a> + <RouterLink v-else-if="routerProps" v-bind="routerProps"> + <slot /> + </RouterLink> +</template> + +<script lang="ts"> +import type { RouterLinkProps } from 'vue-router/types/router.js' + +import { loadState } from '@nextcloud/initial-state' +import { generateUrl } from '@nextcloud/router' +import { defineComponent } from 'vue' +import { RouterLink } from 'vue-router' + +const knownRoutes = Object.fromEntries( + Object.entries( + loadState<Record<string, { app?: string, href: string }>>('core', 'apps'), + ).map(([k, v]) => [v.app ?? k, v.href]), +) + +/** + * This component either shows a native link to the installed app or external size - or a router link to the appstore page of the app if not installed + */ +export default defineComponent({ + name: 'AppLink', + + components: { RouterLink }, + + props: { + href: { + type: String, + required: true, + }, + }, + + data() { + return { + routerProps: undefined as RouterLinkProps|undefined, + linkProps: undefined as Record<string, string>|undefined, + } + }, + + watch: { + href: { + immediate: true, + handler() { + const match = this.href.match(/^app:\/\/([^/]+)(\/.+)?$/) + this.routerProps = undefined + this.linkProps = undefined + + // not an app url + if (match === null) { + this.linkProps = { + href: this.href, + target: '_blank', + rel: 'noreferrer noopener', + } + return + } + + const appId = match[1] + // Check if specific route was requested + if (match[2]) { + // we do no know anything about app internal path so we only allow generic app paths + this.linkProps = { + href: generateUrl(`/apps/${appId}${match[2]}`), + } + return + } + + // If we know any route for that app we open it + if (appId in knownRoutes) { + this.linkProps = { + href: knownRoutes[appId], + } + return + } + + // Fallback to show the app store entry + this.routerProps = { + to: { + name: 'apps-details', + params: { + category: this.$route.params?.category ?? 'discover', + id: appId, + }, + }, + } + }, + }, + }, +}) +</script> diff --git a/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue b/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue index 68610347420..4e20a55bcde 100644 --- a/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue +++ b/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue @@ -38,10 +38,11 @@ import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js' import logger from '../../logger' -import { apiTypeParser } from '../../utils/appDiscoverTypeParser.ts' +import { parseApiResponse, filterElements } from '../../utils/appDiscoverParser.ts' const PostType = defineAsyncComponent(() => import('./PostType.vue')) const CarouselType = defineAsyncComponent(() => import('./CarouselType.vue')) +const ShowcaseType = defineAsyncComponent(() => import('./ShowcaseType.vue')) const hasError = ref(false) const elements = ref<IAppDiscoverElements[]>([]) @@ -50,7 +51,7 @@ const elements = ref<IAppDiscoverElements[]>([]) * Shuffle using the Fisher-Yates algorithm * @param array The array to shuffle (in place) */ -const shuffleArray = (array) => { +const shuffleArray = <T, >(array: T[]): T[] => { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]] @@ -64,8 +65,19 @@ const shuffleArray = (array) => { onBeforeMount(async () => { try { const { data } = await axios.get<Record<string, unknown>[]>(generateUrl('/settings/api/apps/discover')) - const parsedData = data.map(apiTypeParser) - elements.value = shuffleArray(parsedData) + if (data.length === 0) { + logger.info('No app discover elements available (empty response)') + hasError.value = true + return + } + // Parse data to ensure dates are useable and then filter out expired or future elements + const parsedElements = data.map(parseApiResponse).filter(filterElements) + // Shuffle elements to make it looks more interesting + const shuffledElements = shuffleArray(parsedElements) + // Sort pinned elements first + shuffledElements.sort((a, b) => (a.order ?? Infinity) < (b.order ?? Infinity) ? -1 : 1) + // Set the elements to the UI + elements.value = shuffledElements } catch (error) { hasError.value = true logger.error(error as Error) @@ -78,6 +90,8 @@ const getComponent = (type) => { return PostType } else if (type === 'carousel') { return CarouselType + } else if (type === 'showcase') { + return ShowcaseType } return defineComponent({ mounted: () => logger.error('Unknown component requested ', type), diff --git a/apps/settings/src/components/AppStoreDiscover/AppType.vue b/apps/settings/src/components/AppStoreDiscover/AppType.vue new file mode 100644 index 00000000000..badb560e684 --- /dev/null +++ b/apps/settings/src/components/AppStoreDiscover/AppType.vue @@ -0,0 +1,117 @@ +<!-- + - @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de> + - + - @author Ferdinand Thiessen <opensource@fthiessen.de> + - + - @license AGPL-3.0-or-later + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + - + --> +<template> + <AppItem v-if="app" + :app="app" + category="discover" + class="app-discover-app" + inline + :list-view="false" /> + <a v-else + class="app-discover-app app-discover-app__skeleton" + :href="appStoreLink" + target="_blank" + :title="modelValue.appId" + rel="noopener noreferrer"> + <!-- This is a fallback skeleton --> + <span class="skeleton-element" /> + <span class="skeleton-element" /> + <span class="skeleton-element" /> + <span class="skeleton-element" /> + <span class="skeleton-element" /> + </a> +</template> + +<script setup lang="ts"> +import type { IAppDiscoverApp } from '../../constants/AppDiscoverTypes' + +import { computed } from 'vue' +import { useAppsStore } from '../../store/apps-store.ts' + +import AppItem from '../AppList/AppItem.vue' + +const props = defineProps<{ + modelValue: IAppDiscoverApp +}>() + +const store = useAppsStore() +const app = computed(() => store.getAppById(props.modelValue.appId)) + +const appStoreLink = computed(() => props.modelValue.appId ? `https://apps.nextcloud.com/apps/${props.modelValue.appId}` : '#') +</script> + +<style scoped lang="scss"> +.app-discover-app { + width: 100% !important; // full with of the showcase item + + &:hover { + background: var(--color-background-hover); + border-radius: var(--border-radius-rounded); + } + + &__skeleton { + display: flex; + flex-direction: column; + gap: 8px; + + padding: 30px; // Same as AppItem + + > :first-child { + height: 50%; + min-height: 130px; + } + + > :nth-child(2) { + width: 50px; + } + + > :nth-child(5) { + height: 20px; + width: 100px; + } + + > :not(:first-child) { + border-radius: 4px; + } + } +} + +.skeleton-element { + min-height: var(--default-font-size, 15px); + + background: linear-gradient(90deg, var(--color-background-dark), var(--color-background-darker), var(--color-background-dark)); + background-size: 400% 400%; + animation: gradient 6s ease infinite; +} + +@keyframes gradient { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} +</style> diff --git a/apps/settings/src/components/AppStoreDiscover/CarouselType.vue b/apps/settings/src/components/AppStoreDiscover/CarouselType.vue index d0f410b433d..42493d24f31 100644 --- a/apps/settings/src/components/AppStoreDiscover/CarouselType.vue +++ b/apps/settings/src/components/AppStoreDiscover/CarouselType.vue @@ -101,12 +101,12 @@ export default defineComponent({ const internalId = computed(() => props.id ?? (Math.random() + 1).toString(36).substring(7)) const headingId = computed(() => `${internalId.value}-h`) - const transitionName = ref('slide-out') + const transitionName = ref('slide-in') watch(() => currentIndex.value, (o, n) => { if (o < n) { - transitionName.value = 'slide-out' - } else { transitionName.value = 'slide-in' + } else { + transitionName.value = 'slide-out' } // Wait next tick diff --git a/apps/settings/src/components/AppStoreDiscover/PostType.vue b/apps/settings/src/components/AppStoreDiscover/PostType.vue index 443daa6287f..c03cac4feaf 100644 --- a/apps/settings/src/components/AppStoreDiscover/PostType.vue +++ b/apps/settings/src/components/AppStoreDiscover/PostType.vue @@ -21,20 +21,24 @@ --> <template> <article :id="domId" + ref="container" class="app-discover-post" - :class="{ 'app-discover-post--reverse': media && media.alignment === 'start' }"> - <component :is="link ? 'a' : 'div'" + :class="{ + 'app-discover-post--reverse': media && media.alignment === 'start', + 'app-discover-post--small': isSmallWidth + }"> + <component :is="link ? 'AppLink' : 'div'" v-if="headline || text" :href="link" - :target="link ? '_blank' : undefined" class="app-discover-post__text"> - <component :is="inline ? 'h4' : 'h3'">{{ translatedHeadline }}</component> + <component :is="inline ? 'h4' : 'h3'"> + {{ translatedHeadline }} + </component> <p>{{ translatedText }}</p> </component> - <component :is="mediaLink ? 'a' : 'div'" + <component :is="mediaLink ? 'AppLink' : 'div'" v-if="mediaSources" :href="mediaLink" - :target="mediaLink ? '_blank' : undefined" class="app-discover-post__media" :class="{ 'app-discover-post__media--fullwidth': isFullWidth, @@ -73,15 +77,17 @@ import type { PropType } from 'vue' import { mdiPlayCircleOutline } from '@mdi/js' import { generateUrl } from '@nextcloud/router' -import { useElementVisibility } from '@vueuse/core' +import { useElementSize, useElementVisibility } from '@vueuse/core' import { computed, defineComponent, ref, watchEffect } from 'vue' import { commonAppDiscoverProps } from './common' import { useLocalizedValue } from '../../composables/useGetLocalizedValue' import NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js' +import AppLink from './AppLink.vue' export default defineComponent({ components: { + AppLink, NcIconSvgWrapper, }, @@ -116,8 +122,8 @@ export default defineComponent({ setup(props) { const translatedHeadline = useLocalizedValue(computed(() => props.headline)) const translatedText = useLocalizedValue(computed(() => props.text)) - const localizedMedia = useLocalizedValue(computed(() => props.media?.content)) + const mediaSources = computed(() => localizedMedia.value !== null ? [localizedMedia.value.src].flat() : undefined) const mediaAlt = computed(() => localizedMedia.value?.alt ?? '') @@ -137,6 +143,14 @@ export default defineComponent({ const showPlayVideo = computed(() => localizedMedia.value?.link && hasPlaybackEnded.value) /** + * The content is sized / styles are applied based on the container width + * To make it responsive even for inline usage and when opening / closing the sidebar / navigation + */ + const container = ref<HTMLElement>() + const { width: containerWidth } = useElementSize(container) + const isSmallWidth = computed(() => containerWidth.value < 600) + + /** * Generate URL for cached media to prevent user can be tracked * @param url The URL to resolve */ @@ -169,6 +183,8 @@ export default defineComponent({ return { mdiPlayCircleOutline, + container, + translatedText, translatedHeadline, mediaElement, @@ -180,6 +196,7 @@ export default defineComponent({ showPlayVideo, isFullWidth, + isSmallWidth, isImage, generatePrivacyUrl, @@ -190,12 +207,15 @@ export default defineComponent({ <style scoped lang="scss"> .app-discover-post { + max-height: 300px; width: 100%; background-color: var(--color-primary-element-light); border-radius: var(--border-radius-rounded); display: flex; flex-direction: row; + justify-content: start; + &--reverse { flex-direction: row-reverse; } @@ -208,15 +228,20 @@ export default defineComponent({ &__text { display: block; - padding: var(--border-radius-rounded); width: 100%; + padding: var(--border-radius-rounded); + overflow-y: scroll; + } + + // If there is media next to the text we do not want a padding on the bottom as this looks weird when scrolling + &:has(&__media) &__text { + padding-block-end: 0; } &__media { display: block; overflow: hidden; - max-height: 300px; max-width: 450px; border-radius: var(--border-radius-rounded); @@ -256,14 +281,20 @@ export default defineComponent({ } } -// Ensure section works on mobile devices -@media only screen and (max-width: 699px) { - .app-discover-post { +.app-discover-post--small { + &.app-discover-post { flex-direction: column; + max-height: 500px; &--reverse { flex-direction: column-reverse; } + } + + .app-discover-post { + &__text { + flex: 1 1 50%; + } &__media { min-width: 100%; diff --git a/apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue b/apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue new file mode 100644 index 00000000000..cb4d118dd83 --- /dev/null +++ b/apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue @@ -0,0 +1,139 @@ +<!-- + - @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de> + - + - @author Ferdinand Thiessen <opensource@fthiessen.de> + - + - @license AGPL-3.0-or-later + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + - + --> +<template> + <section ref="container" + class="app-discover-showcase" + :class="{ + 'app-discover-showcase--small': isSmallWidth, + 'app-discover-showcase--extra-small': isExtraSmallWidth, + }"> + <h3 v-if="translatedHeadline"> + {{ translatedHeadline }} + </h3> + <ul class="app-discover-showcase__list"> + <li v-for="(item, index) of content" + :key="item.id ?? index" + class="app-discover-showcase__item"> + <PostType v-if="item.type === 'post'" + v-bind="item" + inline /> + <AppType v-else-if="item.type === 'app'" :model-value="item" /> + </li> + </ul> + </section> +</template> + +<script lang="ts"> +import type { PropType } from 'vue' +import type { IAppDiscoverShowcase } from '../../constants/AppDiscoverTypes.ts' + +import { translate as t } from '@nextcloud/l10n' +import { useElementSize } from '@vueuse/core' +import { computed, defineComponent, ref } from 'vue' +import { commonAppDiscoverProps } from './common.ts' +import { useLocalizedValue } from '../../composables/useGetLocalizedValue.ts' + +import AppType from './AppType.vue' +import PostType from './PostType.vue' + +export default defineComponent({ + name: 'ShowcaseType', + + components: { + AppType, + PostType, + }, + + props: { + ...commonAppDiscoverProps, + + /** + * The content of the carousel + */ + content: { + type: Array as PropType<IAppDiscoverShowcase['content']>, + required: true, + }, + }, + + setup(props) { + const translatedHeadline = useLocalizedValue(computed(() => props.headline)) + + /** + * Make the element responsive based on the container width to also handle open navigation or sidebar + */ + const container = ref<HTMLElement>() + const { width: containerWidth } = useElementSize(container) + const isSmallWidth = computed(() => containerWidth.value < 768) + const isExtraSmallWidth = computed(() => containerWidth.value < 512) + + return { + t, + + container, + isSmallWidth, + isExtraSmallWidth, + translatedHeadline, + } + }, +}) +</script> + +<style scoped lang="scss"> +$item-gap: calc(var(--default-clickable-area, 44px) / 2); + +h3 { + font-size: 24px; + font-weight: 600; + margin-block: 0 1em; +} + +.app-discover-showcase { + &__list { + list-style: none; + + display: flex; + flex-wrap: wrap; + gap: $item-gap; + } + + &__item { + display: flex; + align-items: stretch; + + position: relative; + width: calc(33% - $item-gap); + } +} + +.app-discover-showcase--small { + .app-discover-showcase__item { + width: calc(50% - $item-gap); + } +} + +.app-discover-showcase--extra-small { + .app-discover-showcase__item { + width: 100%; + } +} +</style> diff --git a/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue b/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue index b9fad458300..24387581cdd 100644 --- a/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue +++ b/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue @@ -426,4 +426,9 @@ export default { background: var(--color-error); } +.missing-dependencies { + list-style: initial; + list-style-type: initial; + list-style-position: inside; +} </style> diff --git a/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue b/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue index 8fe89221170..13e6ecff28f 100644 --- a/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue +++ b/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue @@ -50,7 +50,7 @@ import Markdown from '../Markdown.vue' // eslint-disable-next-line @typescript-eslint/no-unused-vars const props = defineProps<{ app: IAppstoreApp }>() -const hasChangelog = computed(() => Object.values(props.app.releases[0]?.translations ?? {}).some(({ changelog }) => !!changelog)) +const hasChangelog = computed(() => Object.values(props.app.releases?.[0]?.translations ?? {}).some(({ changelog }) => !!changelog)) const createChangelogFromRelease = (release: IAppstoreAppRelease) => release.translations?.[getLanguage()]?.changelog ?? release.translations?.en?.changelog ?? '' </script> diff --git a/apps/settings/src/constants/AppDiscoverTypes.ts b/apps/settings/src/constants/AppDiscoverTypes.ts index d28516fe79c..fe350eb9a35 100644 --- a/apps/settings/src/constants/AppDiscoverTypes.ts +++ b/apps/settings/src/constants/AppDiscoverTypes.ts @@ -42,6 +42,11 @@ export interface IAppDiscoverElement { id: string, /** + * Order of this element to pin elements (smaller = shown on top) + */ + order?: number + + /** * Optional, localized, headline for the element */ headline?: ILocalizedValue<string> @@ -54,12 +59,12 @@ export interface IAppDiscoverElement { /** * Optional date when this element will get valid (only show since then) */ - date?: Date|number + date?: number /** * Optional date when this element will be invalid (only show until then) */ - expiryDate?: Date|number + expiryDate?: number } /** Wrapper for media source and MIME type */ @@ -86,15 +91,6 @@ interface IAppDiscoverMediaContent { } /** - * An app element only used for the showcase type - */ -interface IAppDiscoverApp { - /** The App ID */ - type: 'app' - app: string -} - -/** * Wrapper for post media */ interface IAppDiscoverMedia { @@ -109,6 +105,15 @@ interface IAppDiscoverMedia { content: ILocalizedValue<IAppDiscoverMediaContent> } +/** + * An app element only used for the showcase type + */ +export interface IAppDiscoverApp { + /** The App ID */ + type: 'app' + appId: string +} + export interface IAppDiscoverPost extends IAppDiscoverElement { type: 'post' text?: ILocalizedValue<string> diff --git a/apps/settings/src/router/routes.ts b/apps/settings/src/router/routes.ts index 3aae9a0e178..28adae75d63 100644 --- a/apps/settings/src/router/routes.ts +++ b/apps/settings/src/router/routes.ts @@ -1,14 +1,12 @@ import type { RouteConfig } from 'vue-router' -import { defineAsyncComponent } from 'vue' - // Dynamic loading -const AppStore = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-apps-view' */'../views/AppStore.vue')) -const AppStoreNavigation = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-apps-view' */'../views/AppStoreNavigation.vue')) -const AppstoreSidebar = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-apps-view' */'../views/AppStoreSidebar.vue')) +const AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */'../views/AppStore.vue') +const AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */'../views/AppStoreNavigation.vue') +const AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */'../views/AppStoreSidebar.vue') -const UserManagement = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-users' */'../views/UserManagement.vue')) -const UserManagementNavigation = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-users' */'../views/UserManagementNavigation.vue')) +const UserManagement = () => import(/* webpackChunkName: 'settings-users' */'../views/UserManagement.vue') +const UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */'../views/UserManagementNavigation.vue') const routes: RouteConfig[] = [ { @@ -29,10 +27,17 @@ const routes: RouteConfig[] = [ { path: '/:index(index.php/)?settings/apps', name: 'apps', + // redirect to our default route - the app discover section + redirect: { + name: 'apps-category', + params: { + category: 'discover', + }, + }, components: { default: AppStore, navigation: AppStoreNavigation, - sidebar: AppstoreSidebar, + sidebar: AppStoreSidebar, }, children: [ { diff --git a/apps/settings/src/store/apps-store.ts b/apps/settings/src/store/apps-store.ts index b29d1088273..b0554d8cbf9 100644 --- a/apps/settings/src/store/apps-store.ts +++ b/apps/settings/src/store/apps-store.ts @@ -97,7 +97,7 @@ export const useAppsStore = defineStore('settings-apps', { return this.categories.find(({ id }) => id === categoryId) ?? null }, - getAppById(appId: string) { + getAppById(appId: string): IAppstoreApp|null { return this.apps.find(({ id }) => id === appId) ?? null }, }, diff --git a/apps/settings/src/utils/appDiscoverParser.spec.ts b/apps/settings/src/utils/appDiscoverParser.spec.ts new file mode 100644 index 00000000000..e00b24dff49 --- /dev/null +++ b/apps/settings/src/utils/appDiscoverParser.spec.ts @@ -0,0 +1,96 @@ +/** + * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de> + * + * @author Ferdinand Thiessen <opensource@fthiessen.de> + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +import type { IAppDiscoverElement } from '../constants/AppDiscoverTypes' + +import { describe, expect, it } from '@jest/globals' +import { filterElements, parseApiResponse } from './appDiscoverParser' + +describe('App Discover API parser', () => { + describe('filterElements', () => { + it('can filter expired elements', () => { + const result = filterElements({ id: 'test', type: 'post', expiryDate: 100 }) + expect(result).toBe(false) + }) + + it('can filter upcoming elements', () => { + const result = filterElements({ id: 'test', type: 'post', date: Date.now() + 10000 }) + expect(result).toBe(false) + }) + + it('ignores element without dates', () => { + const result = filterElements({ id: 'test', type: 'post' }) + expect(result).toBe(true) + }) + + it('allows not yet expired elements', () => { + const result = filterElements({ id: 'test', type: 'post', expiryDate: Date.now() + 10000 }) + expect(result).toBe(true) + }) + + it('allows yet included elements', () => { + const result = filterElements({ id: 'test', type: 'post', date: 100 }) + expect(result).toBe(true) + }) + + it('allows elements included and not expired', () => { + const result = filterElements({ id: 'test', type: 'post', date: 100, expiryDate: Date.now() + 10000 }) + expect(result).toBe(true) + }) + + it('can handle null values', () => { + const result = filterElements({ id: 'test', type: 'post', date: null, expiryDate: null } as unknown as IAppDiscoverElement) + expect(result).toBe(true) + }) + }) + + describe('parseApiResponse', () => { + it('can handle basic post', () => { + const result = parseApiResponse({ id: 'test', type: 'post' }) + expect(result).toEqual({ id: 'test', type: 'post' }) + }) + + it('can handle carousel', () => { + const result = parseApiResponse({ id: 'test', type: 'carousel' }) + expect(result).toEqual({ id: 'test', type: 'carousel' }) + }) + + it('can handle showcase', () => { + const result = parseApiResponse({ id: 'test', type: 'showcase' }) + expect(result).toEqual({ id: 'test', type: 'showcase' }) + }) + + it('throws on unknown type', () => { + expect(() => parseApiResponse({ id: 'test', type: 'foo-bar' })).toThrow() + }) + + it('parses the date', () => { + const result = parseApiResponse({ id: 'test', type: 'showcase', date: '2024-03-19T17:28:19+0000' }) + expect(result).toEqual({ id: 'test', type: 'showcase', date: 1710869299000 }) + }) + + it('parses the expiryDate', () => { + const result = parseApiResponse({ id: 'test', type: 'showcase', expiryDate: '2024-03-19T17:28:19Z' }) + expect(result).toEqual({ id: 'test', type: 'showcase', expiryDate: 1710869299000 }) + }) + }) +}) diff --git a/apps/settings/src/utils/appDiscoverTypeParser.ts b/apps/settings/src/utils/appDiscoverParser.ts index ed20138e91b..96f7d3e4b7d 100644 --- a/apps/settings/src/utils/appDiscoverTypeParser.ts +++ b/apps/settings/src/utils/appDiscoverParser.ts @@ -20,14 +20,14 @@ * */ -import type { IAppDiscoverCarousel, IAppDiscoverElements, IAppDiscoverPost, IAppDiscoverShowcase } from '../constants/AppDiscoverTypes.ts' +import type { IAppDiscoverCarousel, IAppDiscoverElement, IAppDiscoverElements, IAppDiscoverPost, IAppDiscoverShowcase } from '../constants/AppDiscoverTypes.ts' /** * Helper to transform the JSON API results to proper frontend objects (app discover section elements) * * @param element The JSON API element to transform */ -export const apiTypeParser = (element: Record<string, unknown>): IAppDiscoverElements => { +export const parseApiResponse = (element: Record<string, unknown>): IAppDiscoverElements => { const appElement = { ...element } if (appElement.date) { appElement.date = Date.parse(appElement.date as string) @@ -45,3 +45,21 @@ export const apiTypeParser = (element: Record<string, unknown>): IAppDiscoverEle } throw new Error(`Invalid argument, app discover element with type ${element.type ?? 'unknown'} is unknown`) } + +/** + * Filter outdated or upcoming elements + * @param element Element to check + */ +export const filterElements = (element: IAppDiscoverElement) => { + const now = Date.now() + // Element not yet published + if (element.date && element.date > now) { + return false + } + + // Element expired + if (element.expiryDate && element.expiryDate < now) { + return false + } + return true +} diff --git a/apps/settings/src/views/AppStoreNavigation.vue b/apps/settings/src/views/AppStoreNavigation.vue index 75ce207c80f..1e89cda17c1 100644 --- a/apps/settings/src/views/AppStoreNavigation.vue +++ b/apps/settings/src/views/AppStoreNavigation.vue @@ -3,8 +3,7 @@ <NcAppNavigation :aria-label="t('settings', 'Apps')"> <template #list> <NcAppNavigationItem id="app-category-discover" - :to="{ name: 'apps' }" - :exact="true" + :to="{ name: 'apps-category', params: { category: 'discover'} }" :name="APPS_SECTION_ENUM.discover"> <template #icon> <NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.discover" /> @@ -12,7 +11,6 @@ </NcAppNavigationItem> <NcAppNavigationItem id="app-category-installed" :to="{ name: 'apps-category', params: { category: 'installed'} }" - :exact="true" :name="APPS_SECTION_ENUM.installed"> <template #icon> <NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.installed" /> diff --git a/apps/settings/src/views/AppStoreSidebar.vue b/apps/settings/src/views/AppStoreSidebar.vue index 1e0d2562abc..0e76d360afd 100644 --- a/apps/settings/src/views/AppStoreSidebar.vue +++ b/apps/settings/src/views/AppStoreSidebar.vue @@ -80,7 +80,7 @@ const hasRating = computed(() => app.value.appstoreData?.ratingNumOverall > 5) const rating = computed(() => app.value.appstoreData?.ratingNumRecent > 5 ? app.value.appstoreData.ratingRecent : (app.value.appstoreData?.ratingOverall ?? 0.5)) -const showSidebar = computed(() => app.value) +const showSidebar = computed(() => app.value !== null) const { appIcon } = useAppIcon(app) diff --git a/apps/systemtags/l10n/fa.js b/apps/systemtags/l10n/fa.js index cc26079c04f..71fd666999a 100644 --- a/apps/systemtags/l10n/fa.js +++ b/apps/systemtags/l10n/fa.js @@ -37,7 +37,7 @@ OC.L10N.register( "{actor} removed system tag {systemtag} from {file}" : "{actor} removed system tag {systemtag} from {file}", "%s (restricted)" : "%s (restricted)", "%s (invisible)" : "%s (invisible)", - "<strong>System tags</strong> for a file have been modified" : "<strong>System tags</strong> for a file have been modified", + "<strong>System tags</strong> for a file have been modified" : "برچسب های سیستم برای یک فایل تغییر داده شده است", "Tags" : "برچسبها", "All tagged %s …" : "All tagged %s …", "tagged %s" : "tagged %s", diff --git a/apps/systemtags/l10n/fa.json b/apps/systemtags/l10n/fa.json index d1fe61f97ce..26f51fa4cff 100644 --- a/apps/systemtags/l10n/fa.json +++ b/apps/systemtags/l10n/fa.json @@ -35,7 +35,7 @@ "{actor} removed system tag {systemtag} from {file}" : "{actor} removed system tag {systemtag} from {file}", "%s (restricted)" : "%s (restricted)", "%s (invisible)" : "%s (invisible)", - "<strong>System tags</strong> for a file have been modified" : "<strong>System tags</strong> for a file have been modified", + "<strong>System tags</strong> for a file have been modified" : "برچسب های سیستم برای یک فایل تغییر داده شده است", "Tags" : "برچسبها", "All tagged %s …" : "All tagged %s …", "tagged %s" : "tagged %s", diff --git a/core/Command/App/ListApps.php b/core/Command/App/ListApps.php index 2db781418e5..d0b2d397e9f 100644 --- a/core/Command/App/ListApps.php +++ b/core/Command/App/ListApps.php @@ -7,6 +7,7 @@ * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * @author Adam Blakey <adam@blakey.family> * * @license AGPL-3.0 * @@ -51,6 +52,18 @@ class ListApps extends Base { InputOption::VALUE_REQUIRED, 'true - limit to shipped apps only, false - limit to non-shipped apps only' ) + ->addOption( + 'enabled', + null, + InputOption::VALUE_NONE, + 'shows only enabled apps' + ) + ->addOption( + 'disabled', + null, + InputOption::VALUE_NONE, + 'shows only disabled apps' + ) ; } @@ -61,6 +74,9 @@ class ListApps extends Base { $shippedFilter = null; } + $showEnabledApps = $input->getOption('enabled') || !$input->getOption('disabled'); + $showDisabledApps = $input->getOption('disabled') || !$input->getOption('enabled'); + $apps = \OC_App::getAllApps(); $enabledApps = $disabledApps = []; $versions = \OC_App::getAppVersions(); @@ -77,16 +93,24 @@ class ListApps extends Base { } } - $apps = ['enabled' => [], 'disabled' => []]; + $apps = []; + + if ($showEnabledApps) { + $apps['enabled'] = []; - sort($enabledApps); - foreach ($enabledApps as $app) { - $apps['enabled'][$app] = $versions[$app] ?? true; + sort($enabledApps); + foreach ($enabledApps as $app) { + $apps['enabled'][$app] = $versions[$app] ?? true; + } } - sort($disabledApps); - foreach ($disabledApps as $app) { - $apps['disabled'][$app] = $this->manager->getAppVersion($app) . (isset($versions[$app]) ? ' (installed ' . $versions[$app] . ')' : ''); + if ($showDisabledApps) { + $apps['disabled'] = []; + + sort($disabledApps); + foreach ($disabledApps as $app) { + $apps['disabled'][$app] = $this->manager->getAppVersion($app) . (isset($versions[$app]) ? ' (installed ' . $versions[$app] . ')' : ''); + } } $this->writeAppList($input, $output, $apps); @@ -101,11 +125,15 @@ class ListApps extends Base { protected function writeAppList(InputInterface $input, OutputInterface $output, $items): void { switch ($input->getOption('output')) { case self::OUTPUT_FORMAT_PLAIN: - $output->writeln('Enabled:'); - parent::writeArrayInOutputFormat($input, $output, $items['enabled']); - - $output->writeln('Disabled:'); - parent::writeArrayInOutputFormat($input, $output, $items['disabled']); + if (isset($items['enabled'])) { + $output->writeln('Enabled:'); + parent::writeArrayInOutputFormat($input, $output, $items['enabled']); + } + + if (isset($items['disabled'])) { + $output->writeln('Disabled:'); + parent::writeArrayInOutputFormat($input, $output, $items['disabled']); + } break; default: diff --git a/core/src/views/Login.vue b/core/src/views/Login.vue index 4c5d256109f..57634bcb8f8 100644 --- a/core/src/views/Login.vue +++ b/core/src/views/Login.vue @@ -66,7 +66,7 @@ </template> </div> <div v-else-if="!loading && passwordlessLogin" - key="reset" + key="reset-pw-less" class="login-additional login-passwordless"> <PasswordLessLoginForm :username.sync="user" :redirect-url="redirectUrl" @@ -83,7 +83,7 @@ </NcButton> </div> <div v-else-if="!loading && canResetPassword" - key="reset" + key="reset-can-reset" class="login-additional"> <div class="lost-password-container"> <ResetPassword v-if="resetPassword" @@ -101,8 +101,8 @@ </template> <template v-else> <transition name="fade" mode="out-in"> - <NcNoteCard type="warning" :title="t('core', 'Login form is disabled.')"> - {{ t('core', 'Please contact your administrator.') }} + <NcNoteCard type="info" :title="t('core', 'Login form is disabled.')"> + {{ t('core', 'The Nextcloud login form is disabled. Use another login option if available or contact your administration.') }} </NcNoteCard> </transition> </template> diff --git a/cypress/e2e/settings/apps.cy.ts b/cypress/e2e/settings/apps.cy.ts index 581a6c0a1e7..c1ef24951a9 100644 --- a/cypress/e2e/settings/apps.cy.ts +++ b/cypress/e2e/settings/apps.cy.ts @@ -39,11 +39,10 @@ describe('Settings: App management', { testIsolation: true }, () => { }) it('Can enable an installed app', () => { - cy.get('#apps-list').should('be.visible') + cy.get('#apps-list').should('exist') // Wait for the app list to load .contains('tr', 'QA testing', { timeout: 10000 }) .should('exist') - .find('.actions') // I enable the "QA testing" app .contains('button', 'Enable') .click({ force: true }) @@ -51,10 +50,9 @@ describe('Settings: App management', { testIsolation: true }, () => { handlePasswordConfirmation(admin.password) // Wait until we see the disable button for the app - cy.get('#apps-list').should('be.visible') + cy.get('#apps-list').should('exist') .contains('tr', 'QA testing') .should('exist') - .find('.actions') // I see the disable button for the app .contains('button', 'Disable', { timeout: 10000 }) @@ -62,15 +60,15 @@ describe('Settings: App management', { testIsolation: true }, () => { cy.get('#app-category-enabled a').click({ force: true }) cy.url().should('match', /settings\/apps\/enabled$/) // I see that the "QA testing" app has been enabled - cy.get('.apps-list-container').contains('tr', 'QA testing') + cy.get('#apps-list').contains('tr', 'QA testing') }) it('Can disable an installed app', () => { - cy.get('#apps-list').should('be.visible') + cy.get('#apps-list') + .should('exist') // Wait for the app list to load .contains('tr', 'Update notification', { timeout: 10000 }) .should('exist') - .find('.actions') // I disable the "Update notification" app .contains('button', 'Disable') .click({ force: true }) @@ -78,10 +76,9 @@ describe('Settings: App management', { testIsolation: true }, () => { handlePasswordConfirmation(admin.password) // Wait until we see the disable button for the app - cy.get('#apps-list').should('be.visible') + cy.get('#apps-list').should('exist') .contains('tr', 'Update notification') .should('exist') - .find('.actions') // I see the enable button for the app .contains('button', 'Enable', { timeout: 10000 }) @@ -89,7 +86,7 @@ describe('Settings: App management', { testIsolation: true }, () => { cy.get('#app-category-disabled a').click({ force: true }) cy.url().should('match', /settings\/apps\/disabled$/) // I see that the "Update notification" app has been disabled - cy.get('.apps-list-container').contains('tr', 'Update notification') + cy.get('#apps-list').contains('tr', 'Update notification') }) it('Browse enabled apps', () => { @@ -102,8 +99,8 @@ describe('Settings: App management', { testIsolation: true }, () => { cy.get('#app-category-enabled').find('.active').should('exist') // I see that there are only enabled apps cy.get('#apps-list') - .should('be.visible') - .find('tr .actions') + .should('exist') + .find('tr button') .each(($action) => { cy.wrap($action).should('not.contain', 'Enable') }) @@ -119,8 +116,8 @@ describe('Settings: App management', { testIsolation: true }, () => { cy.get('#app-category-disabled').find('.active').should('exist') // I see that there are only disabled apps cy.get('#apps-list') - .should('be.visible') - .find('tr .actions') + .should('exist') + .find('tr button') .each(($action) => { cy.wrap($action).should('not.contain', 'Disable') }) diff --git a/dist/1544-1544.js b/dist/1544-1544.js new file mode 100644 index 00000000000..fef9588d0c3 --- /dev/null +++ b/dist/1544-1544.js @@ -0,0 +1,3 @@ +/*! For license information please see 1544-1544.js.LICENSE.txt */ +"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[1544],{77796:(t,e,r)=>{r.d(e,{K:()=>i});const a=["post","showcase","carousel"],i={type:{type:String,required:!0,validator:t=>"string"==typeof t&&a.includes(t)},id:{type:String,required:!0},date:{type:Number,required:!1,default:void 0},expiryDate:{type:Number,required:!1,default:void 0},headline:{type:Object,required:!1,default:()=>null},link:{type:String,required:!1,default:()=>null}}},74640:(t,e,r)=>{r.d(e,{O:()=>n});var a=r(53334),i=r(85471);const n=t=>{const e=(0,a.Z0)();return(0,i.EW)((()=>null!=t&&t.value?((t,e)=>{var r,a,i;return null!==(r=null!==(a=null!==(i=t[e])&&void 0!==i?i:t[e.split("_")[0]])&&void 0!==a?a:t.en)&&void 0!==r?r:null})(t.value,e):null))}},68578:(t,e,r)=>{r.d(e,{A:()=>o});var a=r(71354),i=r.n(a),n=r(76314),d=r.n(n)()(i());d.push([t.id,".app-discover-post[data-v-050320e2]{max-height:300px;width:100%;background-color:var(--color-primary-element-light);border-radius:var(--border-radius-rounded);display:flex;flex-direction:row;justify-content:start}.app-discover-post--reverse[data-v-050320e2]{flex-direction:row-reverse}.app-discover-post h3[data-v-050320e2],.app-discover-post h4[data-v-050320e2]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-post__text[data-v-050320e2]{display:block;width:100%;padding:var(--border-radius-rounded);overflow-y:scroll}.app-discover-post:has(.app-discover-post__media) .app-discover-post__text[data-v-050320e2]{padding-block-end:0}.app-discover-post__media[data-v-050320e2]{display:block;overflow:hidden;max-width:450px;border-radius:var(--border-radius-rounded)}.app-discover-post__media--fullwidth[data-v-050320e2]{max-width:unset;max-height:unset}.app-discover-post__media--end[data-v-050320e2]{border-end-start-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-050320e2]{border-end-end-radius:0;border-start-end-radius:0}.app-discover-post__media img[data-v-050320e2],.app-discover-post__media-element[data-v-050320e2]{height:100%;width:100%;object-fit:cover;object-position:center}.app-discover-post__play-icon[data-v-050320e2]{position:absolute;top:-46px;right:-46px}.app-discover-post__play-icon-wrapper[data-v-050320e2]{position:relative;top:-50%;left:-50%}.app-discover-post--small.app-discover-post[data-v-050320e2]{flex-direction:column;max-height:500px}.app-discover-post--small.app-discover-post--reverse[data-v-050320e2]{flex-direction:column-reverse}.app-discover-post--small .app-discover-post__text[data-v-050320e2]{flex:1 1 50%}.app-discover-post--small .app-discover-post__media[data-v-050320e2]{min-width:100%}.app-discover-post--small .app-discover-post__media--end[data-v-050320e2]{border-radius:var(--border-radius-rounded);border-start-end-radius:0;border-start-start-radius:0}.app-discover-post--small .app-discover-post__media--start[data-v-050320e2]{border-radius:var(--border-radius-rounded);border-end-end-radius:0;border-end-start-radius:0}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/PostType.vue"],names:[],mappings:"AACA,oCACC,gBAAA,CACA,UAAA,CACA,mDAAA,CACA,0CAAA,CAEA,YAAA,CACA,kBAAA,CACA,qBAAA,CAEA,6CACC,0BAAA,CAGD,8EACC,cAAA,CACA,eAAA,CACA,kBAAA,CAGD,0CACC,aAAA,CACA,UAAA,CACA,oCAAA,CACA,iBAAA,CAID,4FACC,mBAAA,CAGD,2CACC,aAAA,CACA,eAAA,CAEA,eAAA,CACA,0CAAA,CAEA,sDACC,eAAA,CACA,gBAAA,CAGD,gDACC,yBAAA,CACA,2BAAA,CAGD,kDACC,uBAAA,CACA,yBAAA,CAGD,kGACC,WAAA,CACA,UAAA,CACA,gBAAA,CACA,sBAAA,CAIF,+CAOC,iBAAA,CACA,SAAA,CACA,WAAA,CARA,uDACC,iBAAA,CACA,QAAA,CACA,SAAA,CAUF,6DACC,qBAAA,CACA,gBAAA,CAEA,sEACC,6BAAA,CAKD,oEACC,YAAA,CAGD,qEACC,cAAA,CAEA,0EACC,0CAAA,CACA,yBAAA,CACA,2BAAA,CAGD,4EACC,0CAAA,CACA,uBAAA,CACA,yBAAA",sourcesContent:["\n.app-discover-post {\n\tmax-height: 300px;\n\twidth: 100%;\n\tbackground-color: var(--color-primary-element-light);\n\tborder-radius: var(--border-radius-rounded);\n\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: start;\n\n\t&--reverse {\n\t\tflex-direction: row-reverse;\n\t}\n\n\th3, h4 {\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tmargin-block: 0 1em;\n\t}\n\n\t&__text {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\t\tpadding: var(--border-radius-rounded);\n\t\toverflow-y: scroll;\n\t}\n\n\t// If there is media next to the text we do not want a padding on the bottom as this looks weird when scrolling\n\t&:has(&__media) &__text {\n\t\tpadding-block-end: 0;\n\t}\n\n\t&__media {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\n\t\tmax-width: 450px;\n\t\tborder-radius: var(--border-radius-rounded);\n\n\t\t&--fullwidth {\n\t\t\tmax-width: unset;\n\t\t\tmax-height: unset;\n\t\t}\n\n\t\t&--end {\n\t\t\tborder-end-start-radius: 0;\n\t\t\tborder-start-start-radius: 0;\n\t\t}\n\n\t\t&--start {\n\t\t\tborder-end-end-radius: 0;\n\t\t\tborder-start-end-radius: 0;\n\t\t}\n\n\t\timg, &-element {\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tobject-fit: cover;\n\t\t\tobject-position: center;\n\t\t}\n\t}\n\n\t&__play-icon {\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t\ttop: -50%;\n\t\t\tleft: -50%;\n\t\t}\n\n\t\tposition: absolute;\n\t\ttop: -46px; // half of the icon height\n\t\tright: -46px; // half of the icon width\n\t}\n}\n\n.app-discover-post--small {\n\t&.app-discover-post {\n\t\tflex-direction: column;\n\t\tmax-height: 500px;\n\n\t\t&--reverse {\n\t\t\tflex-direction: column-reverse;\n\t\t}\n\t}\n\n\t.app-discover-post {\n\t\t&__text {\n\t\t\tflex: 1 1 50%;\n\t\t}\n\n\t\t&__media {\n\t\t\tmin-width: 100%;\n\n\t\t\t&--end {\n\t\t\t\tborder-radius: var(--border-radius-rounded);\n\t\t\t\tborder-start-end-radius: 0;\n\t\t\t\tborder-start-start-radius: 0;\n\t\t\t}\n\n\t\t\t&--start {\n\t\t\t\tborder-radius: var(--border-radius-rounded);\n\t\t\t\tborder-end-end-radius: 0;\n\t\t\t\tborder-end-start-radius: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const o=d},21544:(t,e,r)=>{r.r(e),r.d(e,{default:()=>I});var a=r(9165),i=r(99498),n=r(13073),d=r(85471),o=r(77796),s=r(74640),l=r(6695),p=r(38613),A=r(40173);const u=Object.fromEntries(Object.entries((0,p.C)("core","apps")).map((t=>{var e;let[r,a]=t;return[null!==(e=a.app)&&void 0!==e?e:r,a.href]}))),c=(0,d.pM)({name:"AppLink",components:{RouterLink:A.Wk},props:{href:{type:String,required:!0}},data:()=>({routerProps:void 0,linkProps:void 0}),watch:{href:{immediate:!0,handler(){var t,e;const r=this.href.match(/^app:\/\/([^/]+)(\/.+)?$/);if(this.routerProps=void 0,this.linkProps=void 0,null===r)return void(this.linkProps={href:this.href,target:"_blank",rel:"noreferrer noopener"});const a=r[1];r[2]?this.linkProps={href:(0,i.Jv)("/apps/".concat(a).concat(r[2]))}:a in u?this.linkProps={href:u[a]}:this.routerProps={to:{name:"apps-details",params:{category:null!==(t=null===(e=this.$route.params)||void 0===e?void 0:e.category)&&void 0!==t?t:"discover",id:a}}}}}}});var v=r(14486);const m=(0,v.A)(c,(function(){var t=this,e=t._self._c;return t._self._setupProxy,t.linkProps?e("a",t._b({},"a",t.linkProps,!1),[t._t("default")],2):t.routerProps?e("RouterLink",t._b({},"RouterLink",t.routerProps,!1),[t._t("default")],2):t._e()}),[],!1,null,null,null).exports,C=(0,d.pM)({components:{AppLink:m,NcIconSvgWrapper:l.A},props:{...o.K,text:{type:Object,required:!1,default:()=>null},media:{type:Object,required:!1,default:()=>null},inline:{type:Boolean,required:!1,default:!1},domId:{type:String,required:!1,default:null}},setup(t){const e=(0,s.O)((0,d.EW)((()=>t.headline))),r=(0,s.O)((0,d.EW)((()=>t.text))),o=(0,s.O)((0,d.EW)((()=>{var e;return null===(e=t.media)||void 0===e?void 0:e.content}))),l=(0,d.EW)((()=>null!==o.value?[o.value.src].flat():void 0)),p=(0,d.EW)((()=>{var t,e;return null!==(t=null===(e=o.value)||void 0===e?void 0:e.alt)&&void 0!==t?t:""})),A=(0,d.EW)((()=>{var t;return!0===(null==l||null===(t=l.value)||void 0===t?void 0:t[0].mime.startsWith("image/"))})),u=(0,d.EW)((()=>!e.value&&!r.value)),c=(0,d.EW)((()=>{var e,r;return null!==(e=null===(r=o.value)||void 0===r?void 0:r.link)&&void 0!==e?e:t.link})),v=(0,d.KR)(!1),m=(0,d.EW)((()=>{var t;return(null===(t=o.value)||void 0===t?void 0:t.link)&&v.value})),C=(0,d.KR)(),{width:h}=(0,n.Lhy)(C),_=(0,d.EW)((()=>h.value<600)),f=(0,d.KR)(),g=(0,n.ITo)(f,{threshold:.3});return(0,d.nT)((()=>{if(!A.value&&f.value){const t=f.value;g.value?(t.muted=!0,t.play()):(t.pause(),t.ended&&(t.currentTime=0,v.value=!1))}})),{mdiPlayCircleOutline:a.Nwy,container:C,translatedText:r,translatedHeadline:e,mediaElement:f,mediaSources:l,mediaAlt:p,mediaLink:c,hasPlaybackEnded:v,showPlayVideo:m,isFullWidth:u,isSmallWidth:_,isImage:A,generatePrivacyUrl:t=>t.startsWith("/")?t:(0,i.Jv)("/settings/api/apps/media?fileName={fileName}",{fileName:t})}}});var h=r(85072),_=r.n(h),f=r(97825),g=r.n(f),b=r(77659),y=r.n(b),x=r(55056),k=r.n(x),w=r(10540),E=r.n(w),P=r(41113),B=r.n(P),W=r(68578),D={};D.styleTagTransform=B(),D.setAttributes=k(),D.insert=y().bind(null,"head"),D.domAPI=g(),D.insertStyleElement=E(),_()(W.A,D),W.A&&W.A.locals&&W.A.locals;const I=(0,v.A)(C,(function(){var t,e,r=this,a=r._self._c;return r._self._setupProxy,a("article",{ref:"container",staticClass:"app-discover-post",class:{"app-discover-post--reverse":r.media&&"start"===r.media.alignment,"app-discover-post--small":r.isSmallWidth},attrs:{id:r.domId}},[r.headline||r.text?a(r.link?"AppLink":"div",{tag:"component",staticClass:"app-discover-post__text",attrs:{href:r.link}},[a(r.inline?"h4":"h3",{tag:"component"},[r._v("\n\t\t\t"+r._s(r.translatedHeadline)+"\n\t\t")]),r._v(" "),a("p",[r._v(r._s(r.translatedText))])],1):r._e(),r._v(" "),r.mediaSources?a(r.mediaLink?"AppLink":"div",{tag:"component",staticClass:"app-discover-post__media",class:{"app-discover-post__media--fullwidth":r.isFullWidth,"app-discover-post__media--start":"start"===(null===(t=r.media)||void 0===t?void 0:t.alignment),"app-discover-post__media--end":"end"===(null===(e=r.media)||void 0===e?void 0:e.alignment)},attrs:{href:r.mediaLink}},[a(r.isImage?"picture":"video",{ref:"mediaElement",tag:"component",staticClass:"app-discover-post__media-element",attrs:{muted:!r.isImage,playsinline:!r.isImage,preload:!r.isImage&&"auto"},on:{ended:function(t){r.hasPlaybackEnded=!0}}},[r._l(r.mediaSources,(function(t){return a("source",{key:t.src,attrs:{src:r.isImage?void 0:r.generatePrivacyUrl(t.src),srcset:r.isImage?r.generatePrivacyUrl(t.src):void 0,type:t.mime}})})),r._v(" "),r.isImage?a("img",{attrs:{src:r.generatePrivacyUrl(r.mediaSources[0].src),alt:r.mediaAlt}}):r._e()],2),r._v(" "),a("div",{staticClass:"app-discover-post__play-icon-wrapper"},[!r.isImage&&r.showPlayVideo?a("NcIconSvgWrapper",{staticClass:"app-discover-post__play-icon",attrs:{path:r.mdiPlayCircleOutline,size:92}}):r._e()],1)],1):r._e()],1)}),[],!1,null,"050320e2",null).exports}}]); +//# sourceMappingURL=1544-1544.js.map?v=d535e8c8987669bcb7a2
\ No newline at end of file diff --git a/dist/8484-8484.js.LICENSE.txt b/dist/1544-1544.js.LICENSE.txt index b2a687cf184..b2a687cf184 100644 --- a/dist/8484-8484.js.LICENSE.txt +++ b/dist/1544-1544.js.LICENSE.txt diff --git a/dist/1544-1544.js.map b/dist/1544-1544.js.map new file mode 100644 index 00000000000..f6bfc0c9d69 --- /dev/null +++ b/dist/1544-1544.js.map @@ -0,0 +1 @@ +{"version":3,"file":"1544-1544.js?v=d535e8c8987669bcb7a2","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/constants/AppDiscoverTypes.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/common.ts","webpack:///nextcloud/apps/settings/src/composables/useGetLocalizedValue.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue?vue&type=style&index=0&id=050320e2&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppLink.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppLink.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppLink.vue?8487","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/PostType.vue?3591","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/PostType.vue?bdb8"],"sourcesContent":["/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/**\n * Currently known types of app discover section elements\n */\nexport const APP_DISCOVER_KNOWN_TYPES = ['post', 'showcase', 'carousel'];\n","import { APP_DISCOVER_KNOWN_TYPES } from '../../constants/AppDiscoverTypes.ts';\n/**\n * Common Props for all app discover types\n */\nexport const commonAppDiscoverProps = {\n type: {\n type: String,\n required: true,\n validator: (v) => typeof v === 'string' && APP_DISCOVER_KNOWN_TYPES.includes(v),\n },\n id: {\n type: String,\n required: true,\n },\n date: {\n type: Number,\n required: false,\n default: undefined,\n },\n expiryDate: {\n type: Number,\n required: false,\n default: undefined,\n },\n headline: {\n type: Object,\n required: false,\n default: () => null,\n },\n link: {\n type: String,\n required: false,\n default: () => null,\n },\n};\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLanguage } from '@nextcloud/l10n';\nimport { computed } from 'vue';\n/**\n * Helper to get the localized value for the current users language\n * @param dict The dictionary to get the value from\n * @param language The language to use\n */\nconst getLocalizedValue = (dict, language) => dict[language] ?? dict[language.split('_')[0]] ?? dict.en ?? null;\n/**\n * Get the localized value of the dictionary provided\n * @param dict Dictionary\n * @return String or null if invalid dictionary\n */\nexport const useLocalizedValue = (dict) => {\n /**\n * Language of the current user\n */\n const language = getLanguage();\n return computed(() => !dict?.value ? null : getLocalizedValue(dict.value, language));\n};\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover-post[data-v-050320e2]{max-height:300px;width:100%;background-color:var(--color-primary-element-light);border-radius:var(--border-radius-rounded);display:flex;flex-direction:row;justify-content:start}.app-discover-post--reverse[data-v-050320e2]{flex-direction:row-reverse}.app-discover-post h3[data-v-050320e2],.app-discover-post h4[data-v-050320e2]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-post__text[data-v-050320e2]{display:block;width:100%;padding:var(--border-radius-rounded);overflow-y:scroll}.app-discover-post:has(.app-discover-post__media) .app-discover-post__text[data-v-050320e2]{padding-block-end:0}.app-discover-post__media[data-v-050320e2]{display:block;overflow:hidden;max-width:450px;border-radius:var(--border-radius-rounded)}.app-discover-post__media--fullwidth[data-v-050320e2]{max-width:unset;max-height:unset}.app-discover-post__media--end[data-v-050320e2]{border-end-start-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-050320e2]{border-end-end-radius:0;border-start-end-radius:0}.app-discover-post__media img[data-v-050320e2],.app-discover-post__media-element[data-v-050320e2]{height:100%;width:100%;object-fit:cover;object-position:center}.app-discover-post__play-icon[data-v-050320e2]{position:absolute;top:-46px;right:-46px}.app-discover-post__play-icon-wrapper[data-v-050320e2]{position:relative;top:-50%;left:-50%}.app-discover-post--small.app-discover-post[data-v-050320e2]{flex-direction:column;max-height:500px}.app-discover-post--small.app-discover-post--reverse[data-v-050320e2]{flex-direction:column-reverse}.app-discover-post--small .app-discover-post__text[data-v-050320e2]{flex:1 1 50%}.app-discover-post--small .app-discover-post__media[data-v-050320e2]{min-width:100%}.app-discover-post--small .app-discover-post__media--end[data-v-050320e2]{border-radius:var(--border-radius-rounded);border-start-end-radius:0;border-start-start-radius:0}.app-discover-post--small .app-discover-post__media--start[data-v-050320e2]{border-radius:var(--border-radius-rounded);border-end-end-radius:0;border-end-start-radius:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/PostType.vue\"],\"names\":[],\"mappings\":\"AACA,oCACC,gBAAA,CACA,UAAA,CACA,mDAAA,CACA,0CAAA,CAEA,YAAA,CACA,kBAAA,CACA,qBAAA,CAEA,6CACC,0BAAA,CAGD,8EACC,cAAA,CACA,eAAA,CACA,kBAAA,CAGD,0CACC,aAAA,CACA,UAAA,CACA,oCAAA,CACA,iBAAA,CAID,4FACC,mBAAA,CAGD,2CACC,aAAA,CACA,eAAA,CAEA,eAAA,CACA,0CAAA,CAEA,sDACC,eAAA,CACA,gBAAA,CAGD,gDACC,yBAAA,CACA,2BAAA,CAGD,kDACC,uBAAA,CACA,yBAAA,CAGD,kGACC,WAAA,CACA,UAAA,CACA,gBAAA,CACA,sBAAA,CAIF,+CAOC,iBAAA,CACA,SAAA,CACA,WAAA,CARA,uDACC,iBAAA,CACA,QAAA,CACA,SAAA,CAUF,6DACC,qBAAA,CACA,gBAAA,CAEA,sEACC,6BAAA,CAKD,oEACC,YAAA,CAGD,qEACC,cAAA,CAEA,0EACC,0CAAA,CACA,yBAAA,CACA,2BAAA,CAGD,4EACC,0CAAA,CACA,uBAAA,CACA,yBAAA\",\"sourcesContent\":[\"\\n.app-discover-post {\\n\\tmax-height: 300px;\\n\\twidth: 100%;\\n\\tbackground-color: var(--color-primary-element-light);\\n\\tborder-radius: var(--border-radius-rounded);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tjustify-content: start;\\n\\n\\t&--reverse {\\n\\t\\tflex-direction: row-reverse;\\n\\t}\\n\\n\\th3, h4 {\\n\\t\\tfont-size: 24px;\\n\\t\\tfont-weight: 600;\\n\\t\\tmargin-block: 0 1em;\\n\\t}\\n\\n\\t&__text {\\n\\t\\tdisplay: block;\\n\\t\\twidth: 100%;\\n\\t\\tpadding: var(--border-radius-rounded);\\n\\t\\toverflow-y: scroll;\\n\\t}\\n\\n\\t// If there is media next to the text we do not want a padding on the bottom as this looks weird when scrolling\\n\\t&:has(&__media) &__text {\\n\\t\\tpadding-block-end: 0;\\n\\t}\\n\\n\\t&__media {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\n\\t\\tmax-width: 450px;\\n\\t\\tborder-radius: var(--border-radius-rounded);\\n\\n\\t\\t&--fullwidth {\\n\\t\\t\\tmax-width: unset;\\n\\t\\t\\tmax-height: unset;\\n\\t\\t}\\n\\n\\t\\t&--end {\\n\\t\\t\\tborder-end-start-radius: 0;\\n\\t\\t\\tborder-start-start-radius: 0;\\n\\t\\t}\\n\\n\\t\\t&--start {\\n\\t\\t\\tborder-end-end-radius: 0;\\n\\t\\t\\tborder-start-end-radius: 0;\\n\\t\\t}\\n\\n\\t\\timg, &-element {\\n\\t\\t\\theight: 100%;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tobject-fit: cover;\\n\\t\\t\\tobject-position: center;\\n\\t\\t}\\n\\t}\\n\\n\\t&__play-icon {\\n\\t\\t&-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\ttop: -50%;\\n\\t\\t\\tleft: -50%;\\n\\t\\t}\\n\\n\\t\\tposition: absolute;\\n\\t\\ttop: -46px; // half of the icon height\\n\\t\\tright: -46px; // half of the icon width\\n\\t}\\n}\\n\\n.app-discover-post--small {\\n\\t&.app-discover-post {\\n\\t\\tflex-direction: column;\\n\\t\\tmax-height: 500px;\\n\\n\\t\\t&--reverse {\\n\\t\\t\\tflex-direction: column-reverse;\\n\\t\\t}\\n\\t}\\n\\n\\t.app-discover-post {\\n\\t\\t&__text {\\n\\t\\t\\tflex: 1 1 50%;\\n\\t\\t}\\n\\n\\t\\t&__media {\\n\\t\\t\\tmin-width: 100%;\\n\\n\\t\\t\\t&--end {\\n\\t\\t\\t\\tborder-radius: var(--border-radius-rounded);\\n\\t\\t\\t\\tborder-start-end-radius: 0;\\n\\t\\t\\t\\tborder-start-start-radius: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--start {\\n\\t\\t\\t\\tborder-radius: var(--border-radius-rounded);\\n\\t\\t\\t\\tborder-end-end-radius: 0;\\n\\t\\t\\t\\tborder-end-start-radius: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('article',{ref:\"container\",staticClass:\"app-discover-post\",class:{\n\t\t'app-discover-post--reverse': _vm.media && _vm.media.alignment === 'start',\n\t\t'app-discover-post--small': _vm.isSmallWidth\n\t},attrs:{\"id\":_vm.domId}},[(_vm.headline || _vm.text)?_c(_vm.link ? 'AppLink' : 'div',{tag:\"component\",staticClass:\"app-discover-post__text\",attrs:{\"href\":_vm.link}},[_c(_vm.inline ? 'h4' : 'h3',{tag:\"component\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.translatedHeadline)+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.translatedText))])],1):_vm._e(),_vm._v(\" \"),(_vm.mediaSources)?_c(_vm.mediaLink ? 'AppLink' : 'div',{tag:\"component\",staticClass:\"app-discover-post__media\",class:{\n\t\t\t'app-discover-post__media--fullwidth': _vm.isFullWidth,\n\t\t\t'app-discover-post__media--start': _vm.media?.alignment === 'start',\n\t\t\t'app-discover-post__media--end': _vm.media?.alignment === 'end',\n\t\t},attrs:{\"href\":_vm.mediaLink}},[_c(_vm.isImage ? 'picture' : 'video',{ref:\"mediaElement\",tag:\"component\",staticClass:\"app-discover-post__media-element\",attrs:{\"muted\":!_vm.isImage,\"playsinline\":!_vm.isImage,\"preload\":!_vm.isImage && 'auto'},on:{\"ended\":function($event){_vm.hasPlaybackEnded = true}}},[_vm._l((_vm.mediaSources),function(source){return _c('source',{key:source.src,attrs:{\"src\":_vm.isImage ? undefined : _vm.generatePrivacyUrl(source.src),\"srcset\":_vm.isImage ? _vm.generatePrivacyUrl(source.src) : undefined,\"type\":source.mime}})}),_vm._v(\" \"),(_vm.isImage)?_c('img',{attrs:{\"src\":_vm.generatePrivacyUrl(_vm.mediaSources[0].src),\"alt\":_vm.mediaAlt}}):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-post__play-icon-wrapper\"},[(!_vm.isImage && _vm.showPlayVideo)?_c('NcIconSvgWrapper',{staticClass:\"app-discover-post__play-icon\",attrs:{\"path\":_vm.mdiPlayCircleOutline,\"size\":92}}):_vm._e()],1)],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_vm.linkProps)?_c('a',_vm._b({},'a',_vm.linkProps,false),[_vm._t(\"default\")],2):(_vm.routerProps)?_c('RouterLink',_vm._b({},'RouterLink',_vm.routerProps,false),[_vm._t(\"default\")],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLink.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLink.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./AppLink.vue?vue&type=template&id=e6b87e98\"\nimport script from \"./AppLink.vue?vue&type=script&lang=ts\"\nexport * from \"./AppLink.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=style&index=0&id=050320e2&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=style&index=0&id=050320e2&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PostType.vue?vue&type=template&id=050320e2&scoped=true\"\nimport script from \"./PostType.vue?vue&type=script&lang=ts\"\nexport * from \"./PostType.vue?vue&type=script&lang=ts\"\nimport style0 from \"./PostType.vue?vue&type=style&index=0&id=050320e2&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"050320e2\",\n null\n \n)\n\nexport default component.exports"],"names":["APP_DISCOVER_KNOWN_TYPES","commonAppDiscoverProps","type","String","required","validator","v","includes","id","date","Number","default","undefined","expiryDate","headline","Object","link","useLocalizedValue","dict","language","getLanguage","computed","value","getLocalizedValue","_ref","_ref2","_dict$language","split","en","___CSS_LOADER_EXPORT___","push","module","knownRoutes","fromEntries","entries","loadState","map","_v$app","k","app","href","defineComponent","name","components","RouterLink","props","data","routerProps","linkProps","watch","immediate","handler","_this$$route$params$c","_this$$route$params","match","target","rel","appId","generateUrl","concat","to","params","category","$route","_vm","this","_c","_self","_setupProxy","_b","_t","_e","AppLink","NcIconSvgWrapper","text","media","inline","Boolean","domId","setup","translatedHeadline","translatedText","localizedMedia","_props$media","content","mediaSources","src","flat","mediaAlt","_localizedMedia$value","_localizedMedia$value2","alt","isImage","_mediaSources$value","mime","startsWith","isFullWidth","mediaLink","_localizedMedia$value3","_localizedMedia$value4","hasPlaybackEnded","ref","showPlayVideo","_localizedMedia$value5","container","width","containerWidth","useElementSize","isSmallWidth","mediaElement","mediaIsVisible","useElementVisibility","threshold","watchEffect","video","muted","play","pause","ended","currentTime","mdiPlayCircleOutline","generatePrivacyUrl","url","fileName","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm$media","_vm$media2","staticClass","class","alignment","attrs","tag","_v","_s","on","$event","_l","source","key"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/3865-3865.js b/dist/3865-3865.js new file mode 100644 index 00000000000..a48a834ca0c --- /dev/null +++ b/dist/3865-3865.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[3865],{58410:(t,n,e)=>{e.d(n,{A:()=>s});var o=e(71354),a=e.n(o),r=e(76314),i=e.n(r)()(a());i.push([t.id,"h3[data-v-ee726cc0]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-carousel__wrapper[data-v-ee726cc0]{display:flex}.app-discover-carousel__button[data-v-ee726cc0]{color:var(--color-text-maxcontrast);position:absolute;top:calc(50% - 22px)}.app-discover-carousel__button-wrapper[data-v-ee726cc0]{position:relative}.app-discover-carousel__button--next[data-v-ee726cc0]{right:-54px}.app-discover-carousel__button--previous[data-v-ee726cc0]{left:-54px}.app-discover-carousel__tabs[data-v-ee726cc0]{display:flex;flex-direction:row;justify-content:center}.app-discover-carousel__tabs>*[data-v-ee726cc0]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue"],names:[],mappings:"AACA,oBACC,cAAA,CACA,eAAA,CACA,kBAAA,CAIA,iDACC,YAAA,CAGD,gDACC,mCAAA,CACA,iBAAA,CACA,oBAAA,CAEA,wDACC,iBAAA,CAID,sDACC,WAAA,CAED,0DACC,UAAA,CAIF,8CACC,YAAA,CACA,kBAAA,CACA,sBAAA,CAEA,gDACC,mCAAA",sourcesContent:["\nh3 {\n\tfont-size: 24px;\n\tfont-weight: 600;\n\tmargin-block: 0 1em;\n}\n\n.app-discover-carousel {\n\t&__wrapper {\n\t\tdisplay: flex;\n\t}\n\n\t&__button {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tposition: absolute;\n\t\ttop: calc(50% - 22px); // 50% minus half of button height\n\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// See padding of discover section\n\t\t&--next {\n\t\t\tright: -54px;\n\t\t}\n\t\t&--previous {\n\t\t\tleft: -54px;\n\t\t}\n\t}\n\n\t&__tabs {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\n\t\t> * {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=i},54135:(t,n,e)=>{e.d(n,{A:()=>s});var o=e(71354),a=e.n(o),r=e(76314),i=e.n(r)()(a());i.push([t.id,"\n.slide-in-enter-active,\n.slide-in-leave-active,\n.slide-out-enter-active,\n.slide-out-leave-active {\n transition: all .4s ease-out;\n}\n.slide-in-leave-to,\n.slide-out-enter {\n opacity: 0;\n transform: translateX(50%);\n}\n.slide-in-enter,\n.slide-out-leave-to {\n opacity: 0;\n transform: translateX(-50%);\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue"],names:[],mappings:";AAuLA;;;;EAIA,4BAAA;AACA;AAEA;;EAEA,UAAA;EACA,0BAAA;AACA;AAEA;;EAEA,UAAA;EACA,2BAAA;AACA",sourcesContent:['<template>\n\t<section :aria-roledescription="t(\'settings\', \'Carousel\')" :aria-labelledby="headingId ? `${headingId}` : undefined">\n\t\t<h3 v-if="headline" :id="headingId">\n\t\t\t{{ translatedHeadline }}\n\t\t</h3>\n\t\t<div class="app-discover-carousel__wrapper">\n\t\t\t<div class="app-discover-carousel__button-wrapper">\n\t\t\t\t<NcButton class="app-discover-carousel__button app-discover-carousel__button--previous"\n\t\t\t\t\ttype="tertiary-no-background"\n\t\t\t\t\t:aria-label="t(\'settings\', \'Previous slide\')"\n\t\t\t\t\t:disabled="!hasPrevious"\n\t\t\t\t\t@click="currentIndex -= 1">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="mdiChevronLeft" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\n\t\t\t<Transition :name="transitionName" mode="out-in">\n\t\t\t\t<PostType v-bind="shownElement"\n\t\t\t\t\t:key="shownElement.id ?? currentIndex"\n\t\t\t\t\t:aria-labelledby="`${internalId}-tab-${currentIndex}`"\n\t\t\t\t\t:dom-id="`${internalId}-tabpanel-${currentIndex}`"\n\t\t\t\t\tinline\n\t\t\t\t\trole="tabpanel" />\n\t\t\t</Transition>\n\n\t\t\t<div class="app-discover-carousel__button-wrapper">\n\t\t\t\t<NcButton class="app-discover-carousel__button app-discover-carousel__button--next"\n\t\t\t\t\ttype="tertiary-no-background"\n\t\t\t\t\t:aria-label="t(\'settings\', \'Next slide\')"\n\t\t\t\t\t:disabled="!hasNext"\n\t\t\t\t\t@click="currentIndex += 1">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="mdiChevronRight" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="app-discover-carousel__tabs" role="tablist" :aria-label="t(\'settings\', \'Choose slide to display\')">\n\t\t\t<NcButton v-for="index of content.length"\n\t\t\t\t:id="`${internalId}-tab-${index}`"\n\t\t\t\t:key="index"\n\t\t\t\t:aria-label="t(\'settings\', \'{index} of {total}\', { index, total: content.length })"\n\t\t\t\t:aria-controls="`${internalId}-tabpanel-${index}`"\n\t\t\t\t:aria-selected="`${currentIndex === (index - 1)}`"\n\t\t\t\trole="tab"\n\t\t\t\ttype="tertiary-no-background"\n\t\t\t\t@click="currentIndex = index - 1">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="currentIndex === (index - 1) ? mdiCircleSlice8 : mdiCircleOutline" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t</section>\n</template>\n\n<script lang="ts">\nimport type { PropType } from \'vue\'\nimport type { IAppDiscoverCarousel } from \'../../constants/AppDiscoverTypes.ts\'\n\nimport { mdiChevronLeft, mdiChevronRight, mdiCircleOutline, mdiCircleSlice8 } from \'@mdi/js\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { computed, defineComponent, nextTick, ref, watch } from \'vue\'\nimport { commonAppDiscoverProps } from \'./common.ts\'\nimport { useLocalizedValue } from \'../../composables/useGetLocalizedValue.ts\'\n\nimport NcButton from \'@nextcloud/vue/dist/Components/NcButton.js\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport PostType from \'./PostType.vue\'\n\nexport default defineComponent({\n\tname: \'CarouselType\',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcIconSvgWrapper,\n\t\tPostType,\n\t},\n\n\tprops: {\n\t\t...commonAppDiscoverProps,\n\n\t\t/**\n\t\t * The content of the carousel\n\t\t */\n\t\tcontent: {\n\t\t\ttype: Array as PropType<IAppDiscoverCarousel[\'content\']>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup(props) {\n\t\tconst translatedHeadline = useLocalizedValue(computed(() => props.headline))\n\n\t\tconst currentIndex = ref(Math.min(1, props.content.length - 1))\n\t\tconst shownElement = ref(props.content[currentIndex.value])\n\t\tconst hasNext = computed(() => currentIndex.value < (props.content.length - 1))\n\t\tconst hasPrevious = computed(() => currentIndex.value > 0)\n\n\t\tconst internalId = computed(() => props.id ?? (Math.random() + 1).toString(36).substring(7))\n\t\tconst headingId = computed(() => `${internalId.value}-h`)\n\n\t\tconst transitionName = ref(\'slide-in\')\n\t\twatch(() => currentIndex.value, (o, n) => {\n\t\t\tif (o < n) {\n\t\t\t\ttransitionName.value = \'slide-in\'\n\t\t\t} else {\n\t\t\t\ttransitionName.value = \'slide-out\'\n\t\t\t}\n\n\t\t\t// Wait next tick\n\t\t\tnextTick(() => {\n\t\t\t\tshownElement.value = props.content[currentIndex.value]\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tt,\n\t\t\tinternalId,\n\t\t\theadingId,\n\n\t\t\thasNext,\n\t\t\thasPrevious,\n\t\t\tcurrentIndex,\n\t\t\tshownElement,\n\n\t\t\ttransitionName,\n\n\t\t\ttranslatedHeadline,\n\n\t\t\tmdiChevronLeft,\n\t\t\tmdiChevronRight,\n\t\t\tmdiCircleOutline,\n\t\t\tmdiCircleSlice8,\n\t\t}\n\t},\n})\n<\/script>\n\n<style scoped lang="scss">\nh3 {\n\tfont-size: 24px;\n\tfont-weight: 600;\n\tmargin-block: 0 1em;\n}\n\n.app-discover-carousel {\n\t&__wrapper {\n\t\tdisplay: flex;\n\t}\n\n\t&__button {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tposition: absolute;\n\t\ttop: calc(50% - 22px); // 50% minus half of button height\n\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// See padding of discover section\n\t\t&--next {\n\t\t\tright: -54px;\n\t\t}\n\t\t&--previous {\n\t\t\tleft: -54px;\n\t\t}\n\t}\n\n\t&__tabs {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\n\t\t> * {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n</style>\n\n<style>\n.slide-in-enter-active,\n.slide-in-leave-active,\n.slide-out-enter-active,\n.slide-out-leave-active {\n transition: all .4s ease-out;\n}\n\n.slide-in-leave-to,\n.slide-out-enter {\n opacity: 0;\n transform: translateX(50%);\n}\n\n.slide-in-enter,\n.slide-out-leave-to {\n opacity: 0;\n transform: translateX(-50%);\n}\n</style>\n'],sourceRoot:""}]);const s=i},73865:(t,n,e)=>{e.r(n),e.d(n,{default:()=>E});var o=e(9165),a=e(53334),r=e(85471),i=e(77796),s=e(74640),c=e(9518),l=e(6695),d=e(21544);const p=(0,r.pM)({name:"CarouselType",components:{NcButton:c.A,NcIconSvgWrapper:l.A,PostType:d.default},props:{...i.K,content:{type:Array,required:!0}},setup(t){const n=(0,s.O)((0,r.EW)((()=>t.headline))),e=(0,r.KR)(Math.min(1,t.content.length-1)),i=(0,r.KR)(t.content[e.value]),c=(0,r.EW)((()=>e.value<t.content.length-1)),l=(0,r.EW)((()=>e.value>0)),d=(0,r.EW)((()=>{var n;return null!==(n=t.id)&&void 0!==n?n:(Math.random()+1).toString(36).substring(7)})),p=(0,r.EW)((()=>"".concat(d.value,"-h"))),u=(0,r.KR)("slide-in");return(0,r.wB)((()=>e.value),((n,o)=>{u.value=n<o?"slide-in":"slide-out",(0,r.dY)((()=>{i.value=t.content[e.value]}))})),{t:a.Tl,internalId:d,headingId:p,hasNext:c,hasPrevious:l,currentIndex:e,shownElement:i,transitionName:u,translatedHeadline:n,mdiChevronLeft:o.LyG,mdiChevronRight:o.mI8,mdiCircleOutline:o.h$D,mdiCircleSlice8:o.xSL}}});var u=e(85072),v=e.n(u),A=e(97825),m=e.n(A),h=e(77659),x=e.n(h),C=e(55056),b=e.n(C),f=e(10540),g=e.n(f),_=e(41113),y=e.n(_),I=e(58410),N={};N.styleTagTransform=y(),N.setAttributes=b(),N.insert=x().bind(null,"head"),N.domAPI=m(),N.insertStyleElement=g(),v()(I.A,N),I.A&&I.A.locals&&I.A.locals;var w=e(54135),k={};k.styleTagTransform=y(),k.setAttributes=b(),k.insert=x().bind(null,"head"),k.domAPI=m(),k.insertStyleElement=g(),v()(w.A,k),w.A&&w.A.locals&&w.A.locals;const E=(0,e(14486).A)(p,(function(){var t,n=this,e=n._self._c;return n._self._setupProxy,e("section",{attrs:{"aria-roledescription":n.t("settings","Carousel"),"aria-labelledby":n.headingId?"".concat(n.headingId):void 0}},[n.headline?e("h3",{attrs:{id:n.headingId}},[n._v("\n\t\t"+n._s(n.translatedHeadline)+"\n\t")]):n._e(),n._v(" "),e("div",{staticClass:"app-discover-carousel__wrapper"},[e("div",{staticClass:"app-discover-carousel__button-wrapper"},[e("NcButton",{staticClass:"app-discover-carousel__button app-discover-carousel__button--previous",attrs:{type:"tertiary-no-background","aria-label":n.t("settings","Previous slide"),disabled:!n.hasPrevious},on:{click:function(t){n.currentIndex-=1}},scopedSlots:n._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:n.mdiChevronLeft}})]},proxy:!0}])})],1),n._v(" "),e("Transition",{attrs:{name:n.transitionName,mode:"out-in"}},[e("PostType",n._b({key:null!==(t=n.shownElement.id)&&void 0!==t?t:n.currentIndex,attrs:{"aria-labelledby":"".concat(n.internalId,"-tab-").concat(n.currentIndex),"dom-id":"".concat(n.internalId,"-tabpanel-").concat(n.currentIndex),inline:"",role:"tabpanel"}},"PostType",n.shownElement,!1))],1),n._v(" "),e("div",{staticClass:"app-discover-carousel__button-wrapper"},[e("NcButton",{staticClass:"app-discover-carousel__button app-discover-carousel__button--next",attrs:{type:"tertiary-no-background","aria-label":n.t("settings","Next slide"),disabled:!n.hasNext},on:{click:function(t){n.currentIndex+=1}},scopedSlots:n._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:n.mdiChevronRight}})]},proxy:!0}])})],1)],1),n._v(" "),e("div",{staticClass:"app-discover-carousel__tabs",attrs:{role:"tablist","aria-label":n.t("settings","Choose slide to display")}},n._l(n.content.length,(function(t){return e("NcButton",{key:t,attrs:{id:"".concat(n.internalId,"-tab-").concat(t),"aria-label":n.t("settings","{index} of {total}",{index:t,total:n.content.length}),"aria-controls":"".concat(n.internalId,"-tabpanel-").concat(t),"aria-selected":"".concat(n.currentIndex===t-1),role:"tab",type:"tertiary-no-background"},on:{click:function(e){n.currentIndex=t-1}},scopedSlots:n._u([{key:"icon",fn:function(){return[e("NcIconSvgWrapper",{attrs:{path:n.currentIndex===t-1?n.mdiCircleSlice8:n.mdiCircleOutline}})]},proxy:!0}],null,!0)})})),1)])}),[],!1,null,"ee726cc0",null).exports}}]); +//# sourceMappingURL=3865-3865.js.map?v=1b3dd2786e4df4dcbf8d
\ No newline at end of file diff --git a/dist/3865-3865.js.map b/dist/3865-3865.js.map new file mode 100644 index 00000000000..fb57b8b45e7 --- /dev/null +++ b/dist/3865-3865.js.map @@ -0,0 +1 @@ +{"version":3,"file":"3865-3865.js?v=1b3dd2786e4df4dcbf8d","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue?vue&type=style&index=0&id=ee726cc0&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue?vue&type=style&index=1&id=ee726cc0&prod&lang=css","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/CarouselType.vue?3237","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/CarouselType.vue?8a2f","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/CarouselType.vue?982a"],"sourcesContent":["// 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, `h3[data-v-ee726cc0]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-carousel__wrapper[data-v-ee726cc0]{display:flex}.app-discover-carousel__button[data-v-ee726cc0]{color:var(--color-text-maxcontrast);position:absolute;top:calc(50% - 22px)}.app-discover-carousel__button-wrapper[data-v-ee726cc0]{position:relative}.app-discover-carousel__button--next[data-v-ee726cc0]{right:-54px}.app-discover-carousel__button--previous[data-v-ee726cc0]{left:-54px}.app-discover-carousel__tabs[data-v-ee726cc0]{display:flex;flex-direction:row;justify-content:center}.app-discover-carousel__tabs>*[data-v-ee726cc0]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue\"],\"names\":[],\"mappings\":\"AACA,oBACC,cAAA,CACA,eAAA,CACA,kBAAA,CAIA,iDACC,YAAA,CAGD,gDACC,mCAAA,CACA,iBAAA,CACA,oBAAA,CAEA,wDACC,iBAAA,CAID,sDACC,WAAA,CAED,0DACC,UAAA,CAIF,8CACC,YAAA,CACA,kBAAA,CACA,sBAAA,CAEA,gDACC,mCAAA\",\"sourcesContent\":[\"\\nh3 {\\n\\tfont-size: 24px;\\n\\tfont-weight: 600;\\n\\tmargin-block: 0 1em;\\n}\\n\\n.app-discover-carousel {\\n\\t&__wrapper {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__button {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tposition: absolute;\\n\\t\\ttop: calc(50% - 22px); // 50% minus half of button height\\n\\n\\t\\t&-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// See padding of discover section\\n\\t\\t&--next {\\n\\t\\t\\tright: -54px;\\n\\t\\t}\\n\\t\\t&--previous {\\n\\t\\t\\tleft: -54px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__tabs {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t> * {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.slide-in-enter-active,\n.slide-in-leave-active,\n.slide-out-enter-active,\n.slide-out-leave-active {\n transition: all .4s ease-out;\n}\n.slide-in-leave-to,\n.slide-out-enter {\n opacity: 0;\n transform: translateX(50%);\n}\n.slide-in-enter,\n.slide-out-leave-to {\n opacity: 0;\n transform: translateX(-50%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue\"],\"names\":[],\"mappings\":\";AAuLA;;;;EAIA,4BAAA;AACA;AAEA;;EAEA,UAAA;EACA,0BAAA;AACA;AAEA;;EAEA,UAAA;EACA,2BAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<section :aria-roledescription=\\\"t('settings', 'Carousel')\\\" :aria-labelledby=\\\"headingId ? `${headingId}` : undefined\\\">\\n\\t\\t<h3 v-if=\\\"headline\\\" :id=\\\"headingId\\\">\\n\\t\\t\\t{{ translatedHeadline }}\\n\\t\\t</h3>\\n\\t\\t<div class=\\\"app-discover-carousel__wrapper\\\">\\n\\t\\t\\t<div class=\\\"app-discover-carousel__button-wrapper\\\">\\n\\t\\t\\t\\t<NcButton class=\\\"app-discover-carousel__button app-discover-carousel__button--previous\\\"\\n\\t\\t\\t\\t\\ttype=\\\"tertiary-no-background\\\"\\n\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Previous slide')\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"!hasPrevious\\\"\\n\\t\\t\\t\\t\\t@click=\\\"currentIndex -= 1\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiChevronLeft\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<Transition :name=\\\"transitionName\\\" mode=\\\"out-in\\\">\\n\\t\\t\\t\\t<PostType v-bind=\\\"shownElement\\\"\\n\\t\\t\\t\\t\\t:key=\\\"shownElement.id ?? currentIndex\\\"\\n\\t\\t\\t\\t\\t:aria-labelledby=\\\"`${internalId}-tab-${currentIndex}`\\\"\\n\\t\\t\\t\\t\\t:dom-id=\\\"`${internalId}-tabpanel-${currentIndex}`\\\"\\n\\t\\t\\t\\t\\tinline\\n\\t\\t\\t\\t\\trole=\\\"tabpanel\\\" />\\n\\t\\t\\t</Transition>\\n\\n\\t\\t\\t<div class=\\\"app-discover-carousel__button-wrapper\\\">\\n\\t\\t\\t\\t<NcButton class=\\\"app-discover-carousel__button app-discover-carousel__button--next\\\"\\n\\t\\t\\t\\t\\ttype=\\\"tertiary-no-background\\\"\\n\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Next slide')\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"!hasNext\\\"\\n\\t\\t\\t\\t\\t@click=\\\"currentIndex += 1\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiChevronRight\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"app-discover-carousel__tabs\\\" role=\\\"tablist\\\" :aria-label=\\\"t('settings', 'Choose slide to display')\\\">\\n\\t\\t\\t<NcButton v-for=\\\"index of content.length\\\"\\n\\t\\t\\t\\t:id=\\\"`${internalId}-tab-${index}`\\\"\\n\\t\\t\\t\\t:key=\\\"index\\\"\\n\\t\\t\\t\\t:aria-label=\\\"t('settings', '{index} of {total}', { index, total: content.length })\\\"\\n\\t\\t\\t\\t:aria-controls=\\\"`${internalId}-tabpanel-${index}`\\\"\\n\\t\\t\\t\\t:aria-selected=\\\"`${currentIndex === (index - 1)}`\\\"\\n\\t\\t\\t\\trole=\\\"tab\\\"\\n\\t\\t\\t\\ttype=\\\"tertiary-no-background\\\"\\n\\t\\t\\t\\t@click=\\\"currentIndex = index - 1\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"currentIndex === (index - 1) ? mdiCircleSlice8 : mdiCircleOutline\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcButton>\\n\\t\\t</div>\\n\\t</section>\\n</template>\\n\\n<script lang=\\\"ts\\\">\\nimport type { PropType } from 'vue'\\nimport type { IAppDiscoverCarousel } from '../../constants/AppDiscoverTypes.ts'\\n\\nimport { mdiChevronLeft, mdiChevronRight, mdiCircleOutline, mdiCircleSlice8 } from '@mdi/js'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue'\\nimport { commonAppDiscoverProps } from './common.ts'\\nimport { useLocalizedValue } from '../../composables/useGetLocalizedValue.ts'\\n\\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport PostType from './PostType.vue'\\n\\nexport default defineComponent({\\n\\tname: 'CarouselType',\\n\\n\\tcomponents: {\\n\\t\\tNcButton,\\n\\t\\tNcIconSvgWrapper,\\n\\t\\tPostType,\\n\\t},\\n\\n\\tprops: {\\n\\t\\t...commonAppDiscoverProps,\\n\\n\\t\\t/**\\n\\t\\t * The content of the carousel\\n\\t\\t */\\n\\t\\tcontent: {\\n\\t\\t\\ttype: Array as PropType<IAppDiscoverCarousel['content']>,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\n\\tsetup(props) {\\n\\t\\tconst translatedHeadline = useLocalizedValue(computed(() => props.headline))\\n\\n\\t\\tconst currentIndex = ref(Math.min(1, props.content.length - 1))\\n\\t\\tconst shownElement = ref(props.content[currentIndex.value])\\n\\t\\tconst hasNext = computed(() => currentIndex.value < (props.content.length - 1))\\n\\t\\tconst hasPrevious = computed(() => currentIndex.value > 0)\\n\\n\\t\\tconst internalId = computed(() => props.id ?? (Math.random() + 1).toString(36).substring(7))\\n\\t\\tconst headingId = computed(() => `${internalId.value}-h`)\\n\\n\\t\\tconst transitionName = ref('slide-in')\\n\\t\\twatch(() => currentIndex.value, (o, n) => {\\n\\t\\t\\tif (o < n) {\\n\\t\\t\\t\\ttransitionName.value = 'slide-in'\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttransitionName.value = 'slide-out'\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Wait next tick\\n\\t\\t\\tnextTick(() => {\\n\\t\\t\\t\\tshownElement.value = props.content[currentIndex.value]\\n\\t\\t\\t})\\n\\t\\t})\\n\\n\\t\\treturn {\\n\\t\\t\\tt,\\n\\t\\t\\tinternalId,\\n\\t\\t\\theadingId,\\n\\n\\t\\t\\thasNext,\\n\\t\\t\\thasPrevious,\\n\\t\\t\\tcurrentIndex,\\n\\t\\t\\tshownElement,\\n\\n\\t\\t\\ttransitionName,\\n\\n\\t\\t\\ttranslatedHeadline,\\n\\n\\t\\t\\tmdiChevronLeft,\\n\\t\\t\\tmdiChevronRight,\\n\\t\\t\\tmdiCircleOutline,\\n\\t\\t\\tmdiCircleSlice8,\\n\\t\\t}\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang=\\\"scss\\\">\\nh3 {\\n\\tfont-size: 24px;\\n\\tfont-weight: 600;\\n\\tmargin-block: 0 1em;\\n}\\n\\n.app-discover-carousel {\\n\\t&__wrapper {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__button {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tposition: absolute;\\n\\t\\ttop: calc(50% - 22px); // 50% minus half of button height\\n\\n\\t\\t&-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// See padding of discover section\\n\\t\\t&--next {\\n\\t\\t\\tright: -54px;\\n\\t\\t}\\n\\t\\t&--previous {\\n\\t\\t\\tleft: -54px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__tabs {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t> * {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n</style>\\n\\n<style>\\n.slide-in-enter-active,\\n.slide-in-leave-active,\\n.slide-out-enter-active,\\n.slide-out-leave-active {\\n transition: all .4s ease-out;\\n}\\n\\n.slide-in-leave-to,\\n.slide-out-enter {\\n opacity: 0;\\n transform: translateX(50%);\\n}\\n\\n.slide-in-enter,\\n.slide-out-leave-to {\\n opacity: 0;\\n transform: translateX(-50%);\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('section',{attrs:{\"aria-roledescription\":_vm.t('settings', 'Carousel'),\"aria-labelledby\":_vm.headingId ? `${_vm.headingId}` : undefined}},[(_vm.headline)?_c('h3',{attrs:{\"id\":_vm.headingId}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.translatedHeadline)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-carousel__wrapper\"},[_c('div',{staticClass:\"app-discover-carousel__button-wrapper\"},[_c('NcButton',{staticClass:\"app-discover-carousel__button app-discover-carousel__button--previous\",attrs:{\"type\":\"tertiary-no-background\",\"aria-label\":_vm.t('settings', 'Previous slide'),\"disabled\":!_vm.hasPrevious},on:{\"click\":function($event){_vm.currentIndex -= 1}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiChevronLeft}})]},proxy:true}])})],1),_vm._v(\" \"),_c('Transition',{attrs:{\"name\":_vm.transitionName,\"mode\":\"out-in\"}},[_c('PostType',_vm._b({key:_vm.shownElement.id ?? _vm.currentIndex,attrs:{\"aria-labelledby\":`${_vm.internalId}-tab-${_vm.currentIndex}`,\"dom-id\":`${_vm.internalId}-tabpanel-${_vm.currentIndex}`,\"inline\":\"\",\"role\":\"tabpanel\"}},'PostType',_vm.shownElement,false))],1),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-carousel__button-wrapper\"},[_c('NcButton',{staticClass:\"app-discover-carousel__button app-discover-carousel__button--next\",attrs:{\"type\":\"tertiary-no-background\",\"aria-label\":_vm.t('settings', 'Next slide'),\"disabled\":!_vm.hasNext},on:{\"click\":function($event){_vm.currentIndex += 1}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiChevronRight}})]},proxy:true}])})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-carousel__tabs\",attrs:{\"role\":\"tablist\",\"aria-label\":_vm.t('settings', 'Choose slide to display')}},_vm._l((_vm.content.length),function(index){return _c('NcButton',{key:index,attrs:{\"id\":`${_vm.internalId}-tab-${index}`,\"aria-label\":_vm.t('settings', '{index} of {total}', { index, total: _vm.content.length }),\"aria-controls\":`${_vm.internalId}-tabpanel-${index}`,\"aria-selected\":`${_vm.currentIndex === (index - 1)}`,\"role\":\"tab\",\"type\":\"tertiary-no-background\"},on:{\"click\":function($event){_vm.currentIndex = index - 1}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.currentIndex === (index - 1) ? _vm.mdiCircleSlice8 : _vm.mdiCircleOutline}})]},proxy:true}],null,true)})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=0&id=ee726cc0&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=0&id=ee726cc0&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=1&id=ee726cc0&prod&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=1&id=ee726cc0&prod&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CarouselType.vue?vue&type=template&id=ee726cc0&scoped=true\"\nimport script from \"./CarouselType.vue?vue&type=script&lang=ts\"\nexport * from \"./CarouselType.vue?vue&type=script&lang=ts\"\nimport style0 from \"./CarouselType.vue?vue&type=style&index=0&id=ee726cc0&prod&scoped=true&lang=scss\"\nimport style1 from \"./CarouselType.vue?vue&type=style&index=1&id=ee726cc0&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ee726cc0\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","defineComponent","name","components","NcButton","NcIconSvgWrapper","PostType","props","commonAppDiscoverProps","content","type","Array","required","setup","translatedHeadline","useLocalizedValue","computed","headline","currentIndex","ref","Math","min","length","shownElement","value","hasNext","hasPrevious","internalId","_props$id","random","toString","substring","headingId","concat","transitionName","watch","o","n","nextTick","t","mdiChevronLeft","mdiChevronRight","mdiCircleOutline","mdiCircleSlice8","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm$shownElement$id","_vm","this","_c","_self","_setupProxy","attrs","undefined","_v","_s","_e","staticClass","on","$event","scopedSlots","_u","key","fn","proxy","_b","_l","index","total"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/8484-8484.js b/dist/8484-8484.js deleted file mode 100644 index 7aeffe63365..00000000000 --- a/dist/8484-8484.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 8484-8484.js.LICENSE.txt */ -"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8484,8753],{77796:(t,e,n)=>{n.d(e,{K:()=>r});const a=["post","showcase","carousel"],r={type:{type:String,required:!0,validator:t=>"string"==typeof t&&a.includes(t)},id:{type:String,required:!0},date:{type:Number,required:!1,default:void 0},expiryDate:{type:Number,required:!1,default:void 0},headline:{type:Object,required:!1,default:()=>null},link:{type:String,required:!1,default:()=>null}}},74640:(t,e,n)=>{n.d(e,{O:()=>o});var a=n(53334),r=n(85471);const o=t=>{const e=(0,a.Z0)();return(0,r.EW)((()=>null!=t&&t.value?((t,e)=>{var n,a,r;return null!==(n=null!==(a=null!==(r=t[e])&&void 0!==r?r:t[e.split("_")[0]])&&void 0!==a?a:t.en)&&void 0!==n?n:null})(t.value,e):null))}},26046:(t,e,n)=>{n.d(e,{A:()=>s});var a=n(71354),r=n.n(a),o=n(76314),i=n.n(o)()(r());i.push([t.id,"h3[data-v-bbc71512]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-carousel__wrapper[data-v-bbc71512]{display:flex}.app-discover-carousel__button[data-v-bbc71512]{color:var(--color-text-maxcontrast);position:absolute;top:calc(50% - 22px)}.app-discover-carousel__button-wrapper[data-v-bbc71512]{position:relative}.app-discover-carousel__button--next[data-v-bbc71512]{right:-54px}.app-discover-carousel__button--previous[data-v-bbc71512]{left:-54px}.app-discover-carousel__tabs[data-v-bbc71512]{display:flex;flex-direction:row;justify-content:center}.app-discover-carousel__tabs>*[data-v-bbc71512]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue"],names:[],mappings:"AACA,oBACC,cAAA,CACA,eAAA,CACA,kBAAA,CAIA,iDACC,YAAA,CAGD,gDACC,mCAAA,CACA,iBAAA,CACA,oBAAA,CAEA,wDACC,iBAAA,CAID,sDACC,WAAA,CAED,0DACC,UAAA,CAIF,8CACC,YAAA,CACA,kBAAA,CACA,sBAAA,CAEA,gDACC,mCAAA",sourcesContent:["\nh3 {\n\tfont-size: 24px;\n\tfont-weight: 600;\n\tmargin-block: 0 1em;\n}\n\n.app-discover-carousel {\n\t&__wrapper {\n\t\tdisplay: flex;\n\t}\n\n\t&__button {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tposition: absolute;\n\t\ttop: calc(50% - 22px); // 50% minus half of button height\n\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// See padding of discover section\n\t\t&--next {\n\t\t\tright: -54px;\n\t\t}\n\t\t&--previous {\n\t\t\tleft: -54px;\n\t\t}\n\t}\n\n\t&__tabs {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\n\t\t> * {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=i},56336:(t,e,n)=>{n.d(e,{A:()=>s});var a=n(71354),r=n.n(a),o=n(76314),i=n.n(o)()(r());i.push([t.id,".app-discover-post[data-v-24eed252]{width:100%;background-color:var(--color-primary-element-light);border-radius:var(--border-radius-rounded);display:flex;flex-direction:row}.app-discover-post--reverse[data-v-24eed252]{flex-direction:row-reverse}.app-discover-post h3[data-v-24eed252],.app-discover-post h4[data-v-24eed252]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-post__text[data-v-24eed252]{display:block;padding:var(--border-radius-rounded);width:100%}.app-discover-post__media[data-v-24eed252]{display:block;overflow:hidden;max-height:300px;max-width:450px;border-radius:var(--border-radius-rounded)}.app-discover-post__media--fullwidth[data-v-24eed252]{max-width:unset;max-height:unset}.app-discover-post__media--end[data-v-24eed252]{border-end-start-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-end-end-radius:0;border-start-end-radius:0}.app-discover-post__media img[data-v-24eed252],.app-discover-post__media-element[data-v-24eed252]{height:100%;width:100%;object-fit:cover;object-position:center}.app-discover-post__play-icon[data-v-24eed252]{position:absolute;top:-46px;right:-46px}.app-discover-post__play-icon-wrapper[data-v-24eed252]{position:relative;top:-50%;left:-50%}@media only screen and (max-width: 699px){.app-discover-post[data-v-24eed252]{flex-direction:column}.app-discover-post--reverse[data-v-24eed252]{flex-direction:column-reverse}.app-discover-post__media[data-v-24eed252]{min-width:100%}.app-discover-post__media--end[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-start-end-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-end-end-radius:0;border-end-start-radius:0}}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/PostType.vue"],names:[],mappings:"AACA,oCACC,UAAA,CACA,mDAAA,CACA,0CAAA,CAEA,YAAA,CACA,kBAAA,CACA,6CACC,0BAAA,CAGD,8EACC,cAAA,CACA,eAAA,CACA,kBAAA,CAGD,0CACC,aAAA,CACA,oCAAA,CACA,UAAA,CAGD,2CACC,aAAA,CACA,eAAA,CAEA,gBAAA,CACA,eAAA,CACA,0CAAA,CAEA,sDACC,eAAA,CACA,gBAAA,CAGD,gDACC,yBAAA,CACA,2BAAA,CAGD,kDACC,uBAAA,CACA,yBAAA,CAGD,kGACC,WAAA,CACA,UAAA,CACA,gBAAA,CACA,sBAAA,CAIF,+CAOC,iBAAA,CACA,SAAA,CACA,WAAA,CARA,uDACC,iBAAA,CACA,QAAA,CACA,SAAA,CAUH,0CACC,oCACC,qBAAA,CAEA,6CACC,6BAAA,CAGD,2CACC,cAAA,CAEA,gDACC,0CAAA,CACA,yBAAA,CACA,2BAAA,CAGD,kDACC,0CAAA,CACA,uBAAA,CACA,yBAAA,CAAA",sourcesContent:["\n.app-discover-post {\n\twidth: 100%;\n\tbackground-color: var(--color-primary-element-light);\n\tborder-radius: var(--border-radius-rounded);\n\n\tdisplay: flex;\n\tflex-direction: row;\n\t&--reverse {\n\t\tflex-direction: row-reverse;\n\t}\n\n\th3, h4 {\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tmargin-block: 0 1em;\n\t}\n\n\t&__text {\n\t\tdisplay: block;\n\t\tpadding: var(--border-radius-rounded);\n\t\twidth: 100%;\n\t}\n\n\t&__media {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\n\t\tmax-height: 300px;\n\t\tmax-width: 450px;\n\t\tborder-radius: var(--border-radius-rounded);\n\n\t\t&--fullwidth {\n\t\t\tmax-width: unset;\n\t\t\tmax-height: unset;\n\t\t}\n\n\t\t&--end {\n\t\t\tborder-end-start-radius: 0;\n\t\t\tborder-start-start-radius: 0;\n\t\t}\n\n\t\t&--start {\n\t\t\tborder-end-end-radius: 0;\n\t\t\tborder-start-end-radius: 0;\n\t\t}\n\n\t\timg, &-element {\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tobject-fit: cover;\n\t\t\tobject-position: center;\n\t\t}\n\t}\n\n\t&__play-icon {\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t\ttop: -50%;\n\t\t\tleft: -50%;\n\t\t}\n\n\t\tposition: absolute;\n\t\ttop: -46px; // half of the icon height\n\t\tright: -46px; // half of the icon width\n\t}\n}\n\n// Ensure section works on mobile devices\n@media only screen and (max-width: 699px) {\n\t.app-discover-post {\n\t\tflex-direction: column;\n\n\t\t&--reverse {\n\t\t\tflex-direction: column-reverse;\n\t\t}\n\n\t\t&__media {\n\t\t\tmin-width: 100%;\n\n\t\t\t&--end {\n\t\t\t\tborder-radius: var(--border-radius-rounded);\n\t\t\t\tborder-start-end-radius: 0;\n\t\t\t\tborder-start-start-radius: 0;\n\t\t\t}\n\n\t\t\t&--start {\n\t\t\t\tborder-radius: var(--border-radius-rounded);\n\t\t\t\tborder-end-end-radius: 0;\n\t\t\t\tborder-end-start-radius: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const s=i},43591:(t,e,n)=>{n.d(e,{A:()=>s});var a=n(71354),r=n.n(a),o=n(76314),i=n.n(o)()(r());i.push([t.id,"\n.slide-in-enter-active,\n.slide-in-leave-active,\n.slide-out-enter-active,\n.slide-out-leave-active {\n transition: all .4s ease-out;\n}\n.slide-in-leave-to,\n.slide-out-enter {\n opacity: 0;\n transform: translateX(50%);\n}\n.slide-in-enter,\n.slide-out-leave-to {\n opacity: 0;\n transform: translateX(-50%);\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue"],names:[],mappings:";AAuLA;;;;EAIA,4BAAA;AACA;AAEA;;EAEA,UAAA;EACA,0BAAA;AACA;AAEA;;EAEA,UAAA;EACA,2BAAA;AACA",sourcesContent:['<template>\n\t<section :aria-roledescription="t(\'settings\', \'Carousel\')" :aria-labelledby="headingId ? `${headingId}` : undefined">\n\t\t<h3 v-if="headline" :id="headingId">\n\t\t\t{{ translatedHeadline }}\n\t\t</h3>\n\t\t<div class="app-discover-carousel__wrapper">\n\t\t\t<div class="app-discover-carousel__button-wrapper">\n\t\t\t\t<NcButton class="app-discover-carousel__button app-discover-carousel__button--previous"\n\t\t\t\t\ttype="tertiary-no-background"\n\t\t\t\t\t:aria-label="t(\'settings\', \'Previous slide\')"\n\t\t\t\t\t:disabled="!hasPrevious"\n\t\t\t\t\t@click="currentIndex -= 1">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="mdiChevronLeft" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\n\t\t\t<Transition :name="transitionName" mode="out-in">\n\t\t\t\t<PostType v-bind="shownElement"\n\t\t\t\t\t:key="shownElement.id ?? currentIndex"\n\t\t\t\t\t:aria-labelledby="`${internalId}-tab-${currentIndex}`"\n\t\t\t\t\t:dom-id="`${internalId}-tabpanel-${currentIndex}`"\n\t\t\t\t\tinline\n\t\t\t\t\trole="tabpanel" />\n\t\t\t</Transition>\n\n\t\t\t<div class="app-discover-carousel__button-wrapper">\n\t\t\t\t<NcButton class="app-discover-carousel__button app-discover-carousel__button--next"\n\t\t\t\t\ttype="tertiary-no-background"\n\t\t\t\t\t:aria-label="t(\'settings\', \'Next slide\')"\n\t\t\t\t\t:disabled="!hasNext"\n\t\t\t\t\t@click="currentIndex += 1">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="mdiChevronRight" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="app-discover-carousel__tabs" role="tablist" :aria-label="t(\'settings\', \'Choose slide to display\')">\n\t\t\t<NcButton v-for="index of content.length"\n\t\t\t\t:id="`${internalId}-tab-${index}`"\n\t\t\t\t:key="index"\n\t\t\t\t:aria-label="t(\'settings\', \'{index} of {total}\', { index, total: content.length })"\n\t\t\t\t:aria-controls="`${internalId}-tabpanel-${index}`"\n\t\t\t\t:aria-selected="`${currentIndex === (index - 1)}`"\n\t\t\t\trole="tab"\n\t\t\t\ttype="tertiary-no-background"\n\t\t\t\t@click="currentIndex = index - 1">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="currentIndex === (index - 1) ? mdiCircleSlice8 : mdiCircleOutline" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</div>\n\t</section>\n</template>\n\n<script lang="ts">\nimport type { PropType } from \'vue\'\nimport type { IAppDiscoverCarousel } from \'../../constants/AppDiscoverTypes.ts\'\n\nimport { mdiChevronLeft, mdiChevronRight, mdiCircleOutline, mdiCircleSlice8 } from \'@mdi/js\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { computed, defineComponent, nextTick, ref, watch } from \'vue\'\nimport { commonAppDiscoverProps } from \'./common.ts\'\nimport { useLocalizedValue } from \'../../composables/useGetLocalizedValue.ts\'\n\nimport NcButton from \'@nextcloud/vue/dist/Components/NcButton.js\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport PostType from \'./PostType.vue\'\n\nexport default defineComponent({\n\tname: \'CarouselType\',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tNcIconSvgWrapper,\n\t\tPostType,\n\t},\n\n\tprops: {\n\t\t...commonAppDiscoverProps,\n\n\t\t/**\n\t\t * The content of the carousel\n\t\t */\n\t\tcontent: {\n\t\t\ttype: Array as PropType<IAppDiscoverCarousel[\'content\']>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup(props) {\n\t\tconst translatedHeadline = useLocalizedValue(computed(() => props.headline))\n\n\t\tconst currentIndex = ref(Math.min(1, props.content.length - 1))\n\t\tconst shownElement = ref(props.content[currentIndex.value])\n\t\tconst hasNext = computed(() => currentIndex.value < (props.content.length - 1))\n\t\tconst hasPrevious = computed(() => currentIndex.value > 0)\n\n\t\tconst internalId = computed(() => props.id ?? (Math.random() + 1).toString(36).substring(7))\n\t\tconst headingId = computed(() => `${internalId.value}-h`)\n\n\t\tconst transitionName = ref(\'slide-out\')\n\t\twatch(() => currentIndex.value, (o, n) => {\n\t\t\tif (o < n) {\n\t\t\t\ttransitionName.value = \'slide-out\'\n\t\t\t} else {\n\t\t\t\ttransitionName.value = \'slide-in\'\n\t\t\t}\n\n\t\t\t// Wait next tick\n\t\t\tnextTick(() => {\n\t\t\t\tshownElement.value = props.content[currentIndex.value]\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tt,\n\t\t\tinternalId,\n\t\t\theadingId,\n\n\t\t\thasNext,\n\t\t\thasPrevious,\n\t\t\tcurrentIndex,\n\t\t\tshownElement,\n\n\t\t\ttransitionName,\n\n\t\t\ttranslatedHeadline,\n\n\t\t\tmdiChevronLeft,\n\t\t\tmdiChevronRight,\n\t\t\tmdiCircleOutline,\n\t\t\tmdiCircleSlice8,\n\t\t}\n\t},\n})\n<\/script>\n\n<style scoped lang="scss">\nh3 {\n\tfont-size: 24px;\n\tfont-weight: 600;\n\tmargin-block: 0 1em;\n}\n\n.app-discover-carousel {\n\t&__wrapper {\n\t\tdisplay: flex;\n\t}\n\n\t&__button {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tposition: absolute;\n\t\ttop: calc(50% - 22px); // 50% minus half of button height\n\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t}\n\n\t\t// See padding of discover section\n\t\t&--next {\n\t\t\tright: -54px;\n\t\t}\n\t\t&--previous {\n\t\t\tleft: -54px;\n\t\t}\n\t}\n\n\t&__tabs {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: center;\n\n\t\t> * {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n}\n</style>\n\n<style>\n.slide-in-enter-active,\n.slide-in-leave-active,\n.slide-out-enter-active,\n.slide-out-leave-active {\n transition: all .4s ease-out;\n}\n\n.slide-in-leave-to,\n.slide-out-enter {\n opacity: 0;\n transform: translateX(50%);\n}\n\n.slide-in-enter,\n.slide-out-leave-to {\n opacity: 0;\n transform: translateX(-50%);\n}\n</style>\n'],sourceRoot:""}]);const s=i},38484:(t,e,n)=>{n.r(e),n.d(e,{default:()=>N});var a=n(9165),r=n(53334),o=n(85471),i=n(77796),s=n(74640),d=n(9518),l=n(6695),c=n(8753);const p=(0,o.pM)({name:"CarouselType",components:{NcButton:d.A,NcIconSvgWrapper:l.A,PostType:c.default},props:{...i.K,content:{type:Array,required:!0}},setup(t){const e=(0,s.O)((0,o.EW)((()=>t.headline))),n=(0,o.KR)(Math.min(1,t.content.length-1)),i=(0,o.KR)(t.content[n.value]),d=(0,o.EW)((()=>n.value<t.content.length-1)),l=(0,o.EW)((()=>n.value>0)),c=(0,o.EW)((()=>{var e;return null!==(e=t.id)&&void 0!==e?e:(Math.random()+1).toString(36).substring(7)})),p=(0,o.EW)((()=>"".concat(c.value,"-h"))),u=(0,o.KR)("slide-out");return(0,o.wB)((()=>n.value),((e,a)=>{u.value=e<a?"slide-out":"slide-in",(0,o.dY)((()=>{i.value=t.content[n.value]}))})),{t:r.Tl,internalId:c,headingId:p,hasNext:d,hasPrevious:l,currentIndex:n,shownElement:i,transitionName:u,translatedHeadline:e,mdiChevronLeft:a.LyG,mdiChevronRight:a.mI8,mdiCircleOutline:a.h$D,mdiCircleSlice8:a.xSL}}});var u=n(85072),A=n.n(u),v=n(97825),m=n.n(v),C=n(77659),h=n.n(C),b=n(55056),_=n.n(b),x=n(10540),g=n.n(x),f=n(41113),y=n.n(f),I=n(26046),w={};w.styleTagTransform=y(),w.setAttributes=_(),w.insert=h().bind(null,"head"),w.domAPI=m(),w.insertStyleElement=g(),A()(I.A,w),I.A&&I.A.locals&&I.A.locals;var k=n(43591),E={};E.styleTagTransform=y(),E.setAttributes=_(),E.insert=h().bind(null,"head"),E.domAPI=m(),E.insertStyleElement=g(),A()(k.A,E),k.A&&k.A.locals&&k.A.locals;const N=(0,n(14486).A)(p,(function(){var t,e=this,n=e._self._c;return e._self._setupProxy,n("section",{attrs:{"aria-roledescription":e.t("settings","Carousel"),"aria-labelledby":e.headingId?"".concat(e.headingId):void 0}},[e.headline?n("h3",{attrs:{id:e.headingId}},[e._v("\n\t\t"+e._s(e.translatedHeadline)+"\n\t")]):e._e(),e._v(" "),n("div",{staticClass:"app-discover-carousel__wrapper"},[n("div",{staticClass:"app-discover-carousel__button-wrapper"},[n("NcButton",{staticClass:"app-discover-carousel__button app-discover-carousel__button--previous",attrs:{type:"tertiary-no-background","aria-label":e.t("settings","Previous slide"),disabled:!e.hasPrevious},on:{click:function(t){e.currentIndex-=1}},scopedSlots:e._u([{key:"icon",fn:function(){return[n("NcIconSvgWrapper",{attrs:{path:e.mdiChevronLeft}})]},proxy:!0}])})],1),e._v(" "),n("Transition",{attrs:{name:e.transitionName,mode:"out-in"}},[n("PostType",e._b({key:null!==(t=e.shownElement.id)&&void 0!==t?t:e.currentIndex,attrs:{"aria-labelledby":"".concat(e.internalId,"-tab-").concat(e.currentIndex),"dom-id":"".concat(e.internalId,"-tabpanel-").concat(e.currentIndex),inline:"",role:"tabpanel"}},"PostType",e.shownElement,!1))],1),e._v(" "),n("div",{staticClass:"app-discover-carousel__button-wrapper"},[n("NcButton",{staticClass:"app-discover-carousel__button app-discover-carousel__button--next",attrs:{type:"tertiary-no-background","aria-label":e.t("settings","Next slide"),disabled:!e.hasNext},on:{click:function(t){e.currentIndex+=1}},scopedSlots:e._u([{key:"icon",fn:function(){return[n("NcIconSvgWrapper",{attrs:{path:e.mdiChevronRight}})]},proxy:!0}])})],1)],1),e._v(" "),n("div",{staticClass:"app-discover-carousel__tabs",attrs:{role:"tablist","aria-label":e.t("settings","Choose slide to display")}},e._l(e.content.length,(function(t){return n("NcButton",{key:t,attrs:{id:"".concat(e.internalId,"-tab-").concat(t),"aria-label":e.t("settings","{index} of {total}",{index:t,total:e.content.length}),"aria-controls":"".concat(e.internalId,"-tabpanel-").concat(t),"aria-selected":"".concat(e.currentIndex===t-1),role:"tab",type:"tertiary-no-background"},on:{click:function(n){e.currentIndex=t-1}},scopedSlots:e._u([{key:"icon",fn:function(){return[n("NcIconSvgWrapper",{attrs:{path:e.currentIndex===t-1?e.mdiCircleSlice8:e.mdiCircleOutline}})]},proxy:!0}],null,!0)})})),1)])}),[],!1,null,"bbc71512",null).exports},8753:(t,e,n)=>{n.r(e),n.d(e,{default:()=>w});var a=n(9165),r=n(99498),o=n(13073),i=n(85471),s=n(77796),d=n(74640),l=n(6695);const c=(0,i.pM)({components:{NcIconSvgWrapper:l.A},props:{...s.K,text:{type:Object,required:!1,default:()=>null},media:{type:Object,required:!1,default:()=>null},inline:{type:Boolean,required:!1,default:!1},domId:{type:String,required:!1,default:null}},setup(t){const e=(0,d.O)((0,i.EW)((()=>t.headline))),n=(0,d.O)((0,i.EW)((()=>t.text))),s=(0,d.O)((0,i.EW)((()=>{var e;return null===(e=t.media)||void 0===e?void 0:e.content}))),l=(0,i.EW)((()=>null!==s.value?[s.value.src].flat():void 0)),c=(0,i.EW)((()=>{var t,e;return null!==(t=null===(e=s.value)||void 0===e?void 0:e.alt)&&void 0!==t?t:""})),p=(0,i.EW)((()=>{var t;return!0===(null==l||null===(t=l.value)||void 0===t?void 0:t[0].mime.startsWith("image/"))})),u=(0,i.EW)((()=>!e.value&&!n.value)),A=(0,i.EW)((()=>{var e,n;return null!==(e=null===(n=s.value)||void 0===n?void 0:n.link)&&void 0!==e?e:t.link})),v=(0,i.KR)(!1),m=(0,i.EW)((()=>{var t;return(null===(t=s.value)||void 0===t?void 0:t.link)&&v.value})),C=(0,i.KR)(),h=(0,o.ITo)(C,{threshold:.3});return(0,i.nT)((()=>{if(!p.value&&C.value){const t=C.value;h.value?(t.muted=!0,t.play()):(t.pause(),t.ended&&(t.currentTime=0,v.value=!1))}})),{mdiPlayCircleOutline:a.Nwy,translatedText:n,translatedHeadline:e,mediaElement:C,mediaSources:l,mediaAlt:c,mediaLink:A,hasPlaybackEnded:v,showPlayVideo:m,isFullWidth:u,isImage:p,generatePrivacyUrl:t=>t.startsWith("/")?t:(0,r.Jv)("/settings/api/apps/media?fileName={fileName}",{fileName:t})}}});var p=n(85072),u=n.n(p),A=n(97825),v=n.n(A),m=n(77659),C=n.n(m),h=n(55056),b=n.n(h),_=n(10540),x=n.n(_),g=n(41113),f=n.n(g),y=n(56336),I={};I.styleTagTransform=f(),I.setAttributes=b(),I.insert=C().bind(null,"head"),I.domAPI=v(),I.insertStyleElement=x(),u()(y.A,I),y.A&&y.A.locals&&y.A.locals;const w=(0,n(14486).A)(c,(function(){var t,e,n=this,a=n._self._c;return n._self._setupProxy,a("article",{staticClass:"app-discover-post",class:{"app-discover-post--reverse":n.media&&"start"===n.media.alignment},attrs:{id:n.domId}},[n.headline||n.text?a(n.link?"a":"div",{tag:"component",staticClass:"app-discover-post__text",attrs:{href:n.link,target:n.link?"_blank":void 0}},[a(n.inline?"h4":"h3",{tag:"component"},[n._v(n._s(n.translatedHeadline))]),n._v(" "),a("p",[n._v(n._s(n.translatedText))])],1):n._e(),n._v(" "),n.mediaSources?a(n.mediaLink?"a":"div",{tag:"component",staticClass:"app-discover-post__media",class:{"app-discover-post__media--fullwidth":n.isFullWidth,"app-discover-post__media--start":"start"===(null===(t=n.media)||void 0===t?void 0:t.alignment),"app-discover-post__media--end":"end"===(null===(e=n.media)||void 0===e?void 0:e.alignment)},attrs:{href:n.mediaLink,target:n.mediaLink?"_blank":void 0}},[a(n.isImage?"picture":"video",{ref:"mediaElement",tag:"component",staticClass:"app-discover-post__media-element",attrs:{muted:!n.isImage,playsinline:!n.isImage,preload:!n.isImage&&"auto"},on:{ended:function(t){n.hasPlaybackEnded=!0}}},[n._l(n.mediaSources,(function(t){return a("source",{key:t.src,attrs:{src:n.isImage?void 0:n.generatePrivacyUrl(t.src),srcset:n.isImage?n.generatePrivacyUrl(t.src):void 0,type:t.mime}})})),n._v(" "),n.isImage?a("img",{attrs:{src:n.generatePrivacyUrl(n.mediaSources[0].src),alt:n.mediaAlt}}):n._e()],2),n._v(" "),a("div",{staticClass:"app-discover-post__play-icon-wrapper"},[!n.isImage&&n.showPlayVideo?a("NcIconSvgWrapper",{staticClass:"app-discover-post__play-icon",attrs:{path:n.mdiPlayCircleOutline,size:92}}):n._e()],1)],1):n._e()],1)}),[],!1,null,"24eed252",null).exports}}]); -//# sourceMappingURL=8484-8484.js.map?v=938301f58da67708d5b8
\ No newline at end of file diff --git a/dist/8484-8484.js.map b/dist/8484-8484.js.map deleted file mode 100644 index d40c6f89780..00000000000 --- a/dist/8484-8484.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"8484-8484.js?v=938301f58da67708d5b8","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/constants/AppDiscoverTypes.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/common.ts","webpack:///nextcloud/apps/settings/src/composables/useGetLocalizedValue.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue?vue&type=style&index=0&id=bbc71512&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue?vue&type=style&index=1&id=bbc71512&prod&lang=css","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/CarouselType.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/CarouselType.vue?3213","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/CarouselType.vue?3162","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/CarouselType.vue?982a","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/PostType.vue?1d19","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/PostType.vue?bdb8"],"sourcesContent":["/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/**\n * Currently known types of app discover section elements\n */\nexport const APP_DISCOVER_KNOWN_TYPES = ['post', 'showcase', 'carousel'];\n","import { APP_DISCOVER_KNOWN_TYPES } from '../../constants/AppDiscoverTypes.ts';\n/**\n * Common Props for all app discover types\n */\nexport const commonAppDiscoverProps = {\n type: {\n type: String,\n required: true,\n validator: (v) => typeof v === 'string' && APP_DISCOVER_KNOWN_TYPES.includes(v),\n },\n id: {\n type: String,\n required: true,\n },\n date: {\n type: Number,\n required: false,\n default: undefined,\n },\n expiryDate: {\n type: Number,\n required: false,\n default: undefined,\n },\n headline: {\n type: Object,\n required: false,\n default: () => null,\n },\n link: {\n type: String,\n required: false,\n default: () => null,\n },\n};\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLanguage } from '@nextcloud/l10n';\nimport { computed } from 'vue';\n/**\n * Helper to get the localized value for the current users language\n * @param dict The dictionary to get the value from\n * @param language The language to use\n */\nconst getLocalizedValue = (dict, language) => dict[language] ?? dict[language.split('_')[0]] ?? dict.en ?? null;\n/**\n * Get the localized value of the dictionary provided\n * @param dict Dictionary\n * @return String or null if invalid dictionary\n */\nexport const useLocalizedValue = (dict) => {\n /**\n * Language of the current user\n */\n const language = getLanguage();\n return computed(() => !dict?.value ? null : getLocalizedValue(dict.value, language));\n};\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `h3[data-v-bbc71512]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-carousel__wrapper[data-v-bbc71512]{display:flex}.app-discover-carousel__button[data-v-bbc71512]{color:var(--color-text-maxcontrast);position:absolute;top:calc(50% - 22px)}.app-discover-carousel__button-wrapper[data-v-bbc71512]{position:relative}.app-discover-carousel__button--next[data-v-bbc71512]{right:-54px}.app-discover-carousel__button--previous[data-v-bbc71512]{left:-54px}.app-discover-carousel__tabs[data-v-bbc71512]{display:flex;flex-direction:row;justify-content:center}.app-discover-carousel__tabs>*[data-v-bbc71512]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue\"],\"names\":[],\"mappings\":\"AACA,oBACC,cAAA,CACA,eAAA,CACA,kBAAA,CAIA,iDACC,YAAA,CAGD,gDACC,mCAAA,CACA,iBAAA,CACA,oBAAA,CAEA,wDACC,iBAAA,CAID,sDACC,WAAA,CAED,0DACC,UAAA,CAIF,8CACC,YAAA,CACA,kBAAA,CACA,sBAAA,CAEA,gDACC,mCAAA\",\"sourcesContent\":[\"\\nh3 {\\n\\tfont-size: 24px;\\n\\tfont-weight: 600;\\n\\tmargin-block: 0 1em;\\n}\\n\\n.app-discover-carousel {\\n\\t&__wrapper {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__button {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tposition: absolute;\\n\\t\\ttop: calc(50% - 22px); // 50% minus half of button height\\n\\n\\t\\t&-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// See padding of discover section\\n\\t\\t&--next {\\n\\t\\t\\tright: -54px;\\n\\t\\t}\\n\\t\\t&--previous {\\n\\t\\t\\tleft: -54px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__tabs {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t> * {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover-post[data-v-24eed252]{width:100%;background-color:var(--color-primary-element-light);border-radius:var(--border-radius-rounded);display:flex;flex-direction:row}.app-discover-post--reverse[data-v-24eed252]{flex-direction:row-reverse}.app-discover-post h3[data-v-24eed252],.app-discover-post h4[data-v-24eed252]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-post__text[data-v-24eed252]{display:block;padding:var(--border-radius-rounded);width:100%}.app-discover-post__media[data-v-24eed252]{display:block;overflow:hidden;max-height:300px;max-width:450px;border-radius:var(--border-radius-rounded)}.app-discover-post__media--fullwidth[data-v-24eed252]{max-width:unset;max-height:unset}.app-discover-post__media--end[data-v-24eed252]{border-end-start-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-end-end-radius:0;border-start-end-radius:0}.app-discover-post__media img[data-v-24eed252],.app-discover-post__media-element[data-v-24eed252]{height:100%;width:100%;object-fit:cover;object-position:center}.app-discover-post__play-icon[data-v-24eed252]{position:absolute;top:-46px;right:-46px}.app-discover-post__play-icon-wrapper[data-v-24eed252]{position:relative;top:-50%;left:-50%}@media only screen and (max-width: 699px){.app-discover-post[data-v-24eed252]{flex-direction:column}.app-discover-post--reverse[data-v-24eed252]{flex-direction:column-reverse}.app-discover-post__media[data-v-24eed252]{min-width:100%}.app-discover-post__media--end[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-start-end-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-end-end-radius:0;border-end-start-radius:0}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/PostType.vue\"],\"names\":[],\"mappings\":\"AACA,oCACC,UAAA,CACA,mDAAA,CACA,0CAAA,CAEA,YAAA,CACA,kBAAA,CACA,6CACC,0BAAA,CAGD,8EACC,cAAA,CACA,eAAA,CACA,kBAAA,CAGD,0CACC,aAAA,CACA,oCAAA,CACA,UAAA,CAGD,2CACC,aAAA,CACA,eAAA,CAEA,gBAAA,CACA,eAAA,CACA,0CAAA,CAEA,sDACC,eAAA,CACA,gBAAA,CAGD,gDACC,yBAAA,CACA,2BAAA,CAGD,kDACC,uBAAA,CACA,yBAAA,CAGD,kGACC,WAAA,CACA,UAAA,CACA,gBAAA,CACA,sBAAA,CAIF,+CAOC,iBAAA,CACA,SAAA,CACA,WAAA,CARA,uDACC,iBAAA,CACA,QAAA,CACA,SAAA,CAUH,0CACC,oCACC,qBAAA,CAEA,6CACC,6BAAA,CAGD,2CACC,cAAA,CAEA,gDACC,0CAAA,CACA,yBAAA,CACA,2BAAA,CAGD,kDACC,0CAAA,CACA,uBAAA,CACA,yBAAA,CAAA\",\"sourcesContent\":[\"\\n.app-discover-post {\\n\\twidth: 100%;\\n\\tbackground-color: var(--color-primary-element-light);\\n\\tborder-radius: var(--border-radius-rounded);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\t&--reverse {\\n\\t\\tflex-direction: row-reverse;\\n\\t}\\n\\n\\th3, h4 {\\n\\t\\tfont-size: 24px;\\n\\t\\tfont-weight: 600;\\n\\t\\tmargin-block: 0 1em;\\n\\t}\\n\\n\\t&__text {\\n\\t\\tdisplay: block;\\n\\t\\tpadding: var(--border-radius-rounded);\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__media {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\n\\t\\tmax-height: 300px;\\n\\t\\tmax-width: 450px;\\n\\t\\tborder-radius: var(--border-radius-rounded);\\n\\n\\t\\t&--fullwidth {\\n\\t\\t\\tmax-width: unset;\\n\\t\\t\\tmax-height: unset;\\n\\t\\t}\\n\\n\\t\\t&--end {\\n\\t\\t\\tborder-end-start-radius: 0;\\n\\t\\t\\tborder-start-start-radius: 0;\\n\\t\\t}\\n\\n\\t\\t&--start {\\n\\t\\t\\tborder-end-end-radius: 0;\\n\\t\\t\\tborder-start-end-radius: 0;\\n\\t\\t}\\n\\n\\t\\timg, &-element {\\n\\t\\t\\theight: 100%;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tobject-fit: cover;\\n\\t\\t\\tobject-position: center;\\n\\t\\t}\\n\\t}\\n\\n\\t&__play-icon {\\n\\t\\t&-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\ttop: -50%;\\n\\t\\t\\tleft: -50%;\\n\\t\\t}\\n\\n\\t\\tposition: absolute;\\n\\t\\ttop: -46px; // half of the icon height\\n\\t\\tright: -46px; // half of the icon width\\n\\t}\\n}\\n\\n// Ensure section works on mobile devices\\n@media only screen and (max-width: 699px) {\\n\\t.app-discover-post {\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&--reverse {\\n\\t\\t\\tflex-direction: column-reverse;\\n\\t\\t}\\n\\n\\t\\t&__media {\\n\\t\\t\\tmin-width: 100%;\\n\\n\\t\\t\\t&--end {\\n\\t\\t\\t\\tborder-radius: var(--border-radius-rounded);\\n\\t\\t\\t\\tborder-start-end-radius: 0;\\n\\t\\t\\t\\tborder-start-start-radius: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--start {\\n\\t\\t\\t\\tborder-radius: var(--border-radius-rounded);\\n\\t\\t\\t\\tborder-end-end-radius: 0;\\n\\t\\t\\t\\tborder-end-start-radius: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `\n.slide-in-enter-active,\n.slide-in-leave-active,\n.slide-out-enter-active,\n.slide-out-leave-active {\n transition: all .4s ease-out;\n}\n.slide-in-leave-to,\n.slide-out-enter {\n opacity: 0;\n transform: translateX(50%);\n}\n.slide-in-enter,\n.slide-out-leave-to {\n opacity: 0;\n transform: translateX(-50%);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/CarouselType.vue\"],\"names\":[],\"mappings\":\";AAuLA;;;;EAIA,4BAAA;AACA;AAEA;;EAEA,UAAA;EACA,0BAAA;AACA;AAEA;;EAEA,UAAA;EACA,2BAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<section :aria-roledescription=\\\"t('settings', 'Carousel')\\\" :aria-labelledby=\\\"headingId ? `${headingId}` : undefined\\\">\\n\\t\\t<h3 v-if=\\\"headline\\\" :id=\\\"headingId\\\">\\n\\t\\t\\t{{ translatedHeadline }}\\n\\t\\t</h3>\\n\\t\\t<div class=\\\"app-discover-carousel__wrapper\\\">\\n\\t\\t\\t<div class=\\\"app-discover-carousel__button-wrapper\\\">\\n\\t\\t\\t\\t<NcButton class=\\\"app-discover-carousel__button app-discover-carousel__button--previous\\\"\\n\\t\\t\\t\\t\\ttype=\\\"tertiary-no-background\\\"\\n\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Previous slide')\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"!hasPrevious\\\"\\n\\t\\t\\t\\t\\t@click=\\\"currentIndex -= 1\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiChevronLeft\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<Transition :name=\\\"transitionName\\\" mode=\\\"out-in\\\">\\n\\t\\t\\t\\t<PostType v-bind=\\\"shownElement\\\"\\n\\t\\t\\t\\t\\t:key=\\\"shownElement.id ?? currentIndex\\\"\\n\\t\\t\\t\\t\\t:aria-labelledby=\\\"`${internalId}-tab-${currentIndex}`\\\"\\n\\t\\t\\t\\t\\t:dom-id=\\\"`${internalId}-tabpanel-${currentIndex}`\\\"\\n\\t\\t\\t\\t\\tinline\\n\\t\\t\\t\\t\\trole=\\\"tabpanel\\\" />\\n\\t\\t\\t</Transition>\\n\\n\\t\\t\\t<div class=\\\"app-discover-carousel__button-wrapper\\\">\\n\\t\\t\\t\\t<NcButton class=\\\"app-discover-carousel__button app-discover-carousel__button--next\\\"\\n\\t\\t\\t\\t\\ttype=\\\"tertiary-no-background\\\"\\n\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Next slide')\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"!hasNext\\\"\\n\\t\\t\\t\\t\\t@click=\\\"currentIndex += 1\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiChevronRight\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"app-discover-carousel__tabs\\\" role=\\\"tablist\\\" :aria-label=\\\"t('settings', 'Choose slide to display')\\\">\\n\\t\\t\\t<NcButton v-for=\\\"index of content.length\\\"\\n\\t\\t\\t\\t:id=\\\"`${internalId}-tab-${index}`\\\"\\n\\t\\t\\t\\t:key=\\\"index\\\"\\n\\t\\t\\t\\t:aria-label=\\\"t('settings', '{index} of {total}', { index, total: content.length })\\\"\\n\\t\\t\\t\\t:aria-controls=\\\"`${internalId}-tabpanel-${index}`\\\"\\n\\t\\t\\t\\t:aria-selected=\\\"`${currentIndex === (index - 1)}`\\\"\\n\\t\\t\\t\\trole=\\\"tab\\\"\\n\\t\\t\\t\\ttype=\\\"tertiary-no-background\\\"\\n\\t\\t\\t\\t@click=\\\"currentIndex = index - 1\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"currentIndex === (index - 1) ? mdiCircleSlice8 : mdiCircleOutline\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcButton>\\n\\t\\t</div>\\n\\t</section>\\n</template>\\n\\n<script lang=\\\"ts\\\">\\nimport type { PropType } from 'vue'\\nimport type { IAppDiscoverCarousel } from '../../constants/AppDiscoverTypes.ts'\\n\\nimport { mdiChevronLeft, mdiChevronRight, mdiCircleOutline, mdiCircleSlice8 } from '@mdi/js'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, defineComponent, nextTick, ref, watch } from 'vue'\\nimport { commonAppDiscoverProps } from './common.ts'\\nimport { useLocalizedValue } from '../../composables/useGetLocalizedValue.ts'\\n\\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport PostType from './PostType.vue'\\n\\nexport default defineComponent({\\n\\tname: 'CarouselType',\\n\\n\\tcomponents: {\\n\\t\\tNcButton,\\n\\t\\tNcIconSvgWrapper,\\n\\t\\tPostType,\\n\\t},\\n\\n\\tprops: {\\n\\t\\t...commonAppDiscoverProps,\\n\\n\\t\\t/**\\n\\t\\t * The content of the carousel\\n\\t\\t */\\n\\t\\tcontent: {\\n\\t\\t\\ttype: Array as PropType<IAppDiscoverCarousel['content']>,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\n\\tsetup(props) {\\n\\t\\tconst translatedHeadline = useLocalizedValue(computed(() => props.headline))\\n\\n\\t\\tconst currentIndex = ref(Math.min(1, props.content.length - 1))\\n\\t\\tconst shownElement = ref(props.content[currentIndex.value])\\n\\t\\tconst hasNext = computed(() => currentIndex.value < (props.content.length - 1))\\n\\t\\tconst hasPrevious = computed(() => currentIndex.value > 0)\\n\\n\\t\\tconst internalId = computed(() => props.id ?? (Math.random() + 1).toString(36).substring(7))\\n\\t\\tconst headingId = computed(() => `${internalId.value}-h`)\\n\\n\\t\\tconst transitionName = ref('slide-out')\\n\\t\\twatch(() => currentIndex.value, (o, n) => {\\n\\t\\t\\tif (o < n) {\\n\\t\\t\\t\\ttransitionName.value = 'slide-out'\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ttransitionName.value = 'slide-in'\\n\\t\\t\\t}\\n\\n\\t\\t\\t// Wait next tick\\n\\t\\t\\tnextTick(() => {\\n\\t\\t\\t\\tshownElement.value = props.content[currentIndex.value]\\n\\t\\t\\t})\\n\\t\\t})\\n\\n\\t\\treturn {\\n\\t\\t\\tt,\\n\\t\\t\\tinternalId,\\n\\t\\t\\theadingId,\\n\\n\\t\\t\\thasNext,\\n\\t\\t\\thasPrevious,\\n\\t\\t\\tcurrentIndex,\\n\\t\\t\\tshownElement,\\n\\n\\t\\t\\ttransitionName,\\n\\n\\t\\t\\ttranslatedHeadline,\\n\\n\\t\\t\\tmdiChevronLeft,\\n\\t\\t\\tmdiChevronRight,\\n\\t\\t\\tmdiCircleOutline,\\n\\t\\t\\tmdiCircleSlice8,\\n\\t\\t}\\n\\t},\\n})\\n</script>\\n\\n<style scoped lang=\\\"scss\\\">\\nh3 {\\n\\tfont-size: 24px;\\n\\tfont-weight: 600;\\n\\tmargin-block: 0 1em;\\n}\\n\\n.app-discover-carousel {\\n\\t&__wrapper {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__button {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tposition: absolute;\\n\\t\\ttop: calc(50% - 22px); // 50% minus half of button height\\n\\n\\t\\t&-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t}\\n\\n\\t\\t// See padding of discover section\\n\\t\\t&--next {\\n\\t\\t\\tright: -54px;\\n\\t\\t}\\n\\t\\t&--previous {\\n\\t\\t\\tleft: -54px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__tabs {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: center;\\n\\n\\t\\t> * {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n}\\n</style>\\n\\n<style>\\n.slide-in-enter-active,\\n.slide-in-leave-active,\\n.slide-out-enter-active,\\n.slide-out-leave-active {\\n transition: all .4s ease-out;\\n}\\n\\n.slide-in-leave-to,\\n.slide-out-enter {\\n opacity: 0;\\n transform: translateX(50%);\\n}\\n\\n.slide-in-enter,\\n.slide-out-leave-to {\\n opacity: 0;\\n transform: translateX(-50%);\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('section',{attrs:{\"aria-roledescription\":_vm.t('settings', 'Carousel'),\"aria-labelledby\":_vm.headingId ? `${_vm.headingId}` : undefined}},[(_vm.headline)?_c('h3',{attrs:{\"id\":_vm.headingId}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.translatedHeadline)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-carousel__wrapper\"},[_c('div',{staticClass:\"app-discover-carousel__button-wrapper\"},[_c('NcButton',{staticClass:\"app-discover-carousel__button app-discover-carousel__button--previous\",attrs:{\"type\":\"tertiary-no-background\",\"aria-label\":_vm.t('settings', 'Previous slide'),\"disabled\":!_vm.hasPrevious},on:{\"click\":function($event){_vm.currentIndex -= 1}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiChevronLeft}})]},proxy:true}])})],1),_vm._v(\" \"),_c('Transition',{attrs:{\"name\":_vm.transitionName,\"mode\":\"out-in\"}},[_c('PostType',_vm._b({key:_vm.shownElement.id ?? _vm.currentIndex,attrs:{\"aria-labelledby\":`${_vm.internalId}-tab-${_vm.currentIndex}`,\"dom-id\":`${_vm.internalId}-tabpanel-${_vm.currentIndex}`,\"inline\":\"\",\"role\":\"tabpanel\"}},'PostType',_vm.shownElement,false))],1),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-carousel__button-wrapper\"},[_c('NcButton',{staticClass:\"app-discover-carousel__button app-discover-carousel__button--next\",attrs:{\"type\":\"tertiary-no-background\",\"aria-label\":_vm.t('settings', 'Next slide'),\"disabled\":!_vm.hasNext},on:{\"click\":function($event){_vm.currentIndex += 1}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiChevronRight}})]},proxy:true}])})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-carousel__tabs\",attrs:{\"role\":\"tablist\",\"aria-label\":_vm.t('settings', 'Choose slide to display')}},_vm._l((_vm.content.length),function(index){return _c('NcButton',{key:index,attrs:{\"id\":`${_vm.internalId}-tab-${index}`,\"aria-label\":_vm.t('settings', '{index} of {total}', { index, total: _vm.content.length }),\"aria-controls\":`${_vm.internalId}-tabpanel-${index}`,\"aria-selected\":`${_vm.currentIndex === (index - 1)}`,\"role\":\"tab\",\"type\":\"tertiary-no-background\"},on:{\"click\":function($event){_vm.currentIndex = index - 1}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.currentIndex === (index - 1) ? _vm.mdiCircleSlice8 : _vm.mdiCircleOutline}})]},proxy:true}],null,true)})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=0&id=bbc71512&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=0&id=bbc71512&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=1&id=bbc71512&prod&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CarouselType.vue?vue&type=style&index=1&id=bbc71512&prod&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CarouselType.vue?vue&type=template&id=bbc71512&scoped=true\"\nimport script from \"./CarouselType.vue?vue&type=script&lang=ts\"\nexport * from \"./CarouselType.vue?vue&type=script&lang=ts\"\nimport style0 from \"./CarouselType.vue?vue&type=style&index=0&id=bbc71512&prod&scoped=true&lang=scss\"\nimport style1 from \"./CarouselType.vue?vue&type=style&index=1&id=bbc71512&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bbc71512\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('article',{staticClass:\"app-discover-post\",class:{ 'app-discover-post--reverse': _vm.media && _vm.media.alignment === 'start' },attrs:{\"id\":_vm.domId}},[(_vm.headline || _vm.text)?_c(_vm.link ? 'a' : 'div',{tag:\"component\",staticClass:\"app-discover-post__text\",attrs:{\"href\":_vm.link,\"target\":_vm.link ? '_blank' : undefined}},[_c(_vm.inline ? 'h4' : 'h3',{tag:\"component\"},[_vm._v(_vm._s(_vm.translatedHeadline))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.translatedText))])],1):_vm._e(),_vm._v(\" \"),(_vm.mediaSources)?_c(_vm.mediaLink ? 'a' : 'div',{tag:\"component\",staticClass:\"app-discover-post__media\",class:{\n\t\t\t'app-discover-post__media--fullwidth': _vm.isFullWidth,\n\t\t\t'app-discover-post__media--start': _vm.media?.alignment === 'start',\n\t\t\t'app-discover-post__media--end': _vm.media?.alignment === 'end',\n\t\t},attrs:{\"href\":_vm.mediaLink,\"target\":_vm.mediaLink ? '_blank' : undefined}},[_c(_vm.isImage ? 'picture' : 'video',{ref:\"mediaElement\",tag:\"component\",staticClass:\"app-discover-post__media-element\",attrs:{\"muted\":!_vm.isImage,\"playsinline\":!_vm.isImage,\"preload\":!_vm.isImage && 'auto'},on:{\"ended\":function($event){_vm.hasPlaybackEnded = true}}},[_vm._l((_vm.mediaSources),function(source){return _c('source',{key:source.src,attrs:{\"src\":_vm.isImage ? undefined : _vm.generatePrivacyUrl(source.src),\"srcset\":_vm.isImage ? _vm.generatePrivacyUrl(source.src) : undefined,\"type\":source.mime}})}),_vm._v(\" \"),(_vm.isImage)?_c('img',{attrs:{\"src\":_vm.generatePrivacyUrl(_vm.mediaSources[0].src),\"alt\":_vm.mediaAlt}}):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-post__play-icon-wrapper\"},[(!_vm.isImage && _vm.showPlayVideo)?_c('NcIconSvgWrapper',{staticClass:\"app-discover-post__play-icon\",attrs:{\"path\":_vm.mdiPlayCircleOutline,\"size\":92}}):_vm._e()],1)],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PostType.vue?vue&type=template&id=24eed252&scoped=true\"\nimport script from \"./PostType.vue?vue&type=script&lang=ts\"\nexport * from \"./PostType.vue?vue&type=script&lang=ts\"\nimport style0 from \"./PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24eed252\",\n null\n \n)\n\nexport default component.exports"],"names":["APP_DISCOVER_KNOWN_TYPES","commonAppDiscoverProps","type","String","required","validator","v","includes","id","date","Number","default","undefined","expiryDate","headline","Object","link","useLocalizedValue","dict","language","getLanguage","computed","value","getLocalizedValue","_ref","_ref2","_dict$language","split","en","___CSS_LOADER_EXPORT___","push","module","defineComponent","name","components","NcButton","NcIconSvgWrapper","PostType","props","content","Array","setup","translatedHeadline","currentIndex","ref","Math","min","length","shownElement","hasNext","hasPrevious","internalId","_props$id","random","toString","substring","headingId","concat","transitionName","watch","o","n","nextTick","t","mdiChevronLeft","mdiChevronRight","mdiCircleOutline","mdiCircleSlice8","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm$shownElement$id","_vm","this","_c","_self","_setupProxy","attrs","_v","_s","_e","staticClass","on","$event","scopedSlots","_u","key","fn","proxy","_b","_l","index","total","text","media","inline","Boolean","domId","translatedText","localizedMedia","_props$media","mediaSources","src","flat","mediaAlt","_localizedMedia$value","_localizedMedia$value2","alt","isImage","_mediaSources$value","mime","startsWith","isFullWidth","mediaLink","_localizedMedia$value3","_localizedMedia$value4","hasPlaybackEnded","showPlayVideo","_localizedMedia$value5","mediaElement","mediaIsVisible","useElementVisibility","threshold","watchEffect","video","muted","play","pause","ended","currentTime","mdiPlayCircleOutline","generatePrivacyUrl","url","generateUrl","fileName","_vm$media","_vm$media2","class","alignment","tag","source"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/8630-8630.js b/dist/8630-8630.js new file mode 100644 index 00000000000..b74216ab63c --- /dev/null +++ b/dist/8630-8630.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8630],{7925:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),p=a(76314),o=a.n(p)()(s());o.push([t.id,".app-discover-app[data-v-14ba7d0d]{width:100% !important}.app-discover-app[data-v-14ba7d0d]:hover{background:var(--color-background-hover);border-radius:var(--border-radius-rounded)}.app-discover-app__skeleton[data-v-14ba7d0d]{display:flex;flex-direction:column;gap:8px;padding:30px}.app-discover-app__skeleton[data-v-14ba7d0d]>:first-child{height:50%;min-height:130px}.app-discover-app__skeleton[data-v-14ba7d0d]>:nth-child(2){width:50px}.app-discover-app__skeleton[data-v-14ba7d0d]>:nth-child(5){height:20px;width:100px}.app-discover-app__skeleton[data-v-14ba7d0d]>:not(:first-child){border-radius:4px}.skeleton-element[data-v-14ba7d0d]{min-height:var(--default-font-size, 15px);background:linear-gradient(90deg, var(--color-background-dark), var(--color-background-darker), var(--color-background-dark));background-size:400% 400%;animation:gradient-14ba7d0d 6s ease infinite}@keyframes gradient-14ba7d0d{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/AppType.vue"],names:[],mappings:"AACA,mCACC,qBAAA,CAEA,yCACC,wCAAA,CACA,0CAAA,CAGD,6CACC,YAAA,CACA,qBAAA,CACA,OAAA,CAEA,YAAA,CAEA,0DACC,UAAA,CACA,gBAAA,CAGD,2DACC,UAAA,CAGD,2DACC,WAAA,CACA,WAAA,CAGD,gEACC,iBAAA,CAKH,mCACC,yCAAA,CAEA,6HAAA,CACA,yBAAA,CACA,4CAAA,CAGD,6BACC,GACC,0BAAA,CAED,IACC,4BAAA,CAED,KACC,0BAAA,CAAA",sourcesContent:["\n.app-discover-app {\n\twidth: 100% !important; // full with of the showcase item\n\n\t&:hover {\n\t\tbackground: var(--color-background-hover);\n\t\tborder-radius: var(--border-radius-rounded);\n\t}\n\n\t&__skeleton {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 8px;\n\n\t\tpadding: 30px; // Same as AppItem\n\n\t\t> :first-child {\n\t\t\theight: 50%;\n\t\t\tmin-height: 130px;\n\t\t}\n\n\t\t> :nth-child(2) {\n\t\t\twidth: 50px;\n\t\t}\n\n\t\t> :nth-child(5) {\n\t\t\theight: 20px;\n\t\t\twidth: 100px;\n\t\t}\n\n\t\t> :not(:first-child) {\n\t\t\tborder-radius: 4px;\n\t\t}\n\t}\n}\n\n.skeleton-element {\n\tmin-height: var(--default-font-size, 15px);\n\n\tbackground: linear-gradient(90deg, var(--color-background-dark), var(--color-background-darker), var(--color-background-dark));\n\tbackground-size: 400% 400%;\n\tanimation: gradient 6s ease infinite;\n}\n\n@keyframes gradient {\n\t0% {\n\t\tbackground-position: 0% 50%;\n\t}\n\t50% {\n\t\tbackground-position: 100% 50%;\n\t}\n\t100% {\n\t\tbackground-position: 0% 50%;\n\t}\n}\n"],sourceRoot:""}]);const i=o},9288:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),p=a(76314),o=a.n(p)()(s());o.push([t.id,"h3[data-v-11c20724]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-showcase__list[data-v-11c20724]{list-style:none;display:flex;flex-wrap:wrap;gap:calc(var(--default-clickable-area, 44px)/2)}.app-discover-showcase__item[data-v-11c20724]{display:flex;align-items:stretch;position:relative;width:calc(33% - var(--default-clickable-area, 44px)/2)}.app-discover-showcase--small .app-discover-showcase__item[data-v-11c20724]{width:calc(50% - var(--default-clickable-area, 44px)/2)}.app-discover-showcase--extra-small .app-discover-showcase__item[data-v-11c20724]{width:100%}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue"],names:[],mappings:"AAGA,oBACC,cAAA,CACA,eAAA,CACA,kBAAA,CAIA,8CACC,eAAA,CAEA,YAAA,CACA,cAAA,CACA,+CAdS,CAiBV,8CACC,YAAA,CACA,mBAAA,CAEA,iBAAA,CACA,uDAAA,CAKD,4EACC,uDAAA,CAKD,kFACC,UAAA",sourcesContent:["\n$item-gap: calc(var(--default-clickable-area, 44px) / 2);\n\nh3 {\n\tfont-size: 24px;\n\tfont-weight: 600;\n\tmargin-block: 0 1em;\n}\n\n.app-discover-showcase {\n\t&__list {\n\t\tlist-style: none;\n\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: $item-gap;\n\t}\n\n\t&__item {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\n\t\tposition: relative;\n\t\twidth: calc(33% - $item-gap);\n\t}\n}\n\n.app-discover-showcase--small {\n\t.app-discover-showcase__item {\n\t\twidth: calc(50% - $item-gap);\n\t}\n}\n\n.app-discover-showcase--extra-small {\n\t.app-discover-showcase__item {\n\t\twidth: 100%;\n\t}\n}\n"],sourceRoot:""}]);const i=o},48630:(t,e,a)=>{a.r(e),a.d(e,{default:()=>I});var n=a(53334),s=a(13073),p=a(85471),o=a(77796),i=a(74640),r=a(846),A=a(64747);const l=(0,p.pM)({__name:"AppType",props:{modelValue:null},setup(t){const e=t,a=(0,r.T)(),n=(0,p.EW)((()=>a.getAppById(e.modelValue.appId))),s=(0,p.EW)((()=>e.modelValue.appId?"https://apps.nextcloud.com/apps/".concat(e.modelValue.appId):"#"));return{__sfc:!0,props:e,store:a,app:n,appStoreLink:s,AppItem:A.A}}});var d=a(85072),c=a.n(d),C=a(97825),h=a.n(C),u=a(77659),v=a.n(u),m=a(55056),g=a.n(m),k=a(10540),_=a.n(k),b=a(41113),f=a.n(b),w=a(7925),x={};x.styleTagTransform=f(),x.setAttributes=g(),x.insert=v().bind(null,"head"),x.domAPI=h(),x.insertStyleElement=_(),c()(w.A,x),w.A&&w.A.locals&&w.A.locals;var y=a(14486);const E=(0,y.A)(l,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.app?e(a.AppItem,{staticClass:"app-discover-app",attrs:{app:a.app,category:"discover",inline:"","list-view":!1}}):e("a",{staticClass:"app-discover-app app-discover-app__skeleton",attrs:{href:a.appStoreLink,target:"_blank",title:t.modelValue.appId,rel:"noopener noreferrer"}},[e("span",{staticClass:"skeleton-element"}),t._v(" "),e("span",{staticClass:"skeleton-element"}),t._v(" "),e("span",{staticClass:"skeleton-element"}),t._v(" "),e("span",{staticClass:"skeleton-element"}),t._v(" "),e("span",{staticClass:"skeleton-element"})])}),[],!1,null,"14ba7d0d",null).exports;var D=a(21544);const B=(0,p.pM)({name:"ShowcaseType",components:{AppType:E,PostType:D.default},props:{...o.K,content:{type:Array,required:!0}},setup(t){const e=(0,i.O)((0,p.EW)((()=>t.headline))),a=(0,p.KR)(),{width:o}=(0,s.Lhy)(a),r=(0,p.EW)((()=>o.value<768)),A=(0,p.EW)((()=>o.value<512));return{t:n.Tl,container:a,isSmallWidth:r,isExtraSmallWidth:A,translatedHeadline:e}}});var T=a(9288),S={};S.styleTagTransform=f(),S.setAttributes=g(),S.insert=v().bind(null,"head"),S.domAPI=h(),S.insertStyleElement=_(),c()(T.A,S),T.A&&T.A.locals&&T.A.locals;const I=(0,y.A)(B,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("section",{ref:"container",staticClass:"app-discover-showcase",class:{"app-discover-showcase--small":t.isSmallWidth,"app-discover-showcase--extra-small":t.isExtraSmallWidth}},[t.translatedHeadline?e("h3",[t._v("\n\t\t"+t._s(t.translatedHeadline)+"\n\t")]):t._e(),t._v(" "),e("ul",{staticClass:"app-discover-showcase__list"},t._l(t.content,(function(a,n){var s;return e("li",{key:null!==(s=a.id)&&void 0!==s?s:n,staticClass:"app-discover-showcase__item"},["post"===a.type?e("PostType",t._b({attrs:{inline:""}},"PostType",a,!1)):"app"===a.type?e("AppType",{attrs:{"model-value":a}}):t._e()],1)})),0)])}),[],!1,null,"11c20724",null).exports}}]); +//# sourceMappingURL=8630-8630.js.map?v=eb1ab06c4928352754c5
\ No newline at end of file diff --git a/dist/8630-8630.js.map b/dist/8630-8630.js.map new file mode 100644 index 00000000000..6cd08b3e87d --- /dev/null +++ b/dist/8630-8630.js.map @@ -0,0 +1 @@ +{"version":3,"file":"8630-8630.js?v=eb1ab06c4928352754c5","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppType.vue?vue&type=style&index=0&id=14ba7d0d&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue?vue&type=style&index=0&id=11c20724&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppType.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppType.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppType.vue?6315","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppType.vue?2e10","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue?2561","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue?7d08"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover-app[data-v-14ba7d0d]{width:100% !important}.app-discover-app[data-v-14ba7d0d]:hover{background:var(--color-background-hover);border-radius:var(--border-radius-rounded)}.app-discover-app__skeleton[data-v-14ba7d0d]{display:flex;flex-direction:column;gap:8px;padding:30px}.app-discover-app__skeleton[data-v-14ba7d0d]>:first-child{height:50%;min-height:130px}.app-discover-app__skeleton[data-v-14ba7d0d]>:nth-child(2){width:50px}.app-discover-app__skeleton[data-v-14ba7d0d]>:nth-child(5){height:20px;width:100px}.app-discover-app__skeleton[data-v-14ba7d0d]>:not(:first-child){border-radius:4px}.skeleton-element[data-v-14ba7d0d]{min-height:var(--default-font-size, 15px);background:linear-gradient(90deg, var(--color-background-dark), var(--color-background-darker), var(--color-background-dark));background-size:400% 400%;animation:gradient-14ba7d0d 6s ease infinite}@keyframes gradient-14ba7d0d{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/AppType.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,qBAAA,CAEA,yCACC,wCAAA,CACA,0CAAA,CAGD,6CACC,YAAA,CACA,qBAAA,CACA,OAAA,CAEA,YAAA,CAEA,0DACC,UAAA,CACA,gBAAA,CAGD,2DACC,UAAA,CAGD,2DACC,WAAA,CACA,WAAA,CAGD,gEACC,iBAAA,CAKH,mCACC,yCAAA,CAEA,6HAAA,CACA,yBAAA,CACA,4CAAA,CAGD,6BACC,GACC,0BAAA,CAED,IACC,4BAAA,CAED,KACC,0BAAA,CAAA\",\"sourcesContent\":[\"\\n.app-discover-app {\\n\\twidth: 100% !important; // full with of the showcase item\\n\\n\\t&:hover {\\n\\t\\tbackground: var(--color-background-hover);\\n\\t\\tborder-radius: var(--border-radius-rounded);\\n\\t}\\n\\n\\t&__skeleton {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: 8px;\\n\\n\\t\\tpadding: 30px; // Same as AppItem\\n\\n\\t\\t> :first-child {\\n\\t\\t\\theight: 50%;\\n\\t\\t\\tmin-height: 130px;\\n\\t\\t}\\n\\n\\t\\t> :nth-child(2) {\\n\\t\\t\\twidth: 50px;\\n\\t\\t}\\n\\n\\t\\t> :nth-child(5) {\\n\\t\\t\\theight: 20px;\\n\\t\\t\\twidth: 100px;\\n\\t\\t}\\n\\n\\t\\t> :not(:first-child) {\\n\\t\\t\\tborder-radius: 4px;\\n\\t\\t}\\n\\t}\\n}\\n\\n.skeleton-element {\\n\\tmin-height: var(--default-font-size, 15px);\\n\\n\\tbackground: linear-gradient(90deg, var(--color-background-dark), var(--color-background-darker), var(--color-background-dark));\\n\\tbackground-size: 400% 400%;\\n\\tanimation: gradient 6s ease infinite;\\n}\\n\\n@keyframes gradient {\\n\\t0% {\\n\\t\\tbackground-position: 0% 50%;\\n\\t}\\n\\t50% {\\n\\t\\tbackground-position: 100% 50%;\\n\\t}\\n\\t100% {\\n\\t\\tbackground-position: 0% 50%;\\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, `h3[data-v-11c20724]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-showcase__list[data-v-11c20724]{list-style:none;display:flex;flex-wrap:wrap;gap:calc(var(--default-clickable-area, 44px)/2)}.app-discover-showcase__item[data-v-11c20724]{display:flex;align-items:stretch;position:relative;width:calc(33% - var(--default-clickable-area, 44px)/2)}.app-discover-showcase--small .app-discover-showcase__item[data-v-11c20724]{width:calc(50% - var(--default-clickable-area, 44px)/2)}.app-discover-showcase--extra-small .app-discover-showcase__item[data-v-11c20724]{width:100%}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/ShowcaseType.vue\"],\"names\":[],\"mappings\":\"AAGA,oBACC,cAAA,CACA,eAAA,CACA,kBAAA,CAIA,8CACC,eAAA,CAEA,YAAA,CACA,cAAA,CACA,+CAdS,CAiBV,8CACC,YAAA,CACA,mBAAA,CAEA,iBAAA,CACA,uDAAA,CAKD,4EACC,uDAAA,CAKD,kFACC,UAAA\",\"sourcesContent\":[\"\\n$item-gap: calc(var(--default-clickable-area, 44px) / 2);\\n\\nh3 {\\n\\tfont-size: 24px;\\n\\tfont-weight: 600;\\n\\tmargin-block: 0 1em;\\n}\\n\\n.app-discover-showcase {\\n\\t&__list {\\n\\t\\tlist-style: none;\\n\\n\\t\\tdisplay: flex;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tgap: $item-gap;\\n\\t}\\n\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: stretch;\\n\\n\\t\\tposition: relative;\\n\\t\\twidth: calc(33% - $item-gap);\\n\\t}\\n}\\n\\n.app-discover-showcase--small {\\n\\t.app-discover-showcase__item {\\n\\t\\twidth: calc(50% - $item-gap);\\n\\t}\\n}\\n\\n.app-discover-showcase--extra-small {\\n\\t.app-discover-showcase__item {\\n\\t\\twidth: 100%;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('section',{ref:\"container\",staticClass:\"app-discover-showcase\",class:{\n\t\t'app-discover-showcase--small': _vm.isSmallWidth,\n\t\t'app-discover-showcase--extra-small': _vm.isExtraSmallWidth,\n\t}},[(_vm.translatedHeadline)?_c('h3',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.translatedHeadline)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('ul',{staticClass:\"app-discover-showcase__list\"},_vm._l((_vm.content),function(item,index){return _c('li',{key:item.id ?? index,staticClass:\"app-discover-showcase__item\"},[(item.type === 'post')?_c('PostType',_vm._b({attrs:{\"inline\":\"\"}},'PostType',item,false)):(item.type === 'app')?_c('AppType',{attrs:{\"model-value\":item}}):_vm._e()],1)}),0)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.app)?_c(_setup.AppItem,{staticClass:\"app-discover-app\",attrs:{\"app\":_setup.app,\"category\":\"discover\",\"inline\":\"\",\"list-view\":false}}):_c('a',{staticClass:\"app-discover-app app-discover-app__skeleton\",attrs:{\"href\":_setup.appStoreLink,\"target\":\"_blank\",\"title\":_vm.modelValue.appId,\"rel\":\"noopener noreferrer\"}},[_c('span',{staticClass:\"skeleton-element\"}),_vm._v(\" \"),_c('span',{staticClass:\"skeleton-element\"}),_vm._v(\" \"),_c('span',{staticClass:\"skeleton-element\"}),_vm._v(\" \"),_c('span',{staticClass:\"skeleton-element\"}),_vm._v(\" \"),_c('span',{staticClass:\"skeleton-element\"})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppType.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppType.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppType.vue?vue&type=style&index=0&id=14ba7d0d&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppType.vue?vue&type=style&index=0&id=14ba7d0d&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppType.vue?vue&type=template&id=14ba7d0d&scoped=true\"\nimport script from \"./AppType.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppType.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppType.vue?vue&type=style&index=0&id=14ba7d0d&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"14ba7d0d\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowcaseType.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowcaseType.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowcaseType.vue?vue&type=style&index=0&id=11c20724&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ShowcaseType.vue?vue&type=style&index=0&id=11c20724&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ShowcaseType.vue?vue&type=template&id=11c20724&scoped=true\"\nimport script from \"./ShowcaseType.vue?vue&type=script&lang=ts\"\nexport * from \"./ShowcaseType.vue?vue&type=script&lang=ts\"\nimport style0 from \"./ShowcaseType.vue?vue&type=style&index=0&id=11c20724&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11c20724\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","_defineComponent","__name","props","modelValue","setup","__props","store","useAppsStore","app","computed","getAppById","appId","appStoreLink","concat","__sfc","AppItem","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","this","_c","_self","_setup","_setupProxy","staticClass","attrs","_v","defineComponent","name","components","AppType","PostType","commonAppDiscoverProps","content","type","Array","required","translatedHeadline","useLocalizedValue","headline","container","ref","width","containerWidth","useElementSize","isSmallWidth","value","isExtraSmallWidth","t","class","_s","_e","_l","item","index","_item$id","key","_b"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/8753-8753.js b/dist/8753-8753.js deleted file mode 100644 index 06be68e0d0c..00000000000 --- a/dist/8753-8753.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see 8753-8753.js.LICENSE.txt */ -"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[8753],{77796:(e,t,r)=>{r.d(t,{K:()=>d});const a=["post","showcase","carousel"],d={type:{type:String,required:!0,validator:e=>"string"==typeof e&&a.includes(e)},id:{type:String,required:!0},date:{type:Number,required:!1,default:void 0},expiryDate:{type:Number,required:!1,default:void 0},headline:{type:Object,required:!1,default:()=>null},link:{type:String,required:!1,default:()=>null}}},74640:(e,t,r)=>{r.d(t,{O:()=>i});var a=r(53334),d=r(85471);const i=e=>{const t=(0,a.Z0)();return(0,d.EW)((()=>null!=e&&e.value?((e,t)=>{var r,a,d;return null!==(r=null!==(a=null!==(d=e[t])&&void 0!==d?d:e[t.split("_")[0]])&&void 0!==a?a:e.en)&&void 0!==r?r:null})(e.value,t):null))}},56336:(e,t,r)=>{r.d(t,{A:()=>o});var a=r(71354),d=r.n(a),i=r(76314),n=r.n(i)()(d());n.push([e.id,".app-discover-post[data-v-24eed252]{width:100%;background-color:var(--color-primary-element-light);border-radius:var(--border-radius-rounded);display:flex;flex-direction:row}.app-discover-post--reverse[data-v-24eed252]{flex-direction:row-reverse}.app-discover-post h3[data-v-24eed252],.app-discover-post h4[data-v-24eed252]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-post__text[data-v-24eed252]{display:block;padding:var(--border-radius-rounded);width:100%}.app-discover-post__media[data-v-24eed252]{display:block;overflow:hidden;max-height:300px;max-width:450px;border-radius:var(--border-radius-rounded)}.app-discover-post__media--fullwidth[data-v-24eed252]{max-width:unset;max-height:unset}.app-discover-post__media--end[data-v-24eed252]{border-end-start-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-end-end-radius:0;border-start-end-radius:0}.app-discover-post__media img[data-v-24eed252],.app-discover-post__media-element[data-v-24eed252]{height:100%;width:100%;object-fit:cover;object-position:center}.app-discover-post__play-icon[data-v-24eed252]{position:absolute;top:-46px;right:-46px}.app-discover-post__play-icon-wrapper[data-v-24eed252]{position:relative;top:-50%;left:-50%}@media only screen and (max-width: 699px){.app-discover-post[data-v-24eed252]{flex-direction:column}.app-discover-post--reverse[data-v-24eed252]{flex-direction:column-reverse}.app-discover-post__media[data-v-24eed252]{min-width:100%}.app-discover-post__media--end[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-start-end-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-end-end-radius:0;border-end-start-radius:0}}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/PostType.vue"],names:[],mappings:"AACA,oCACC,UAAA,CACA,mDAAA,CACA,0CAAA,CAEA,YAAA,CACA,kBAAA,CACA,6CACC,0BAAA,CAGD,8EACC,cAAA,CACA,eAAA,CACA,kBAAA,CAGD,0CACC,aAAA,CACA,oCAAA,CACA,UAAA,CAGD,2CACC,aAAA,CACA,eAAA,CAEA,gBAAA,CACA,eAAA,CACA,0CAAA,CAEA,sDACC,eAAA,CACA,gBAAA,CAGD,gDACC,yBAAA,CACA,2BAAA,CAGD,kDACC,uBAAA,CACA,yBAAA,CAGD,kGACC,WAAA,CACA,UAAA,CACA,gBAAA,CACA,sBAAA,CAIF,+CAOC,iBAAA,CACA,SAAA,CACA,WAAA,CARA,uDACC,iBAAA,CACA,QAAA,CACA,SAAA,CAUH,0CACC,oCACC,qBAAA,CAEA,6CACC,6BAAA,CAGD,2CACC,cAAA,CAEA,gDACC,0CAAA,CACA,yBAAA,CACA,2BAAA,CAGD,kDACC,0CAAA,CACA,uBAAA,CACA,yBAAA,CAAA",sourcesContent:["\n.app-discover-post {\n\twidth: 100%;\n\tbackground-color: var(--color-primary-element-light);\n\tborder-radius: var(--border-radius-rounded);\n\n\tdisplay: flex;\n\tflex-direction: row;\n\t&--reverse {\n\t\tflex-direction: row-reverse;\n\t}\n\n\th3, h4 {\n\t\tfont-size: 24px;\n\t\tfont-weight: 600;\n\t\tmargin-block: 0 1em;\n\t}\n\n\t&__text {\n\t\tdisplay: block;\n\t\tpadding: var(--border-radius-rounded);\n\t\twidth: 100%;\n\t}\n\n\t&__media {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\n\t\tmax-height: 300px;\n\t\tmax-width: 450px;\n\t\tborder-radius: var(--border-radius-rounded);\n\n\t\t&--fullwidth {\n\t\t\tmax-width: unset;\n\t\t\tmax-height: unset;\n\t\t}\n\n\t\t&--end {\n\t\t\tborder-end-start-radius: 0;\n\t\t\tborder-start-start-radius: 0;\n\t\t}\n\n\t\t&--start {\n\t\t\tborder-end-end-radius: 0;\n\t\t\tborder-start-end-radius: 0;\n\t\t}\n\n\t\timg, &-element {\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tobject-fit: cover;\n\t\t\tobject-position: center;\n\t\t}\n\t}\n\n\t&__play-icon {\n\t\t&-wrapper {\n\t\t\tposition: relative;\n\t\t\ttop: -50%;\n\t\t\tleft: -50%;\n\t\t}\n\n\t\tposition: absolute;\n\t\ttop: -46px; // half of the icon height\n\t\tright: -46px; // half of the icon width\n\t}\n}\n\n// Ensure section works on mobile devices\n@media only screen and (max-width: 699px) {\n\t.app-discover-post {\n\t\tflex-direction: column;\n\n\t\t&--reverse {\n\t\t\tflex-direction: column-reverse;\n\t\t}\n\n\t\t&__media {\n\t\t\tmin-width: 100%;\n\n\t\t\t&--end {\n\t\t\t\tborder-radius: var(--border-radius-rounded);\n\t\t\t\tborder-start-end-radius: 0;\n\t\t\t\tborder-start-start-radius: 0;\n\t\t\t}\n\n\t\t\t&--start {\n\t\t\t\tborder-radius: var(--border-radius-rounded);\n\t\t\t\tborder-end-end-radius: 0;\n\t\t\t\tborder-end-start-radius: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const o=n},8753:(e,t,r)=>{r.r(t),r.d(t,{default:()=>k});var a=r(9165),d=r(99498),i=r(13073),n=r(85471),o=r(77796),s=r(74640),A=r(6695);const l=(0,n.pM)({components:{NcIconSvgWrapper:A.A},props:{...o.K,text:{type:Object,required:!1,default:()=>null},media:{type:Object,required:!1,default:()=>null},inline:{type:Boolean,required:!1,default:!1},domId:{type:String,required:!1,default:null}},setup(e){const t=(0,s.O)((0,n.EW)((()=>e.headline))),r=(0,s.O)((0,n.EW)((()=>e.text))),o=(0,s.O)((0,n.EW)((()=>{var t;return null===(t=e.media)||void 0===t?void 0:t.content}))),A=(0,n.EW)((()=>null!==o.value?[o.value.src].flat():void 0)),l=(0,n.EW)((()=>{var e,t;return null!==(e=null===(t=o.value)||void 0===t?void 0:t.alt)&&void 0!==e?e:""})),p=(0,n.EW)((()=>{var e;return!0===(null==A||null===(e=A.value)||void 0===e?void 0:e[0].mime.startsWith("image/"))})),u=(0,n.EW)((()=>!t.value&&!r.value)),v=(0,n.EW)((()=>{var t,r;return null!==(t=null===(r=o.value)||void 0===r?void 0:r.link)&&void 0!==t?t:e.link})),c=(0,n.KR)(!1),C=(0,n.EW)((()=>{var e;return(null===(e=o.value)||void 0===e?void 0:e.link)&&c.value})),m=(0,n.KR)(),h=(0,i.ITo)(m,{threshold:.3});return(0,n.nT)((()=>{if(!p.value&&m.value){const e=m.value;h.value?(e.muted=!0,e.play()):(e.pause(),e.ended&&(e.currentTime=0,c.value=!1))}})),{mdiPlayCircleOutline:a.Nwy,translatedText:r,translatedHeadline:t,mediaElement:m,mediaSources:A,mediaAlt:l,mediaLink:v,hasPlaybackEnded:c,showPlayVideo:C,isFullWidth:u,isImage:p,generatePrivacyUrl:e=>e.startsWith("/")?e:(0,d.Jv)("/settings/api/apps/media?fileName={fileName}",{fileName:e})}}});var p=r(85072),u=r.n(p),v=r(97825),c=r.n(v),C=r(77659),m=r.n(C),h=r(55056),_=r.n(h),b=r(10540),g=r.n(b),f=r(41113),y=r.n(f),x=r(56336),w={};w.styleTagTransform=y(),w.setAttributes=_(),w.insert=m().bind(null,"head"),w.domAPI=c(),w.insertStyleElement=g(),u()(x.A,w),x.A&&x.A.locals&&x.A.locals;const k=(0,r(14486).A)(l,(function(){var e,t,r=this,a=r._self._c;return r._self._setupProxy,a("article",{staticClass:"app-discover-post",class:{"app-discover-post--reverse":r.media&&"start"===r.media.alignment},attrs:{id:r.domId}},[r.headline||r.text?a(r.link?"a":"div",{tag:"component",staticClass:"app-discover-post__text",attrs:{href:r.link,target:r.link?"_blank":void 0}},[a(r.inline?"h4":"h3",{tag:"component"},[r._v(r._s(r.translatedHeadline))]),r._v(" "),a("p",[r._v(r._s(r.translatedText))])],1):r._e(),r._v(" "),r.mediaSources?a(r.mediaLink?"a":"div",{tag:"component",staticClass:"app-discover-post__media",class:{"app-discover-post__media--fullwidth":r.isFullWidth,"app-discover-post__media--start":"start"===(null===(e=r.media)||void 0===e?void 0:e.alignment),"app-discover-post__media--end":"end"===(null===(t=r.media)||void 0===t?void 0:t.alignment)},attrs:{href:r.mediaLink,target:r.mediaLink?"_blank":void 0}},[a(r.isImage?"picture":"video",{ref:"mediaElement",tag:"component",staticClass:"app-discover-post__media-element",attrs:{muted:!r.isImage,playsinline:!r.isImage,preload:!r.isImage&&"auto"},on:{ended:function(e){r.hasPlaybackEnded=!0}}},[r._l(r.mediaSources,(function(e){return a("source",{key:e.src,attrs:{src:r.isImage?void 0:r.generatePrivacyUrl(e.src),srcset:r.isImage?r.generatePrivacyUrl(e.src):void 0,type:e.mime}})})),r._v(" "),r.isImage?a("img",{attrs:{src:r.generatePrivacyUrl(r.mediaSources[0].src),alt:r.mediaAlt}}):r._e()],2),r._v(" "),a("div",{staticClass:"app-discover-post__play-icon-wrapper"},[!r.isImage&&r.showPlayVideo?a("NcIconSvgWrapper",{staticClass:"app-discover-post__play-icon",attrs:{path:r.mdiPlayCircleOutline,size:92}}):r._e()],1)],1):r._e()],1)}),[],!1,null,"24eed252",null).exports}}]); -//# sourceMappingURL=8753-8753.js.map?v=79b1e1f3f1b7fdbe0988
\ No newline at end of file diff --git a/dist/8753-8753.js.LICENSE.txt b/dist/8753-8753.js.LICENSE.txt deleted file mode 100644 index b2a687cf184..00000000000 --- a/dist/8753-8753.js.LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -/** - * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de> - * - * @author Ferdinand Thiessen <opensource@fthiessen.de> - * - * @license AGPL-3.0-or-later - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ diff --git a/dist/8753-8753.js.map b/dist/8753-8753.js.map deleted file mode 100644 index 343197d0f2b..00000000000 --- a/dist/8753-8753.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"8753-8753.js?v=79b1e1f3f1b7fdbe0988","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/constants/AppDiscoverTypes.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/common.ts","webpack:///nextcloud/apps/settings/src/composables/useGetLocalizedValue.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/PostType.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/PostType.vue?1d19","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/PostType.vue?bdb8"],"sourcesContent":["/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/**\n * Currently known types of app discover section elements\n */\nexport const APP_DISCOVER_KNOWN_TYPES = ['post', 'showcase', 'carousel'];\n","import { APP_DISCOVER_KNOWN_TYPES } from '../../constants/AppDiscoverTypes.ts';\n/**\n * Common Props for all app discover types\n */\nexport const commonAppDiscoverProps = {\n type: {\n type: String,\n required: true,\n validator: (v) => typeof v === 'string' && APP_DISCOVER_KNOWN_TYPES.includes(v),\n },\n id: {\n type: String,\n required: true,\n },\n date: {\n type: Number,\n required: false,\n default: undefined,\n },\n expiryDate: {\n type: Number,\n required: false,\n default: undefined,\n },\n headline: {\n type: Object,\n required: false,\n default: () => null,\n },\n link: {\n type: String,\n required: false,\n default: () => null,\n },\n};\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLanguage } from '@nextcloud/l10n';\nimport { computed } from 'vue';\n/**\n * Helper to get the localized value for the current users language\n * @param dict The dictionary to get the value from\n * @param language The language to use\n */\nconst getLocalizedValue = (dict, language) => dict[language] ?? dict[language.split('_')[0]] ?? dict.en ?? null;\n/**\n * Get the localized value of the dictionary provided\n * @param dict Dictionary\n * @return String or null if invalid dictionary\n */\nexport const useLocalizedValue = (dict) => {\n /**\n * Language of the current user\n */\n const language = getLanguage();\n return computed(() => !dict?.value ? null : getLocalizedValue(dict.value, language));\n};\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover-post[data-v-24eed252]{width:100%;background-color:var(--color-primary-element-light);border-radius:var(--border-radius-rounded);display:flex;flex-direction:row}.app-discover-post--reverse[data-v-24eed252]{flex-direction:row-reverse}.app-discover-post h3[data-v-24eed252],.app-discover-post h4[data-v-24eed252]{font-size:24px;font-weight:600;margin-block:0 1em}.app-discover-post__text[data-v-24eed252]{display:block;padding:var(--border-radius-rounded);width:100%}.app-discover-post__media[data-v-24eed252]{display:block;overflow:hidden;max-height:300px;max-width:450px;border-radius:var(--border-radius-rounded)}.app-discover-post__media--fullwidth[data-v-24eed252]{max-width:unset;max-height:unset}.app-discover-post__media--end[data-v-24eed252]{border-end-start-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-end-end-radius:0;border-start-end-radius:0}.app-discover-post__media img[data-v-24eed252],.app-discover-post__media-element[data-v-24eed252]{height:100%;width:100%;object-fit:cover;object-position:center}.app-discover-post__play-icon[data-v-24eed252]{position:absolute;top:-46px;right:-46px}.app-discover-post__play-icon-wrapper[data-v-24eed252]{position:relative;top:-50%;left:-50%}@media only screen and (max-width: 699px){.app-discover-post[data-v-24eed252]{flex-direction:column}.app-discover-post--reverse[data-v-24eed252]{flex-direction:column-reverse}.app-discover-post__media[data-v-24eed252]{min-width:100%}.app-discover-post__media--end[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-start-end-radius:0;border-start-start-radius:0}.app-discover-post__media--start[data-v-24eed252]{border-radius:var(--border-radius-rounded);border-end-end-radius:0;border-end-start-radius:0}}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/PostType.vue\"],\"names\":[],\"mappings\":\"AACA,oCACC,UAAA,CACA,mDAAA,CACA,0CAAA,CAEA,YAAA,CACA,kBAAA,CACA,6CACC,0BAAA,CAGD,8EACC,cAAA,CACA,eAAA,CACA,kBAAA,CAGD,0CACC,aAAA,CACA,oCAAA,CACA,UAAA,CAGD,2CACC,aAAA,CACA,eAAA,CAEA,gBAAA,CACA,eAAA,CACA,0CAAA,CAEA,sDACC,eAAA,CACA,gBAAA,CAGD,gDACC,yBAAA,CACA,2BAAA,CAGD,kDACC,uBAAA,CACA,yBAAA,CAGD,kGACC,WAAA,CACA,UAAA,CACA,gBAAA,CACA,sBAAA,CAIF,+CAOC,iBAAA,CACA,SAAA,CACA,WAAA,CARA,uDACC,iBAAA,CACA,QAAA,CACA,SAAA,CAUH,0CACC,oCACC,qBAAA,CAEA,6CACC,6BAAA,CAGD,2CACC,cAAA,CAEA,gDACC,0CAAA,CACA,yBAAA,CACA,2BAAA,CAGD,kDACC,0CAAA,CACA,uBAAA,CACA,yBAAA,CAAA\",\"sourcesContent\":[\"\\n.app-discover-post {\\n\\twidth: 100%;\\n\\tbackground-color: var(--color-primary-element-light);\\n\\tborder-radius: var(--border-radius-rounded);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\t&--reverse {\\n\\t\\tflex-direction: row-reverse;\\n\\t}\\n\\n\\th3, h4 {\\n\\t\\tfont-size: 24px;\\n\\t\\tfont-weight: 600;\\n\\t\\tmargin-block: 0 1em;\\n\\t}\\n\\n\\t&__text {\\n\\t\\tdisplay: block;\\n\\t\\tpadding: var(--border-radius-rounded);\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__media {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\n\\t\\tmax-height: 300px;\\n\\t\\tmax-width: 450px;\\n\\t\\tborder-radius: var(--border-radius-rounded);\\n\\n\\t\\t&--fullwidth {\\n\\t\\t\\tmax-width: unset;\\n\\t\\t\\tmax-height: unset;\\n\\t\\t}\\n\\n\\t\\t&--end {\\n\\t\\t\\tborder-end-start-radius: 0;\\n\\t\\t\\tborder-start-start-radius: 0;\\n\\t\\t}\\n\\n\\t\\t&--start {\\n\\t\\t\\tborder-end-end-radius: 0;\\n\\t\\t\\tborder-start-end-radius: 0;\\n\\t\\t}\\n\\n\\t\\timg, &-element {\\n\\t\\t\\theight: 100%;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tobject-fit: cover;\\n\\t\\t\\tobject-position: center;\\n\\t\\t}\\n\\t}\\n\\n\\t&__play-icon {\\n\\t\\t&-wrapper {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\ttop: -50%;\\n\\t\\t\\tleft: -50%;\\n\\t\\t}\\n\\n\\t\\tposition: absolute;\\n\\t\\ttop: -46px; // half of the icon height\\n\\t\\tright: -46px; // half of the icon width\\n\\t}\\n}\\n\\n// Ensure section works on mobile devices\\n@media only screen and (max-width: 699px) {\\n\\t.app-discover-post {\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&--reverse {\\n\\t\\t\\tflex-direction: column-reverse;\\n\\t\\t}\\n\\n\\t\\t&__media {\\n\\t\\t\\tmin-width: 100%;\\n\\n\\t\\t\\t&--end {\\n\\t\\t\\t\\tborder-radius: var(--border-radius-rounded);\\n\\t\\t\\t\\tborder-start-end-radius: 0;\\n\\t\\t\\t\\tborder-start-start-radius: 0;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&--start {\\n\\t\\t\\t\\tborder-radius: var(--border-radius-rounded);\\n\\t\\t\\t\\tborder-end-end-radius: 0;\\n\\t\\t\\t\\tborder-end-start-radius: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('article',{staticClass:\"app-discover-post\",class:{ 'app-discover-post--reverse': _vm.media && _vm.media.alignment === 'start' },attrs:{\"id\":_vm.domId}},[(_vm.headline || _vm.text)?_c(_vm.link ? 'a' : 'div',{tag:\"component\",staticClass:\"app-discover-post__text\",attrs:{\"href\":_vm.link,\"target\":_vm.link ? '_blank' : undefined}},[_c(_vm.inline ? 'h4' : 'h3',{tag:\"component\"},[_vm._v(_vm._s(_vm.translatedHeadline))]),_vm._v(\" \"),_c('p',[_vm._v(_vm._s(_vm.translatedText))])],1):_vm._e(),_vm._v(\" \"),(_vm.mediaSources)?_c(_vm.mediaLink ? 'a' : 'div',{tag:\"component\",staticClass:\"app-discover-post__media\",class:{\n\t\t\t'app-discover-post__media--fullwidth': _vm.isFullWidth,\n\t\t\t'app-discover-post__media--start': _vm.media?.alignment === 'start',\n\t\t\t'app-discover-post__media--end': _vm.media?.alignment === 'end',\n\t\t},attrs:{\"href\":_vm.mediaLink,\"target\":_vm.mediaLink ? '_blank' : undefined}},[_c(_vm.isImage ? 'picture' : 'video',{ref:\"mediaElement\",tag:\"component\",staticClass:\"app-discover-post__media-element\",attrs:{\"muted\":!_vm.isImage,\"playsinline\":!_vm.isImage,\"preload\":!_vm.isImage && 'auto'},on:{\"ended\":function($event){_vm.hasPlaybackEnded = true}}},[_vm._l((_vm.mediaSources),function(source){return _c('source',{key:source.src,attrs:{\"src\":_vm.isImage ? undefined : _vm.generatePrivacyUrl(source.src),\"srcset\":_vm.isImage ? _vm.generatePrivacyUrl(source.src) : undefined,\"type\":source.mime}})}),_vm._v(\" \"),(_vm.isImage)?_c('img',{attrs:{\"src\":_vm.generatePrivacyUrl(_vm.mediaSources[0].src),\"alt\":_vm.mediaAlt}}):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"app-discover-post__play-icon-wrapper\"},[(!_vm.isImage && _vm.showPlayVideo)?_c('NcIconSvgWrapper',{staticClass:\"app-discover-post__play-icon\",attrs:{\"path\":_vm.mdiPlayCircleOutline,\"size\":92}}):_vm._e()],1)],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PostType.vue?vue&type=template&id=24eed252&scoped=true\"\nimport script from \"./PostType.vue?vue&type=script&lang=ts\"\nexport * from \"./PostType.vue?vue&type=script&lang=ts\"\nimport style0 from \"./PostType.vue?vue&type=style&index=0&id=24eed252&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24eed252\",\n null\n \n)\n\nexport default component.exports"],"names":["APP_DISCOVER_KNOWN_TYPES","commonAppDiscoverProps","type","String","required","validator","v","includes","id","date","Number","default","undefined","expiryDate","headline","Object","link","useLocalizedValue","dict","language","getLanguage","computed","value","getLocalizedValue","_ref","_ref2","_dict$language","split","en","___CSS_LOADER_EXPORT___","push","module","defineComponent","components","NcIconSvgWrapper","props","text","media","inline","Boolean","domId","setup","translatedHeadline","translatedText","localizedMedia","_props$media","content","mediaSources","src","flat","mediaAlt","_localizedMedia$value","_localizedMedia$value2","alt","isImage","_mediaSources$value","mime","startsWith","isFullWidth","mediaLink","_localizedMedia$value3","_localizedMedia$value4","hasPlaybackEnded","ref","showPlayVideo","_localizedMedia$value5","mediaElement","mediaIsVisible","useElementVisibility","threshold","watchEffect","video","muted","play","pause","ended","currentTime","mdiPlayCircleOutline","generatePrivacyUrl","url","generateUrl","fileName","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm$media","_vm$media2","_vm","this","_c","_self","_setupProxy","staticClass","class","alignment","attrs","tag","_v","_s","_e","on","$event","_l","source","key"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/core-login.js b/dist/core-login.js index 60d1261fc0b..e2517728de5 100644 --- a/dist/core-login.js +++ b/dist/core-login.js @@ -1,3 +1,3 @@ /*! For license information please see core-login.js.LICENSE.txt */ -(()=>{var e,r,i,s={92126:(e,r,i)=>{"use strict";var s={};i.r(s),i.d(s,{exclude:()=>Vt,extract:()=>Mt,parse:()=>Dt,parseUrl:()=>zt,pick:()=>qt,stringify:()=>$t,stringifyUrl:()=>Ht});var o=i(85471),a=i(61338),l=i(4523),u=i(74692),c=i.n(u),d=i(85168),h=i(96763);const f={updatableNotification:null,getDefaultNotificationFunction:null,setDefault(t){this.getDefaultNotificationFunction=t},hide(t,e){l.default.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){c()(this)[0].toastify?c()(this)[0].toastify.hideToast():h.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):h.error("Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification")},showHtml(t,e){(e=e||{}).isHTML=!0,e.timeout=e.timeout?e.timeout:d.DH;const n=(0,d.rG)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},show(t,e){(e=e||{}).timeout=e.timeout?e.timeout:d.DH;const n=(0,d.rG)(function(t){return t.toString().split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}(t),e);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,d.rG)(t,{timeout:d.DH}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary(t,e){(e=e||{}).timeout=e.timeout||d.aR;const n=(0,d.rG)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:()=>!c()("#content").find(".toastify").length},p=l.default.throttle((()=>{f.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1});let m=!1;const g={enableDynamicSlideToggle(){m=!0},showAppSidebar:function(t){(t||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(t){(t||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};var v=i(99498);function y(t,e,n){"post"!==t&&"delete"!==t||!wt.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:t.toUpperCase(),url:(0,v.KT)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):wt.PasswordConfirmation.requirePasswordConfirmation(_.bind(y,this,t,e,n))}const b=window.oc_appconfig||{},w={getValue:function(t,e,n,r){!function(t,e,n,r){(r=r||{}).data={defaultValue:n},y("get","/"+t+"/"+e,r)}(t,e,n,{success:r})},setValue:function(t,e,n){!function(t,e,n,r){(r=r||{}).data={value:n},y("post","/"+t+"/"+e,r)}(t,e,n)},getApps:function(t){!function(t){y("get","",t)}({success:t})},getKeys:function(t,e){!function(t,e){y("get","/"+t,e)}(t,{success:e})},deleteKey:function(t,e){!function(t,e,n){y("delete","/"+t+"/"+e,void 0)}(t,e)}},A=void 0!==window._oc_appswebroots&&window._oc_appswebroots;var x=i(21391),C=i.n(x),k=i(78112),N=i(96763);const E={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function P(t,e){if(l.default.isArray(t))return l.default.map(t,(function(t){return P(t,e)}));var n={href:t.href};return l.default.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var r in t.properties){var i=r;r in e&&(i=e[r]),n[i]=t.properties[r]}})),n.id||(n.id=j(n.href)),n}function j(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,r=t.split("/");do{n=r[r.length-1],r.pop()}while(!n&&r.length>0);return n}function S(t){return t>=200&&t<=299}function T(t,e,n,r){return t.propPatch(e.url,function(t,e){var n,r={};for(n in t){var i=e[n],s=t[n];i||(N.warn('No matching DAV property for property "'+n),i=n),(l.default.isBoolean(s)||l.default.isNumber(s))&&(s=""+s),r[i]=s}return r}(n.changed,e.davProperties),r).then((function(t){S(t.status)?l.default.isFunction(e.success)&&e.success(n.toJSON()):l.default.isFunction(e.error)&&e.error(t)}))}const O=C().noConflict();Object.assign(O,{davCall:(t,e)=>{var n=new k.dav.Client({baseUrl:t.url,xmlNamespaces:l.default.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var r=l.default.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,r){return t.propFind(e.url,l.default.values(e.davProperties)||[],e.depth,r).then((function(t){if(S(t.status)){if(l.default.isFunction(e.success)){var n=l.default.invert(e.davProperties),r=P(t.body,n);e.depth>0&&r.shift(),e.success(r)}}else l.default.isFunction(e.error)&&e.error(t)}))}(n,t,0,r):"PROPPATCH"===t.type?T(n,t,e,r):"MKCOL"===t.type?function(t,e,n,r){return t.request(e.type,e.url,r,null).then((function(i){S(i.status)?T(t,e,n,r):l.default.isFunction(e.error)&&e.error(i)}))}(n,t,e,r):function(t,e,n,r){return r["Content-Type"]="application/json",t.request(e.type,e.url,r,e.data).then((function(t){if(S(t.status)){if(l.default.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var r=t.body||n.toJSON(),i=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&i&&(r.id=j(i)),void e.success(r)}if(207===t.status){var s=l.default.invert(e.davProperties);e.success(P(t.body,s))}else e.success(t.body)}}else l.default.isFunction(e.error)&&e.error(t)}))}(n,t,e,r)},davSync:(t=>(e,n,r)=>{var i={type:E[e]||e},s=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?i.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(i.type="PUT")),r.url||(i.url=l.default.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=r.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(i.data=JSON.stringify(r.attrs||n.toJSON(r))),"PROPFIND"!==i.type&&(i.processData=!1),"PROPFIND"===i.type||"PROPPATCH"===i.type){var o=n.davProperties;!o&&n.model&&(o=n.model.prototype.davProperties),o&&(l.default.isFunction(o)?i.davProperties=o.call(n):i.davProperties=o),i.davProperties=l.default.extend(i.davProperties||{},r.davProperties),l.default.isUndefined(r.depth)&&(r.depth=s?1:0)}var a=r.error;r.error=function(t,e,n){r.textStatus=e,r.errorThrown=n,a&&a.call(r.context,t,e,n)};var u=r.xhr=t.davCall(l.default.extend(i,r),n);return n.trigger("request",n,u,r),u})(O)});const I=O;var L=i(71089);const R=window._oc_config||{},F=document.getElementsByTagName("head")[0].getAttribute("data-user"),B=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),U=void 0!==F&&F;var M=i(39285),D=i(36882),$=i(43627);const z={YES_NO_BUTTONS:70,OK_BUTTONS:71,FILEPICKER_TYPE_CHOOSE:1,FILEPICKER_TYPE_MOVE:2,FILEPICKER_TYPE_COPY:3,FILEPICKER_TYPE_COPY_MOVE:4,FILEPICKER_TYPE_CUSTOM:5,dialogsCounter:0,alert:function(t,e,n,r){this.message(t,e,"alert",z.OK_BUTTON,n,r)},info:function(t,e,n,r){this.message(t,e,"info",z.OK_BUTTON,n,r)},confirm:function(t,e,n,r){return this.message(t,e,"notice",z.YES_NO_BUTTONS,n,r)},confirmDestructive:function(t,e,n,r,i){return this.message(t,e,"none",n,r,void 0===i||i)},confirmHtml:function(t,e,n,r){return this.message(t,e,"notice",z.YES_NO_BUTTONS,n,r,!0)},prompt:function(e,n,r,i,s,o){return c().when(this._getMessageTemplate()).then((function(a){var u="oc-dialog-"+z.dialogsCounter+"-content",d="#"+u,h=a.octemplate({dialog_name:u,title:n,message:e,type:"notice"}),f=c()("<input/>");f.attr("type",o?"password":"text").attr("id",u+"-input").attr("placeholder",s);var p=c()("<label/>").attr("for",u+"-input").text(s+": ");h.append(p),h.append(f),void 0===i&&(i=!1),c()("body").append(h),void 0!==r&&(r=l.default.once(r));var m=[{text:t("core","No"),click:function(){void 0!==r&&r(!1,f.val()),c()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==r&&r(!0,f.val()),c()(d).ocdialog("close")},defaultButton:!0}];c()(d).ocdialog({closeOnEscape:!0,modal:i,buttons:m,close:function(){void 0!==r&&r(!1,f.val())}}),f.focus(),z.dialogsCounter++}))},filepicker(e,n){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:d.bh.Choose,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:void 0,a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:void 0;const l=(t,e)=>{const n=t=>{const e=(null==t?void 0:t.root)||"";let n=(null==t?void 0:t.path)||"";return n.startsWith(e)&&(n=n.slice(e.length)||"/"),n};return r?r=>t(r.map(n),e):r=>t(n(r[0]),e)},u=(0,d.a1)(e);s===this.FILEPICKER_TYPE_CUSTOM?(a.buttons||[]).forEach((t=>{u.addButton({callback:l(n,t.type),label:t.text,type:t.defaultButton?"primary":"secondary"})})):u.setButtonFactory(((e,r)=>{var i,o;const a=[],u=(null==e||null===(i=e[0])||void 0===i||null===(i=i.attributes)||void 0===i?void 0:i.displayName)||(null==e||null===(o=e[0])||void 0===o?void 0:o.basename),c=u||(0,$.basename)(r);return s===d.bh.Choose&&a.push({callback:l(n,d.bh.Choose),label:u&&!this.multiSelect?t("core","Choose {file}",{file:u}):t("core","Choose"),type:"primary"}),s!==d.bh.CopyMove&&s!==d.bh.Copy||a.push({callback:l(n,d.bh.Copy),label:c?t("core","Copy to {target}",{target:c}):t("core","Copy"),type:"primary",icon:D}),s!==d.bh.Move&&s!==d.bh.CopyMove||a.push({callback:l(n,d.bh.Move),label:c?t("core","Move to {target}",{target:c}):t("core","Move"),type:s===d.bh.Move?"primary":"secondary",icon:M}),a})),i&&u.setMimeTypeFilter("string"==typeof i?[i]:i||[]),"function"==typeof(null==a?void 0:a.filter)&&u.setFilter((t=>a.filter((t=>{var e,n,r,i,s,o;return{id:t.fileid||null,path:t.path,mimetype:t.mime||null,mtime:(null===(e=t.mtime)||void 0===e?void 0:e.getTime())||null,permissions:t.permissions,name:(null===(n=t.attributes)||void 0===n?void 0:n.displayName)||t.basename,etag:(null===(r=t.attributes)||void 0===r?void 0:r.etag)||null,hasPreview:(null===(i=t.attributes)||void 0===i?void 0:i.hasPreview)||null,mountType:(null===(s=t.attributes)||void 0===s?void 0:s.mountType)||null,quotaAvailableBytes:(null===(o=t.attributes)||void 0===o?void 0:o.quotaAvailableBytes)||null,icon:null,sharePermissions:null}})(t)))),u.allowDirectories(!0===(null==a?void 0:a.allowDirectoryChooser)||(null==i?void 0:i.includes("httpd/unix-directory"))||!1).setMultiSelect(r).startAt(o).build().pick()},message:function(e,n,r,i,s,o,a){return c().when(this._getMessageTemplate()).then((function(l){var u="oc-dialog-"+z.dialogsCounter+"-content",d="#"+u,h=l.octemplate({dialog_name:u,title:n,message:e,type:r},a?{escapeFunction:""}:{});void 0===o&&(o=!1),c()("body").append(h);var f=[];switch(i){case z.YES_NO_BUTTONS:f=[{text:t("core","No"),click:function(){void 0!==s&&s(!1),c()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==s&&s(!0),c()(d).ocdialog("close")},defaultButton:!0}];break;case z.OK_BUTTON:f[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==s&&s()},defaultButton:!0};break;default:"object"==typeof i&&i.type===z.YES_NO_BUTTONS&&(f=[{text:i.cancel||t("core","No"),click:function(){void 0!==s&&s(!1),c()(d).ocdialog("close")}},{text:i.confirm||t("core","Yes"),click:function(){void 0!==s&&s(!0),c()(d).ocdialog("close")},defaultButton:!0,classes:i.confirmClasses}])}c()(d).ocdialog({closeOnEscape:!0,closeCallback:()=>{s&&s(!1)},modal:o,buttons:f}),z.dialogsCounter++})).fail((function(r,i){0===r?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:i}))}))},_fileexistsshown:!1,fileexists:function(e,r,i,s){var o=this,a=new(c().Deferred),l=function(t,e,n,r,i){r=Math.round(r),i=Math.round(i);for(var s=t.getContext("2d").getImageData(0,0,e,n),o=t.getContext("2d").getImageData(0,0,r,i),a=s.data,l=o.data,u=e/r,c=n/i,d=Math.ceil(u/2),h=Math.ceil(c/2),f=0;f<i;f++)for(var p=0;p<r;p++){for(var m=4*(p+f*r),g=0,v=0,y=0,b=0,w=0,A=0,_=0,x=(f+.5)*c,C=Math.floor(f*c);C<(f+1)*c;C++)for(var k=Math.abs(x-(C+.5))/h,N=(p+.5)*u,E=k*k,P=Math.floor(p*u);P<(p+1)*u;P++){var j=Math.abs(N-(P+.5))/d,S=Math.sqrt(E+j*j);S>=-1&&S<=1&&(g=2*S*S*S-3*S*S+1)>0&&(_+=g*a[3+(j=4*(P+C*e))],y+=g,a[j+3]<255&&(g=g*a[j+3]/250),b+=g*a[j],w+=g*a[j+1],A+=g*a[j+2],v+=g)}l[m]=b/v,l[m+1]=w/v,l[m+2]=A/v,l[m+3]=_/y}t.getContext("2d").clearRect(0,0,Math.max(e,r),Math.max(n,i)),t.width=r,t.height=i,t.getContext("2d").putImageData(o,0,0)},u=function(n,r,i){var s=n.find(".template").clone().removeClass("template").addClass("conflict"),o=s.find(".original"),a=s.find(".replacement");s.data("data",e),s.find(".filename").text(r.name),o.find(".size").text(wt.Util.humanFileSize(r.size)),o.find(".mtime").text(wt.Util.formatDate(r.mtime)),i.size&&i.lastModified&&(a.find(".size").text(wt.Util.humanFileSize(i.size)),a.find(".mtime").text(wt.Util.formatDate(i.lastModified)));var u=r.directory+"/"+r.name,d={file:u,x:96,y:96,c:r.etag,forceIcon:0},h=Files.generatePreviewUrl(d);h=h.replace(/'/g,"%27"),o.find(".icon").css({"background-image":"url('"+h+"')"}),function(t){var e=new(c().Deferred),n=t.type&&t.type.split("/").shift();if(window.FileReader&&"image"===n){var r=new FileReader;r.onload=function(t){var n=new Blob([t.target.result]);window.URL=window.URL||window.webkitURL;var r=window.URL.createObjectURL(n),i=new Image;i.src=r,i.onload=function(){var t,n,r,s,o,a,u,c=(t=i,o=document.createElement("canvas"),a=t.width,u=t.height,a>u?(r=0,n=(a-u)/2):(r=(u-a)/2,n=0),s=Math.min(a,u),o.width=s,o.height=s,o.getContext("2d").drawImage(t,n,r,s,s,0,0,s,s),l(o,s,s,96,96),o.toDataURL("image/png",.7));e.resolve(c)}},r.readAsArrayBuffer(t)}else e.reject();return e}(i).then((function(t){a.find(".icon").css("background-image","url("+t+")")}),(function(){u=wt.MimeType.getIconUrl(i.type),a.find(".icon").css("background-image","url("+u+")")}));var f=n.find(".conflict").length;o.find("input:checkbox").attr("id","checkbox_original_"+f),a.find("input:checkbox").attr("id","checkbox_replacement_"+f),n.append(s),i.lastModified>r.mtime?a.find(".mtime").css("font-weight","bold"):i.lastModified<r.mtime&&o.find(".mtime").css("font-weight","bold"),i.size&&i.size>r.size?a.find(".size").css("font-weight","bold"):i.size&&i.size<r.size&&o.find(".size").css("font-weight","bold"),"readonly"===r.status&&(o.addClass("readonly").find('input[type="checkbox"]').prop("checked",!0).prop("disabled",!0),o.find(".message").text(t("core","read-only")))},d="oc-dialog-fileexists-content",h="#"+d;if(this._fileexistsshown){var f=c()(h+" .conflicts");u(f,r,i);var p=c()(h+" .conflict").length,m=n("core","{count} file conflict","{count} file conflicts",p,{count:p});c()(h).parent().children(".oc-dialog-title").text(m),c()(window).trigger("resize"),a.resolve()}else this._fileexistsshown=!0,c().when(this._getFileExistsTemplate()).then((function(n){var l=t("core","One file conflict"),f=n.octemplate({dialog_name:d,title:l,type:"fileexists",allnewfiles:t("core","New Files"),allexistingfiles:t("core","Already existing files"),why:t("core","Which files do you want to keep?"),what:t("core","If you select both versions, the copied file will have a number added to its name.")});if(c()("body").append(f),r&&i){var p=f.find(".conflicts");u(p,r,i)}var m=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==s.onCancel&&s.onCancel(e),c()(h).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==s.onContinue&&s.onContinue(c()(h+" .conflict")),c()(h).ocdialog("close")}}];c()(h).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:m,closeButton:null,close:function(){o._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(t){}}}),c()(h).css("height","auto");var g=f.closest(".oc-dialog").find("button.continue");function v(){var t=f.find(".conflicts .checkbox:checked").length;g.prop("disabled",0===t)}g.prop("disabled",!0),c()(h).find(".allnewfiles").on("click",(function(){c()(h).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(h).find(".allexistingfiles").on("click",(function(){c()(h).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(h).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=c()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),c()(h).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=c()(this);t.prop("checked",!t.prop("checked"))})),c()(h).on("click",".replacement,.allnewfiles",(function(){var e=c()(h).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(h+" .conflict").length?(c()(h).find(".allnewfiles").prop("checked",!0),c()(h).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(h).find(".allnewfiles").prop("checked",!1),c()(h).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(h).find(".allnewfiles").prop("checked",!1),c()(h).find(".allnewfiles + .count").text("")),v()})),c()(h).on("click",".original,.allexistingfiles",(function(){var e=c()(h).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(h+" .conflict").length?(c()(h).find(".allexistingfiles").prop("checked",!0),c()(h).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(h).find(".allexistingfiles").prop("checked",!1),c()(h).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(h).find(".allexistingfiles").prop("checked",!1),c()(h).find(".allexistingfiles + .count").text("")),v()})),a.resolve()})).fail((function(){a.reject(),alert(t("core","Error loading file exists template"))}));return a.promise()},_getMessageTemplate:function(){var t=c().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;c().get(wt.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=c()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,r){t.reject(e.status,r)}))}return t.promise()},_getFileExistsTemplate:function(){var t=c().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;c().get(wt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=c()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()}},H=z,q=((t,e)=>{let n=t.getElementsByTagName("head")[0].getAttribute("data-requesttoken");return{getToken:()=>n,setToken:t=>{n=t,e("csrf-token-update",{token:n})}}})(document,a.Ic),V=q.getToken,K=(q.setToken,function(t,e){var n,r,i="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},e)for(n in e)i+=n+"="+encodeURIComponent(e[n])+"&";if(i+="requesttoken="+encodeURIComponent(V()),this.useFallBack||"undefined"==typeof EventSource){var s="oc_eventsource_iframe_"+K.iframeCount;K.fallBackSources[K.iframeCount]=this,this.iframe=c()("<iframe></iframe>"),this.iframe.attr("id",s),this.iframe.hide(),r="&",-1===t.indexOf("?")&&(r="?"),this.iframe.attr("src",t+r+"fallback=true&fallback_id="+K.iframeCount+"&"+i),c()("body").append(this.iframe),this.useFallBack=!0,K.iframeCount++}else r="&",-1===t.indexOf("?")&&(r="?"),this.source=new EventSource(t+r+i),this.source.onmessage=function(t){for(var e=0;e<this.typelessListeners.length;e++)this.typelessListeners[e](JSON.parse(t.data))}.bind(this);this.listen("__internal__",function(t){"close"===t&&this.close()}.bind(this))});K.fallBackSources=[],K.iframeCount=0,K.fallBackCallBack=function(t,e,n){K.fallBackSources[t].fallBackCallBack(e,n)},K.prototype={typelessListeners:[],iframe:null,listeners:{},useFallBack:!1,fallBackCallBack:function(t,e){var n;if(!this.closed)if(t){if(void 0!==this.listeners.done)for(n=0;n<this.listeners[t].length;n++)this.listeners[t][n](e)}else for(n=0;n<this.typelessListeners.length;n++)this.typelessListeners[n](e)},lastLength:0,listen:function(t,e){e&&e.call&&(t?this.useFallBack?(this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)):this.source.addEventListener(t,(function(t){void 0!==t.data?e(JSON.parse(t.data)):e("")}),!1):this.typelessListeners.push(e))},close:function(){this.closed=!0,void 0!==this.source&&this.source.close()}};const Y=K;var W=i(22843),G=i(96763);let J=null,X=null;const Q=function(t){if(J){const e=J;J.trigger(new(c().Event)("beforeHide")),J.slideUp(50,(function(){e.trigger(new(c().Event)("afterHide")),t&&t.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),X&&X.attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),J=null,X=null},Z=!!window._oc_isadmin;var tt=i(93633),et=i.n(tt),nt=i(53334);const rt={load:nt.Zi,register:nt.kz,_unregister:nt.ht,translate:nt.Tl,translatePlural:nt.zw};et().registerHelper("t",(function(t,e){return(0,nt.Tl)(t,e)}));const it={startSaving(e){this.startAction(e,t("core","Saving …"))},startAction(t,e){c()(t).text(e).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving(t,e){this.finishedAction(t,e)},finishedAction(t,e){"success"===e.status?this.finishedSuccess(t,e.data.message):this.finishedError(t,e.data.message)},finishedSuccess(t,e){c()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError(t,e){c()(t).text(e).addClass("error").removeClass("success").show()}};var st=i(56760);i(51257);const ot={requiresPasswordConfirmation:()=>(0,st.o)(),requirePasswordConfirmation(t,e,n){(0,st.C)().then(t,n)}},at={_plugins:{},register(t,e){let n=this._plugins[t];n||(n=this._plugins[t]=[]),n.push(e)},getPlugins(t){return this._plugins[t]||[]},attach(t,e,n){const r=this.getPlugins(t);for(let t=0;t<r.length;t++)r[t].attach&&r[t].attach(e,n)},detach(t,e,n){const r=this.getPlugins(t);for(let t=0;t<r.length;t++)r[t].detach&&r[t].detach(e,n)}},lt=window._theme||{};var ut=i(95093),ct=i.n(ut);const dt={_handlers:[],_pushState(t,e,n){let r;if(r="string"==typeof t?t:wt.buildQueryString(t),window.history.pushState){if(e=e||location.pathname+"?"+r,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51){const t=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]');for(let e,n=0,r=t.length;n<r;n++)e=t[n],e.style.fill=e.style.fill,e.style.stroke=e.style.stroke,e.removeAttribute("filter"),e.setAttribute("filter","url(#invert)")}n?window.history.replaceState(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+r,this._cancelPop=!0},pushState(t,e){this._pushState(t,e,!1)},replaceState(t,e){this._pushState(t,e,!0)},addOnPopStateHandler(t){this._handlers.push(t)},_parseHashQuery(){const t=window.location.hash,e=t.indexOf("?");return e>=0?t.substr(e+1):t.length?t.substr(1):""},_decodeQuery:t=>t.replace(/\+/g," "),parseUrlQuery(){const t=this._parseHashQuery();let e;return t&&(e=wt.parseQueryString(this._decodeQuery(t))),e=l.default.extend(e||{},wt.parseQueryString(this._decodeQuery(location.search))),e||{}},_onPopState(t){if(this._cancelPop)return void(this._cancelPop=!1);let e;if(this._handlers.length){e=t&&t.state,l.default.isString(e)?e=wt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(let t=0;t<this._handlers.length;t++)this._handlers[t](e)}}};var ht=i(35810),ft=i(96763);function pt(t){const e=[];let n,r=0,i=-1,s=0;for(;r<t.length;){n=t.charAt(r);const o=!s&&"."===n||n>="0"&&n<="9";o!==s&&(i++,e[i]="",s=o),e[i]+=n,r++}return e}const mt={History:dt,humanFileSize:ht.v7,computerFileSize(t){if("string"!=typeof t)return null;const e=t.toLowerCase().trim();let n=null;const r=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===r?null:(n=parseFloat(e),isFinite(n)?(r[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[r[5]]),n=Math.round(n),n):null)},formatDate:(t,e)=>(void 0===window.TESTING&&wt.debug&&ft.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",ct()(t).format(e)),relativeModifiedDate(e){void 0===window.TESTING&&wt.debug&&ft.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");const n=ct()().diff(ct()(e));return n>=0&&n<45e3?t("core","seconds ago"):ct()(e).fromNow()},getScrollBarWidth(){if(this._scrollBarWidth)return this._scrollBarWidth;const t=document.createElement("p");t.style.width="100%",t.style.height="200px";const e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);const n=t.offsetWidth;e.style.overflow="scroll";let r=t.offsetWidth;return n===r&&(r=e.clientWidth),document.body.removeChild(e),this._scrollBarWidth=n-r,this._scrollBarWidth},stripTime:t=>new Date(t.getFullYear(),t.getMonth(),t.getDate()),naturalSortCompare(t,e){let n;const r=pt(t),i=pt(e);for(n=0;r[n]&&i[n];n++)if(r[n]!==i[n]){const t=Number(r[n]),e=Number(i[n]);return t==r[n]&&e==i[n]?t-e:r[n].localeCompare(i[n],wt.getLanguage())}return r.length-i.length},waitFor(t,e){const n=function(){!0!==t()&&setTimeout(n,e)};n()},isCookieSetToValue(t,e){const n=document.cookie.split(";");for(let r=0;r<n.length;r++){const i=n[r].split("=");if(i[0].trim()===t&&i[1].trim()===e)return!0}return!1}},gt=window._oc_debug;let vt=window._oc_webroot;if(void 0===vt){vt=location.pathname;const t=vt.indexOf("/index.php/");vt=-1!==t?vt.substr(0,t):vt.substr(0,vt.lastIndexOf("/"))}const yt=vt;var bt=i(96763);const wt={coreApps:["","admin","log","core/search","core","3rdparty"],menuSpeed:50,PERMISSION_ALL:31,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_NONE:0,PERMISSION_READ:1,PERMISSION_SHARE:16,PERMISSION_UPDATE:2,TAG_FAVORITE:"_$!<Favorite>!$_",fileIsBlacklisted:t=>!!t.match(R.blacklist_files_regex),Apps:g,AppConfig:w,appConfig:b,appswebroots:A,Backbone:I,config:R,currentUser:U,dialogs:H,EventSource:Y,getCurrentUser:()=>({uid:U,displayName:B}),isUserAdmin:()=>Z,L10N:rt,_ajaxConnectionLostHandler:p,_processAjaxError:t=>{(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!wt._reloadCalled)&&(l.default.contains([302,303,307,401],t.status)&&wt.currentUser?setTimeout((function(){if(!wt._userIsNavigatingAway&&!wt._reloadCalled){let t=0;const e=5,r=setInterval((function(){f.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",e-t)),t>=e&&(clearInterval(r),wt.reload()),t++}),1e3);wt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){wt._userIsNavigatingAway||wt._reloadCalled||wt._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:t=>{t.addEventListener&&(t.addEventListener("load",(()=>{4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||c()(document).trigger(new(c().Event)("ajaxError"),t))})),t.addEventListener("error",(()=>{c()(document).trigger(new(c().Event)("ajaxError"),t)})))},getCapabilities:()=>(OC.debug&&G.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,W.F)()),hideMenus:Q,registerMenu:function(t,e,n,r){e.addClass("menu");const i="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(i?"click.menu":"click.menu keyup.menu",(function(i){i.preventDefault(),i.key&&"Enter"!==i.key||(e.is(J)?Q():(J&&Q(),!0===r&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),J=e,X=t))}))},showMenu:(t,e,n)=>{e.is(J)||(Q(),J=e,X=t,e.trigger(new(c().Event)("beforeShow")),e.show(),e.trigger(new(c().Event)("afterShow")),l.default.isFunction(n)&&n())},unregisterMenu:(t,e)=>{e.is(J)&&Q(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:L.P8,encodePath:L.O0,dirname:L.pD,isSamePath:L.ys,joinPaths:L.HS,getHost:()=>window.location.host,getHostName:()=>window.location.hostname,getPort:()=>window.location.port,getProtocol:()=>window.location.protocol.split(":")[0],getCanonicalLocale:nt.lO,getLocale:nt.JK,getLanguage:nt.Z0,buildQueryString:t=>t?c().map(t,(function(t,e){let n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):"",parseQueryString:t=>{let e,n;const r={};let i;if(!t)return null;e=t.indexOf("?"),e>=0&&(t=t.substr(e+1));const s=t.replace(/\+/g,"%20").split("&");for(let t=0;t<s.length;t++){const o=s[t];e=o.indexOf("="),n=e>=0?[o.substr(0,e),o.substr(e+1)]:[o],n.length&&(i=decodeURIComponent(n[0]),i&&(r[i]=n.length>1?decodeURIComponent(n[1]):null))}return r},msg:it,Notification:f,PasswordConfirmation:ot,Plugins:at,theme:lt,Util:mt,debug:gt,filePath:v.fg,generateUrl:v.Jv,get:(At=window,t=>{const e=t.split("."),n=e.pop();for(let t=0;t<e.length;t++)if(!(At=At[e[t]]))return!1;return At[n]}),set:(t=>(e,n)=>{const r=e.split("."),i=r.pop();for(let e=0;e<r.length;e++)t[r[e]]||(t[r[e]]={}),t=t[r[e]];return t[i]=n,n})(window),getRootPath:v.aU,imagePath:v.d0,redirect:t=>{window.location=t},reload:()=>{window.location.reload()},requestToken:V(),linkTo:v.uM,linkToOCS:(t,e)=>(0,v.KT)(t,{},{ocsVersion:e||1})+"/",linkToRemote:v.dC,linkToRemoteBase:t=>(0,v.aU)()+"/remote.php/"+t,webroot:yt};var At;(0,a.B1)("csrf-token-update",(t=>{OC.requestToken=t.token,bt.info("OC.requestToken changed",t.token)}));var _t=i(38613);const xt="%[a-f0-9]{2}",Ct=new RegExp("("+xt+")|([^%]+?)","gi"),kt=new RegExp("("+xt+")+","gi");function Nt(t,e){try{return[decodeURIComponent(t.join(""))]}catch{}if(1===t.length)return t;e=e||1;const n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],Nt(n),Nt(r))}function Et(t){try{return decodeURIComponent(t)}catch{let e=t.match(Ct)||[];for(let n=1;n<e.length;n++)e=(t=Nt(e,n).join("")).match(Ct)||[];return t}}function Pt(t,e){if("string"!=typeof t||"string"!=typeof e)throw new TypeError("Expected the arguments to be of type `string`");if(""===t||""===e)return[];const n=t.indexOf(e);return-1===n?[]:[t.slice(0,n),t.slice(n+e.length)]}function jt(t,e){const n={};if(Array.isArray(e))for(const r of e){const e=Object.getOwnPropertyDescriptor(t,r);e?.enumerable&&Object.defineProperty(n,r,e)}else for(const r of Reflect.ownKeys(t)){const i=Object.getOwnPropertyDescriptor(t,r);i.enumerable&&e(r,t[r],t)&&Object.defineProperty(n,r,i)}return n}const St=t=>null==t,Tt=t=>encodeURIComponent(t).replaceAll(/[!'()*]/g,(t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)),Ot=Symbol("encodeFragmentIdentifier");function It(t){if("string"!=typeof t||1!==t.length)throw new TypeError("arrayFormatSeparator must be single character string")}function Lt(t,e){return e.encode?e.strict?Tt(t):encodeURIComponent(t):t}function Rt(t,e){return e.decode?function(t){if("string"!=typeof t)throw new TypeError("Expected `encodedURI` to be of type `string`, got `"+typeof t+"`");try{return decodeURIComponent(t)}catch{return function(t){const e={"%FE%FF":"��","%FF%FE":"��"};let n=kt.exec(t);for(;n;){try{e[n[0]]=decodeURIComponent(n[0])}catch{const t=Et(n[0]);t!==n[0]&&(e[n[0]]=t)}n=kt.exec(t)}e["%C2"]="�";const r=Object.keys(e);for(const n of r)t=t.replace(new RegExp(n,"g"),e[n]);return t}(t)}}(t):t}function Ft(t){return Array.isArray(t)?t.sort():"object"==typeof t?Ft(Object.keys(t)).sort(((t,e)=>Number(t)-Number(e))).map((e=>t[e])):t}function Bt(t){const e=t.indexOf("#");return-1!==e&&(t=t.slice(0,e)),t}function Ut(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&"string"==typeof t&&""!==t.trim()?t=Number(t):!e.parseBooleans||null===t||"true"!==t.toLowerCase()&&"false"!==t.toLowerCase()||(t="true"===t.toLowerCase()),t}function Mt(t){const e=(t=Bt(t)).indexOf("?");return-1===e?"":t.slice(e+1)}function Dt(t,e){It((e={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,...e}).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case"index":return(t,n,r)=>{e=/\[(\d*)]$/.exec(t),t=t.replace(/\[\d*]$/,""),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case"bracket":return(t,n,r)=>{e=/(\[])$/.exec(t),t=t.replace(/\[]$/,""),e?void 0!==r[t]?r[t]=[...r[t],n]:r[t]=[n]:r[t]=n};case"colon-list-separator":return(t,n,r)=>{e=/(:list)$/.exec(t),t=t.replace(/:list$/,""),e?void 0!==r[t]?r[t]=[...r[t],n]:r[t]=[n]:r[t]=n};case"comma":case"separator":return(e,n,r)=>{const i="string"==typeof n&&n.includes(t.arrayFormatSeparator),s="string"==typeof n&&!i&&Rt(n,t).includes(t.arrayFormatSeparator);n=s?Rt(n,t):n;const o=i||s?n.split(t.arrayFormatSeparator).map((e=>Rt(e,t))):null===n?n:Rt(n,t);r[e]=o};case"bracket-separator":return(e,n,r)=>{const i=/(\[])$/.test(e);if(e=e.replace(/\[]$/,""),!i)return void(r[e]=n?Rt(n,t):n);const s=null===n?[]:n.split(t.arrayFormatSeparator).map((e=>Rt(e,t)));void 0!==r[e]?r[e]=[...r[e],...s]:r[e]=s};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[...[n[t]].flat(),e]:n[t]=e}}}(e),r=Object.create(null);if("string"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,"")))return r;for(const i of t.split("&")){if(""===i)continue;const t=e.decode?i.replaceAll("+"," "):i;let[s,o]=Pt(t,"=");void 0===s&&(s=t),o=void 0===o?null:["comma","separator","bracket-separator"].includes(e.arrayFormat)?o:Rt(o,e),n(Rt(s,e),o,r)}for(const[t,n]of Object.entries(r))if("object"==typeof n&&null!==n)for(const[t,r]of Object.entries(n))n[t]=Ut(r,e);else r[t]=Ut(n,e);return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce(((t,e)=>{const n=r[e];return t[e]=Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?Ft(n):n,t}),Object.create(null))}function $t(t,e){if(!t)return"";It((e={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...e}).arrayFormatSeparator);const n=n=>e.skipNull&&St(t[n])||e.skipEmptyString&&""===t[n],r=function(t){switch(t.arrayFormat){case"index":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,[Lt(e,t),"[",i,"]"].join("")]:[...n,[Lt(e,t),"[",Lt(i,t),"]=",Lt(r,t)].join("")]};case"bracket":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,[Lt(e,t),"[]"].join("")]:[...n,[Lt(e,t),"[]=",Lt(r,t)].join("")];case"colon-list-separator":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,[Lt(e,t),":list="].join("")]:[...n,[Lt(e,t),":list=",Lt(r,t)].join("")];case"comma":case"separator":case"bracket-separator":{const e="bracket-separator"===t.arrayFormat?"[]=":"=";return n=>(r,i)=>void 0===i||t.skipNull&&null===i||t.skipEmptyString&&""===i?r:(i=null===i?"":i,0===r.length?[[Lt(n,t),e,Lt(i,t)].join("")]:[[r,Lt(i,t)].join(t.arrayFormatSeparator)])}default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,Lt(e,t)]:[...n,[Lt(e,t),"=",Lt(r,t)].join("")]}}(e),i={};for(const[e,r]of Object.entries(t))n(e)||(i[e]=r);const s=Object.keys(i);return!1!==e.sort&&s.sort(e.sort),s.map((n=>{const i=t[n];return void 0===i?"":null===i?Lt(n,e):Array.isArray(i)?0===i.length&&"bracket-separator"===e.arrayFormat?Lt(n,e)+"[]":i.reduce(r(n),[]).join("&"):Lt(n,e)+"="+Lt(i,e)})).filter((t=>t.length>0)).join("&")}function zt(t,e){e={decode:!0,...e};let[n,r]=Pt(t,"#");return void 0===n&&(n=t),{url:n?.split("?")?.[0]??"",query:Dt(Mt(t),e),...e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:Rt(r,e)}:{}}}function Ht(t,e){e={encode:!0,strict:!0,[Ot]:!0,...e};const n=Bt(t.url).split("?")[0]||"";let r=$t({...Dt(Mt(t.url),{sort:!1}),...t.query},e);r&&=`?${r}`;let i=function(t){let e="";const n=t.indexOf("#");return-1!==n&&(e=t.slice(n)),e}(t.url);if("string"==typeof t.fragmentIdentifier){const r=new URL(n);r.hash=t.fragmentIdentifier,i=e[Ot]?r.hash:`#${t.fragmentIdentifier}`}return`${n}${r}${i}`}function qt(t,e,n){n={parseFragmentIdentifier:!0,[Ot]:!1,...n};const{url:r,query:i,fragmentIdentifier:s}=zt(t,n);return Ht({url:r,query:jt(i,e),fragmentIdentifier:s},n)}function Vt(t,e,n){return qt(t,Array.isArray(e)?t=>!e.includes(t):(t,n)=>!e(t,n),n)}const Kt=s;var Yt=i(16044),Wt=i(82182),Gt=i(48934),Jt=i(9518);const Xt={name:"LoginButton",components:{ArrowRight:i(9191).A,NcButton:Jt.A},props:{value:{type:String,default:t("core","Log in")},valueLoading:{type:String,default:t("core","Logging in …")},loading:{type:Boolean,required:!0},invertedColors:{type:Boolean,default:!1}}};var Qt=i(85072),Zt=i.n(Qt),te=i(97825),ee=i.n(te),ne=i(77659),re=i.n(ne),ie=i(55056),se=i.n(ie),oe=i(10540),ae=i.n(oe),le=i(41113),ue=i.n(le),ce=i(78658),de={};de.styleTagTransform=ue(),de.setAttributes=se(),de.insert=re().bind(null,"head"),de.domAPI=ee(),de.insertStyleElement=ae(),Zt()(ce.A,de),ce.A&&ce.A.locals&&ce.A.locals;var he=i(14486);const fe=(0,he.A)(Xt,(function(){var t=this,e=t._self._c;return e("NcButton",{attrs:{type:"primary","native-type":"submit",wide:!0},on:{click:function(e){return t.$emit("click")}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("div",{staticClass:"submit-wrapper__icon icon-loading-small-dark"}):e("ArrowRight",{staticClass:"submit-wrapper__icon"})]},proxy:!0}])},[t._v("\n\t"+t._s(t.loading?t.valueLoading:t.value)+"\n\t")])}),[],!1,null,"3fa8511b",null).exports,pe={name:"LoginForm",components:{LoginButton:fe,NcPasswordField:Yt.A,NcTextField:Wt.A,NcNoteCard:Gt.A},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},errors:{type:Array,default:()=>[]},messages:{type:Array,default:()=>[]},throttleDelay:{type:Number,default:0},autoCompleteAllowed:{type:Boolean,default:!0},directLogin:{type:Boolean,default:!1},emailStates:{type:Array,default:()=>[]}},data(){var e;return{loading:!1,timezone:null===(e=new Intl.DateTimeFormat)||void 0===e||null===(e=e.resolvedOptions())||void 0===e?void 0:e.timeZone,timezoneOffset:-(new Date).getTimezoneOffset()/60,headline:t("core","Log in to {productName}",{productName:OC.theme.name}),user:"",password:""}},computed:{isError(){return this.invalidPassword||this.userDisabled||this.throttleDelay>5e3},errorLabel(){return this.invalidPassword?t("core","Wrong login or password."):this.userDisabled?t("core","This account is disabled"):this.throttleDelay>5e3?t("core","We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds."):void 0},apacheAuthFailed(){return-1!==this.errors.indexOf("apacheAuthFailed")},csrfCheckFailed(){return-1!==this.errors.indexOf("csrfCheckFailed")},internalException(){return-1!==this.errors.indexOf("internalexception")},invalidPassword(){return-1!==this.errors.indexOf("invalidpassword")},userDisabled(){return-1!==this.errors.indexOf("userdisabled")},loadingIcon:()=>(0,v.d0)("core","loading-dark.gif"),loginActionUrl:()=>(0,v.Jv)("login"),emailEnabled(){return this.emailStates?this.emailStates.every((t=>"1"===t)):1},loginText(){return this.emailEnabled?t("core","Login with username or email"):t("core","Login with username")}},mounted(){""===this.username?this.$refs.user.$refs.inputField.$refs.input.focus():(this.user=this.username,this.$refs.password.$refs.inputField.$refs.input.focus())},methods:{updateUsername(){this.$emit("update:username",this.user)},submit(){this.loading=!0,this.$emit("submit")}}};var me=i(44578),ge={};ge.styleTagTransform=ue(),ge.setAttributes=se(),ge.insert=re().bind(null,"head"),ge.domAPI=ee(),ge.insertStyleElement=ae(),Zt()(me.A,ge),me.A&&me.A.locals&&me.A.locals;const ve=(0,he.A)(pe,(function(){var t=this,e=t._self._c;return e("form",{ref:"loginForm",staticClass:"login-form",attrs:{method:"post",name:"login",action:t.loginActionUrl},on:{submit:t.submit}},[e("fieldset",{staticClass:"login-form__fieldset",attrs:{"data-login-form":""}},[t.apacheAuthFailed?e("NcNoteCard",{attrs:{title:t.t("core","Server side authentication failed!"),type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),t.csrfCheckFailed?e("NcNoteCard",{attrs:{heading:t.t("core","Temporary error"),type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please try again."))+"\n\t\t")]):t._e(),t._v(" "),t.messages.length>0?e("NcNoteCard",t._l(t.messages,(function(n,r){return e("div",{key:r},[t._v("\n\t\t\t\t"+t._s(n)),e("br")])})),0):t._e(),t._v(" "),t.internalException?e("NcNoteCard",{class:t.t("core","An internal error occurred."),attrs:{type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please try again or contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"hidden",attrs:{id:"message"}},[e("img",{staticClass:"float-spinner",attrs:{alt:"",src:t.loadingIcon}}),t._v(" "),e("span",{attrs:{id:"messageText"}}),t._v(" "),e("div",{staticStyle:{clear:"both"}})]),t._v(" "),e("h2",{staticClass:"login-form__headline",attrs:{"data-login-form-headline":""},domProps:{innerHTML:t._s(t.headline)}}),t._v(" "),e("NcTextField",{ref:"user",class:{shake:t.invalidPassword},attrs:{id:"user",label:t.loginText,name:"user",value:t.user,autocapitalize:"none",spellchecking:!1,autocomplete:t.autoCompleteAllowed?"username":"off",required:"","data-login-form-input-user":""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("NcPasswordField",{ref:"password",class:{shake:t.invalidPassword},attrs:{id:"password",name:"password",value:t.password,spellchecking:!1,autocapitalize:"none",autocomplete:t.autoCompleteAllowed?"current-password":"off",label:t.t("core","Password"),"helper-text":t.errorLabel,error:t.isError,"data-login-form-input-password":"",required:""},on:{"update:value":function(e){t.password=e}}}),t._v(" "),e("LoginButton",{attrs:{"data-login-form-submit":"",loading:t.loading}}),t._v(" "),t.redirectUrl?e("input",{attrs:{type:"hidden",name:"redirect_url"},domProps:{value:t.redirectUrl}}):t._e(),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone"},domProps:{value:t.timezone}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone_offset"},domProps:{value:t.timezoneOffset}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"requesttoken"},domProps:{value:t.OC.requestToken}}),t._v(" "),t.directLogin?e("input",{attrs:{type:"hidden",name:"direct",value:"1"}}):t._e()],1)])}),[],!1,null,"8c18127a",null).exports;var ye=i(26287);const be={name:"InformationIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},we=(0,he.A)(be,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon information-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports,Ae={name:"LockOpenIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},_e=(0,he.A)(Ae,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon lock-open-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var xe=i(96763);class Ce extends Error{}const ke={name:"PasswordLessLoginForm",components:{LoginButton:fe,InformationIcon:we,LockOpenIcon:_e,NcTextField:Wt.A},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},autoCompleteAllowed:{type:Boolean,default:!0},isHttps:{type:Boolean,default:!1},isLocalhost:{type:Boolean,default:!1},hasPublicKeyCredential:{type:Boolean,default:!1}},data(){return{user:this.username,loading:!1,validCredentials:!0}},methods:{authenticate(){this.$refs.loginForm.checkValidity()&&(xe.debug("passwordless login initiated"),this.getAuthenticationData(this.user).then((t=>(xe.debug(t),t))).then(this.sign).then(this.completeAuthentication).catch((t=>{t instanceof Ce?this.validCredentials=!1:xe.debug(t)})))},changeUsername(t){this.user=t,this.$emit("update:username",this.user)},getAuthenticationData(t){const e=function(t){const e=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(e){if(1===e)throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");t+=new Array(5-e).join("=")}return window.atob(t)};return function(t){const e=(0,v.Jv)("/login/webauthn/start");return ye.A.post(e,{loginName:t}).then((t=>t.data))}(t).then((t=>{if(xe.debug("Obtained PublicKeyCredentialRequestOptions"),xe.debug(t),!Object.prototype.hasOwnProperty.call(t,"allowCredentials"))throw xe.debug("No credentials found."),new Ce;return t.challenge=Uint8Array.from(e(t.challenge),(t=>t.charCodeAt(0))),t.allowCredentials=t.allowCredentials.map((function(t){return{...t,id:Uint8Array.from(e(t.id),(t=>t.charCodeAt(0)))}})),xe.debug("Converted PublicKeyCredentialRequestOptions"),xe.debug(t),t})).catch((t=>{throw xe.debug("Error while obtaining data"),t}))},sign(t){const e=function(t){return window.btoa(String.fromCharCode(...t))};return navigator.credentials.get({publicKey:t}).then((t=>{return xe.debug(t),xe.debug(new Uint8Array(t.rawId)),xe.debug(e(new Uint8Array(t.rawId))),{id:t.id,type:t.type,rawId:e(new Uint8Array(t.rawId)),response:{authenticatorData:e(new Uint8Array(t.response.authenticatorData)),clientDataJSON:e(new Uint8Array(t.response.clientDataJSON)),signature:e(new Uint8Array(t.response.signature)),userHandle:t.response.userHandle?(n=new Uint8Array(t.response.userHandle),String.fromCharCode(...n)):null}};var n})).then((t=>(xe.debug(t),t))).catch((t=>{xe.debug("GOT AN ERROR!"),xe.debug(t)}))},completeAuthentication(t){xe.debug("TIME TO COMPLETE");const e=this.redirectUrl;return function(t){const e=(0,v.Jv)("/login/webauthn/finish");return ye.A.post(e,{data:t}).then((t=>t.data))}(JSON.stringify(t)).then((t=>{let{defaultRedirectUrl:n}=t;xe.debug("Logged in redirecting"),window.location.href=e||n})).catch((t=>{xe.debug("GOT AN ERROR WHILE SUBMITTING CHALLENGE!"),xe.debug(t)}))},submit(){}}};var Ne=i(96798),Ee={};Ee.styleTagTransform=ue(),Ee.setAttributes=se(),Ee.insert=re().bind(null,"head"),Ee.domAPI=ee(),Ee.insertStyleElement=ae(),Zt()(Ne.A,Ee),Ne.A&&Ne.A.locals&&Ne.A.locals;const Pe=(0,he.A)(ke,(function(){var t=this,e=t._self._c;return(t.isHttps||t.isLocalhost)&&t.hasPublicKeyCredential?e("form",{ref:"loginForm",attrs:{method:"post",name:"login"},on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("core","Log in with a device")))]),t._v(" "),e("fieldset",[e("NcTextField",{attrs:{required:"",value:t.user,autocomplete:t.autoCompleteAllowed?"on":"off",error:!t.validCredentials,label:t.t("core","Login or email"),placeholder:t.t("core","Login or email"),"helper-text":t.validCredentials?"":t.t("core","Your account is not setup for passwordless login.")},on:{"update:value":t.changeUsername}}),t._v(" "),t.validCredentials?e("LoginButton",{attrs:{loading:t.loading},on:{click:t.authenticate}}):t._e()],1)]):t.hasPublicKeyCredential?t.isHttps||t.isLocalhost?t._e():e("div",{staticClass:"update"},[e("LockOpenIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Your connection is not secure")))]),t._v(" "),e("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is only available over a secure connection."))+"\n\t")])],1):e("div",{staticClass:"update"},[e("InformationIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Browser not supported")))]),t._v(" "),e("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is not supported in your browser."))+"\n\t")])],1)}),[],!1,null,"1b2e37de",null).exports;var je=i(96763);const Se={name:"ResetPassword",components:{LoginButton:fe,NcNoteCard:Gt.A,NcTextField:Wt.A},props:{username:{type:String,required:!0},resetPasswordLink:{type:String,required:!0}},data(){return{error:!1,loading:!1,message:void 0,user:this.username}},watch:{username(t){this.user=t}},methods:{updateUsername(){this.$emit("update:username",this.user)},submit(){this.loading=!0,this.error=!1,this.message="";const t=(0,v.Jv)("/lostpassword/email"),e={user:this.user};return ye.A.post(t,e).then((t=>t.data)).then((t=>{if("success"!==t.status)throw new Error("got status ".concat(t.status));this.message="send-success"})).catch((t=>{je.error("could not send reset email request",t),this.error=!0,this.message="send-error"})).then((()=>{this.loading=!1}))}}};var Te=i(42467),Oe={};Oe.styleTagTransform=ue(),Oe.setAttributes=se(),Oe.insert=re().bind(null,"head"),Oe.domAPI=ee(),Oe.insertStyleElement=ae(),Zt()(Te.A,Oe),Te.A&&Te.A.locals&&Te.A.locals;const Ie=(0,he.A)(Se,(function(){var t=this,e=t._self._c;return e("form",{staticClass:"login-form",on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",{staticClass:"login-form__fieldset"},[e("NcTextField",{attrs:{id:"user",value:t.user,name:"user",autocapitalize:"off",label:t.t("core","Login or email"),required:""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("LoginButton",{attrs:{value:t.t("core","Reset password")}}),t._v(" "),"send-success"===t.message?e("NcNoteCard",{attrs:{type:"success"}},[t._v("\n\t\t\t"+t._s(t.t("core","If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or Login, check your spam/junk folders or ask your local administration for help."))+"\n\t\t")]):"send-error"===t.message?e("NcNoteCard",{attrs:{type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Couldn't send reset email. Please contact your administrator."))+"\n\t\t")]):"reset-error"===t.message?e("NcNoteCard",{attrs:{type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Password cannot be changed. Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("a",{staticClass:"login-form__link",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.$emit("abort")}}},[t._v("\n\t\t\t"+t._s(t.t("core","Back to login"))+"\n\t\t")])],1)])}),[],!1,null,"2507998a",null).exports,Le={name:"UpdatePassword",components:{LoginButton:fe},props:{username:{type:String,required:!0},resetPasswordTarget:{type:String,required:!0}},data(){return{error:!1,loading:!1,message:void 0,user:this.username,password:"",encrypted:!1,proceed:!1}},watch:{username(t){this.user=t}},methods:{async submit(){this.loading=!0,this.error=!1,this.message="";try{const{data:t}=await ye.A.post(this.resetPasswordTarget,{password:this.password,proceed:this.proceed});if(t&&"success"===t.status)this.message="send-success",this.$emit("update:username",this.user),this.$emit("done");else{if(!t||!t.encryption)throw t&&t.msg?new Error(t.msg):new Error;this.encrypted=!0}}catch(e){this.error=!0,this.message=e.message?e.message:t("core","Password cannot be changed. Please contact your administrator.")}finally{this.loading=!1}}}};var Re=i(60260),Fe={};Fe.styleTagTransform=ue(),Fe.setAttributes=se(),Fe.insert=re().bind(null,"head"),Fe.domAPI=ee(),Fe.insertStyleElement=ae(),Zt()(Re.A,Fe),Re.A&&Re.A.locals&&Re.A.locals;const Be=(0,he.A)(Le,(function(){var t=this,e=t._self._c;return e("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",[e("p",[e("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("core","New password")))]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.password,expression:"password"}],attrs:{id:"password",type:"password",name:"password",autocomplete:"new-password",autocapitalize:"none",spellcheck:"false",required:"",placeholder:t.t("core","New password")},domProps:{value:t.password},on:{input:function(e){e.target.composing||(t.password=e.target.value)}}})]),t._v(" "),t.encrypted?e("div",{staticClass:"update"},[e("p",[t._v("\n\t\t\t\t"+t._s(t.t("core","Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?"))+"\n\t\t\t")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.proceed,expression:"proceed"}],staticClass:"checkbox",attrs:{id:"encrypted-continue",type:"checkbox"},domProps:{checked:Array.isArray(t.proceed)?t._i(t.proceed,null)>-1:t.proceed},on:{change:function(e){var n=t.proceed,r=e.target,i=!!r.checked;if(Array.isArray(n)){var s=t._i(n,null);r.checked?s<0&&(t.proceed=n.concat([null])):s>-1&&(t.proceed=n.slice(0,s).concat(n.slice(s+1)))}else t.proceed=i}}}),t._v(" "),e("label",{attrs:{for:"encrypted-continue"}},[t._v("\n\t\t\t\t"+t._s(t.t("core","I know what I'm doing"))+"\n\t\t\t")])]):t._e(),t._v(" "),e("LoginButton",{attrs:{loading:t.loading,value:t.t("core","Reset password"),"value-loading":t.t("core","Resetting password")}}),t._v(" "),t.error&&t.message?e("p",{class:{warning:t.error}},[t._v("\n\t\t\t"+t._s(t.message)+"\n\t\t")]):t._e()],1)])}),[],!1,null,"b9d4933a",null).exports;var Ue=i(96763);const Me=Kt.parse(location.search);if("1"===Me.clear)try{window.localStorage.clear(),window.sessionStorage.clear(),Ue.debug("Browser storage cleared")}catch(t){Ue.error("Could not clear browser storage",t)}const De={name:"Login",components:{LoginForm:ve,PasswordLessLoginForm:Pe,ResetPassword:Ie,UpdatePassword:Be,NcButton:Jt.A,NcNoteCard:Gt.A},data:()=>({loading:!1,user:(0,_t.C)("core","loginUsername",""),passwordlessLogin:!1,resetPassword:!1,errors:(0,_t.C)("core","loginErrors",[]),messages:(0,_t.C)("core","loginMessages",[]),redirectUrl:(0,_t.C)("core","loginRedirectUrl",!1),throttleDelay:(0,_t.C)("core","loginThrottleDelay",0),canResetPassword:(0,_t.C)("core","loginCanResetPassword",!1),resetPasswordLink:(0,_t.C)("core","loginResetPasswordLink",""),autoCompleteAllowed:(0,_t.C)("core","loginAutocomplete",!0),resetPasswordTarget:(0,_t.C)("core","resetPasswordTarget",""),resetPasswordUser:(0,_t.C)("core","resetPasswordUser",""),directLogin:"1"===Me.direct,hasPasswordless:(0,_t.C)("core","webauthn-available",!1),countAlternativeLogins:(0,_t.C)("core","countAlternativeLogins",!1),alternativeLogins:(0,_t.C)("core","alternativeLogins",[]),isHttps:"https:"===window.location.protocol,isLocalhost:"localhost"===window.location.hostname,hasPublicKeyCredential:void 0!==window.PublicKeyCredential,hideLoginForm:(0,_t.C)("core","hideLoginForm",!1),emailStates:(0,_t.C)("core","emailStates",[])}),methods:{passwordResetFinished(){this.resetPasswordTarget="",this.directLogin=!0}}};var $e=i(58552),ze={};ze.styleTagTransform=ue(),ze.setAttributes=se(),ze.insert=re().bind(null,"head"),ze.domAPI=ee(),ze.insertStyleElement=ae(),Zt()($e.A,ze),$e.A&&$e.A.locals&&$e.A.locals;const He=(0,he.A)(De,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"guest-box login-box"},[!t.hideLoginForm||t.directLogin?[e("transition",{attrs:{name:"fade",mode:"out-in"}},[t.passwordlessLogin||t.resetPassword||""!==t.resetPasswordTarget?!t.loading&&t.passwordlessLogin?e("div",{key:"reset",staticClass:"login-additional login-passwordless"},[e("PasswordLessLoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"auto-complete-allowed":t.autoCompleteAllowed,"is-https":t.isHttps,"is-localhost":t.isLocalhost,"has-public-key-credential":t.hasPublicKeyCredential},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),e("NcButton",{attrs:{type:"tertiary","aria-label":t.t("core","Back to login form"),wide:!0},on:{click:function(e){t.passwordlessLogin=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Back"))+"\n\t\t\t\t")])],1):!t.loading&&t.canResetPassword?e("div",{key:"reset",staticClass:"login-additional"},[e("div",{staticClass:"lost-password-container"},[t.resetPassword?e("ResetPassword",{attrs:{username:t.user,"reset-password-link":t.resetPasswordLink},on:{"update:username":function(e){t.user=e},abort:function(e){t.resetPassword=!1}}}):t._e()],1)]):""!==t.resetPasswordTarget?e("div",[e("UpdatePassword",{attrs:{username:t.user,"reset-password-target":t.resetPasswordTarget},on:{"update:username":function(e){t.user=e},done:t.passwordResetFinished}})],1):t._e():e("div",[e("LoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"direct-login":t.directLogin,messages:t.messages,errors:t.errors,"throttle-delay":t.throttleDelay,"auto-complete-allowed":t.autoCompleteAllowed,"email-states":t.emailStates},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),t.canResetPassword&&""!==t.resetPasswordLink?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t.canResetPassword&&!t.resetPassword?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink},on:{click:function(e){e.preventDefault(),t.resetPassword=!0}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t._e(),t._v(" "),t.hasPasswordless?[t.countAlternativeLogins?e("div",{staticClass:"alternative-logins"},[t.hasPasswordless?e("a",{staticClass:"button",class:{"single-alt-login-option":t.countAlternativeLogins},attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t\t")]):t._e()]):e("a",{attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t")])]:t._e()],2)])]:[e("transition",{attrs:{name:"fade",mode:"out-in"}},[e("NcNoteCard",{attrs:{type:"warning",title:t.t("core","Login form is disabled.")}},[t._v("\n\t\t\t\t"+t._s(t.t("core","Please contact your administrator."))+"\n\t\t\t")])],1)],t._v(" "),e("div",{staticClass:"alternative-logins",attrs:{id:"alternative-logins"}},t._l(t.alternativeLogins,(function(n,r){return e("NcButton",{key:r,class:[n.class],attrs:{type:"secondary",wide:!0,role:"link",href:n.href}},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t")])})),1)],2)}),[],!1,null,null,null).exports,qe={data:()=>({OC:wt}),methods:{t:rt.translate.bind(rt),n:rt.translatePlural.bind(rt)}};o.Ay.mixin(qe),(new(o.Ay.extend(He))).$mount("#login")},21391:(t,e,n)=>{var r,i,s;s="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g,r=[n(4523),n(74692),e],i=function(t,e,n){s.Backbone=function(t,e,n,r){var i=t.Backbone,s=Array.prototype.slice;e.VERSION="1.6.0",e.$=r,e.noConflict=function(){return t.Backbone=i,this},e.emulateHTTP=!1,e.emulateJSON=!1;var o,a=e.Events={},l=/\s+/,u=function(t,e,r,i,s){var o,a=0;if(r&&"object"==typeof r){void 0!==i&&"context"in s&&void 0===s.context&&(s.context=i);for(o=n.keys(r);a<o.length;a++)e=u(t,e,o[a],r[o[a]],s)}else if(r&&l.test(r))for(o=r.split(l);a<o.length;a++)e=t(e,o[a],i,s);else e=t(e,r,i,s);return e};a.on=function(t,e,n){return this._events=u(c,this._events||{},t,e,{context:n,ctx:this,listening:o}),o&&((this._listeners||(this._listeners={}))[o.id]=o,o.interop=!1),this},a.listenTo=function(t,e,r){if(!t)return this;var i=t._listenId||(t._listenId=n.uniqueId("l")),s=this._listeningTo||(this._listeningTo={}),a=o=s[i];a||(this._listenId||(this._listenId=n.uniqueId("l")),a=o=s[i]=new g(this,t));var l=d(t,e,r,this);if(o=void 0,l)throw l;return a.interop&&a.on(e,r),this};var c=function(t,e,n,r){if(n){var i=t[e]||(t[e]=[]),s=r.context,o=r.ctx,a=r.listening;a&&a.count++,i.push({callback:n,context:s,ctx:s||o,listening:a})}return t},d=function(t,e,n,r){try{t.on(e,n,r)}catch(t){return t}};a.off=function(t,e,n){return this._events?(this._events=u(h,this._events,t,e,{context:n,listeners:this._listeners}),this):this},a.stopListening=function(t,e,r){var i=this._listeningTo;if(!i)return this;for(var s=t?[t._listenId]:n.keys(i),o=0;o<s.length;o++){var a=i[s[o]];if(!a)break;a.obj.off(e,r,this),a.interop&&a.off(e,r)}return n.isEmpty(i)&&(this._listeningTo=void 0),this};var h=function(t,e,r,i){if(t){var s,o=i.context,a=i.listeners,l=0;if(e||o||r){for(s=e?[e]:n.keys(t);l<s.length;l++){var u=t[e=s[l]];if(!u)break;for(var c=[],d=0;d<u.length;d++){var h=u[d];if(r&&r!==h.callback&&r!==h.callback._callback||o&&o!==h.context)c.push(h);else{var f=h.listening;f&&f.off(e,r)}}c.length?t[e]=c:delete t[e]}return t}for(s=n.keys(a);l<s.length;l++)a[s[l]].cleanup()}};a.once=function(t,e,n){var r=u(f,{},t,e,this.off.bind(this));return"string"==typeof t&&null==n&&(e=void 0),this.on(r,e,n)},a.listenToOnce=function(t,e,n){var r=u(f,{},e,n,this.stopListening.bind(this,t));return this.listenTo(t,r)};var f=function(t,e,r,i){if(r){var s=t[e]=n.once((function(){i(e,s),r.apply(this,arguments)}));s._callback=r}return t};a.trigger=function(t){if(!this._events)return this;for(var e=Math.max(0,arguments.length-1),n=Array(e),r=0;r<e;r++)n[r]=arguments[r+1];return u(p,this._events,t,void 0,n),this};var p=function(t,e,n,r){if(t){var i=t[e],s=t.all;i&&s&&(s=s.slice()),i&&m(i,r),s&&m(s,[e].concat(r))}return t},m=function(t,e){var n,r=-1,i=t.length,s=e[0],o=e[1],a=e[2];switch(e.length){case 0:for(;++r<i;)(n=t[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=t[r]).callback.call(n.ctx,s);return;case 2:for(;++r<i;)(n=t[r]).callback.call(n.ctx,s,o);return;case 3:for(;++r<i;)(n=t[r]).callback.call(n.ctx,s,o,a);return;default:for(;++r<i;)(n=t[r]).callback.apply(n.ctx,e);return}},g=function(t,e){this.id=t._listenId,this.listener=t,this.obj=e,this.interop=!0,this.count=0,this._events=void 0};g.prototype.on=a.on,g.prototype.off=function(t,e){var n;this.interop?(this._events=u(h,this._events,t,e,{context:void 0,listeners:void 0}),n=!this._events):(this.count--,n=0===this.count),n&&this.cleanup()},g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId],this.interop||delete this.obj._listeners[this.id]},a.bind=a.on,a.unbind=a.off,n.extend(e,a);var v=e.Model=function(t,e){var r=t||{};e||(e={}),this.preinitialize.apply(this,arguments),this.cid=n.uniqueId(this.cidPrefix),this.attributes={},e.collection&&(this.collection=e.collection),e.parse&&(r=this.parse(r,e)||{});var i=n.result(this,"defaults");r=n.defaults(n.extend({},i,r),i),this.set(r,e),this.changed={},this.initialize.apply(this,arguments)};n.extend(v.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return n.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return n.escape(this.get(t))},has:function(t){return null!=this.get(t)},matches:function(t){return!!n.iteratee(t,this)(this.attributes)},set:function(t,e,r){if(null==t)return this;var i;if("object"==typeof t?(i=t,r=e):(i={})[t]=e,r||(r={}),!this._validate(i,r))return!1;var s=r.unset,o=r.silent,a=[],l=this._changing;this._changing=!0,l||(this._previousAttributes=n.clone(this.attributes),this.changed={});var u=this.attributes,c=this.changed,d=this._previousAttributes;for(var h in i)e=i[h],n.isEqual(u[h],e)||a.push(h),n.isEqual(d[h],e)?delete c[h]:c[h]=e,s?delete u[h]:u[h]=e;if(this.idAttribute in i){var f=this.id;this.id=this.get(this.idAttribute),this.trigger("changeId",this,f,r)}if(!o){a.length&&(this._pending=r);for(var p=0;p<a.length;p++)this.trigger("change:"+a[p],this,u[a[p]],r)}if(l)return this;if(!o)for(;this._pending;)r=this._pending,this._pending=!1,this.trigger("change",this,r);return this._pending=!1,this._changing=!1,this},unset:function(t,e){return this.set(t,void 0,n.extend({},e,{unset:!0}))},clear:function(t){var e={};for(var r in this.attributes)e[r]=void 0;return this.set(e,n.extend({},t,{unset:!0}))},hasChanged:function(t){return null==t?!n.isEmpty(this.changed):n.has(this.changed,t)},changedAttributes:function(t){if(!t)return!!this.hasChanged()&&n.clone(this.changed);var e,r=this._changing?this._previousAttributes:this.attributes,i={};for(var s in t){var o=t[s];n.isEqual(r[s],o)||(i[s]=o,e=!0)}return!!e&&i},previous:function(t){return null!=t&&this._previousAttributes?this._previousAttributes[t]:null},previousAttributes:function(){return n.clone(this._previousAttributes)},fetch:function(t){t=n.extend({parse:!0},t);var e=this,r=t.success;return t.success=function(n){var i=t.parse?e.parse(n,t):n;if(!e.set(i,t))return!1;r&&r.call(t.context,e,n,t),e.trigger("sync",e,n,t)},q(this,t),this.sync("read",this,t)},save:function(t,e,r){var i;null==t||"object"==typeof t?(i=t,r=e):(i={})[t]=e;var s=(r=n.extend({validate:!0,parse:!0},r)).wait;if(i&&!s){if(!this.set(i,r))return!1}else if(!this._validate(i,r))return!1;var o=this,a=r.success,l=this.attributes;r.success=function(t){o.attributes=l;var e=r.parse?o.parse(t,r):t;if(s&&(e=n.extend({},i,e)),e&&!o.set(e,r))return!1;a&&a.call(r.context,o,t,r),o.trigger("sync",o,t,r)},q(this,r),i&&s&&(this.attributes=n.extend({},l,i));var u=this.isNew()?"create":r.patch?"patch":"update";"patch"!==u||r.attrs||(r.attrs=i);var c=this.sync(u,this,r);return this.attributes=l,c},destroy:function(t){t=t?n.clone(t):{};var e=this,r=t.success,i=t.wait,s=function(){e.stopListening(),e.trigger("destroy",e,e.collection,t)};t.success=function(n){i&&s(),r&&r.call(t.context,e,n,t),e.isNew()||e.trigger("sync",e,n,t)};var o=!1;return this.isNew()?n.defer(t.success):(q(this,t),o=this.sync("delete",this,t)),i||s(),o},url:function(){var t=n.result(this,"urlRoot")||n.result(this.collection,"url")||H();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},n.extend({},t,{validate:!0}))},_validate:function(t,e){if(!e.validate||!this.validate)return!0;t=n.extend({},this.attributes,t);var r=this.validationError=this.validate(t,e)||null;return!r||(this.trigger("invalid",this,r,n.extend(e,{validationError:r})),!1)}});var y=e.Collection=function(t,e){e||(e={}),this.preinitialize.apply(this,arguments),e.model&&(this.model=e.model),void 0!==e.comparator&&(this.comparator=e.comparator),this._reset(),this.initialize.apply(this,arguments),t&&this.reset(t,n.extend({silent:!0},e))},b={add:!0,remove:!0,merge:!0},w={add:!0,remove:!1},A=function(t,e,n){n=Math.min(Math.max(n,0),t.length);var r,i=Array(t.length-n),s=e.length;for(r=0;r<i.length;r++)i[r]=t[r+n];for(r=0;r<s;r++)t[r+n]=e[r];for(r=0;r<i.length;r++)t[r+s+n]=i[r]};n.extend(y.prototype,a,{model:v,preinitialize:function(){},initialize:function(){},toJSON:function(t){return this.map((function(e){return e.toJSON(t)}))},sync:function(){return e.sync.apply(this,arguments)},add:function(t,e){return this.set(t,n.extend({merge:!1},e,w))},remove:function(t,e){e=n.extend({},e);var r=!n.isArray(t);t=r?[t]:t.slice();var i=this._removeModels(t,e);return!e.silent&&i.length&&(e.changes={added:[],merged:[],removed:i},this.trigger("update",this,e)),r?i[0]:i},set:function(t,e){if(null!=t){(e=n.extend({},b,e)).parse&&!this._isModel(t)&&(t=this.parse(t,e)||[]);var r=!n.isArray(t);t=r?[t]:t.slice();var i=e.at;null!=i&&(i=+i),i>this.length&&(i=this.length),i<0&&(i+=this.length+1);var s,o,a=[],l=[],u=[],c=[],d={},h=e.add,f=e.merge,p=e.remove,m=!1,g=this.comparator&&null==i&&!1!==e.sort,v=n.isString(this.comparator)?this.comparator:null;for(o=0;o<t.length;o++){s=t[o];var y=this.get(s);if(y){if(f&&s!==y){var w=this._isModel(s)?s.attributes:s;e.parse&&(w=y.parse(w,e)),y.set(w,e),u.push(y),g&&!m&&(m=y.hasChanged(v))}d[y.cid]||(d[y.cid]=!0,a.push(y)),t[o]=y}else h&&(s=t[o]=this._prepareModel(s,e))&&(l.push(s),this._addReference(s,e),d[s.cid]=!0,a.push(s))}if(p){for(o=0;o<this.length;o++)d[(s=this.models[o]).cid]||c.push(s);c.length&&this._removeModels(c,e)}var _=!1,x=!g&&h&&p;if(a.length&&x?(_=this.length!==a.length||n.some(this.models,(function(t,e){return t!==a[e]})),this.models.length=0,A(this.models,a,0),this.length=this.models.length):l.length&&(g&&(m=!0),A(this.models,l,null==i?this.length:i),this.length=this.models.length),m&&this.sort({silent:!0}),!e.silent){for(o=0;o<l.length;o++)null!=i&&(e.index=i+o),(s=l[o]).trigger("add",s,this,e);(m||_)&&this.trigger("sort",this,e),(l.length||c.length||u.length)&&(e.changes={added:l,removed:c,merged:u},this.trigger("update",this,e))}return r?t[0]:t}},reset:function(t,e){e=e?n.clone(e):{};for(var r=0;r<this.models.length;r++)this._removeReference(this.models[r],e);return e.previousModels=this.models,this._reset(),t=this.add(t,n.extend({silent:!0},e)),e.silent||this.trigger("reset",this,e),t},push:function(t,e){return this.add(t,n.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,n.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(null!=t)return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t,t.idAttribute)]||t.cid&&this._byId[t.cid]},has:function(t){return null!=this.get(t)},at:function(t){return t<0&&(t+=this.length),this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,!0)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var r=e.length;return n.isFunction(e)&&(e=e.bind(this)),1===r||n.isString(e)?this.models=this.sortBy(e):this.models.sort(e),t.silent||this.trigger("sort",this,t),this},pluck:function(t){return this.map(t+"")},fetch:function(t){var e=(t=n.extend({parse:!0},t)).success,r=this;return t.success=function(n){var i=t.reset?"reset":"set";r[i](n,t),e&&e.call(t.context,r,n,t),r.trigger("sync",r,n,t)},q(this,t),this.sync("read",this,t)},create:function(t,e){var r=(e=e?n.clone(e):{}).wait;if(!(t=this._prepareModel(t,e)))return!1;r||this.add(t,e);var i=this,s=e.success;return e.success=function(t,e,n){r&&(t.off("error",i._forwardPristineError,i),i.add(t,n)),s&&s.call(n.context,t,e,n)},r&&t.once("error",this._forwardPristineError,this),t.save(null,e),t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t,e){return t[e||this.model.prototype.idAttribute||"id"]},values:function(){return new x(this,C)},keys:function(){return new x(this,k)},entries:function(){return new x(this,N)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(t,e){return this._isModel(t)?(t.collection||(t.collection=this),t):((e=e?n.clone(e):{}).collection=this,(r=this.model.prototype?new this.model(t,e):this.model(t,e)).validationError?(this.trigger("invalid",this,r.validationError,e),!1):r);var r},_removeModels:function(t,e){for(var n=[],r=0;r<t.length;r++){var i=this.get(t[r]);if(i){var s=this.indexOf(i);this.models.splice(s,1),this.length--,delete this._byId[i.cid];var o=this.modelId(i.attributes,i.idAttribute);null!=o&&delete this._byId[o],e.silent||(e.index=s,i.trigger("remove",i,this,e)),n.push(i),this._removeReference(i,e)}}return t.length>0&&!e.silent&&delete e.index,n},_isModel:function(t){return t instanceof v},_addReference:function(t,e){this._byId[t.cid]=t;var n=this.modelId(t.attributes,t.idAttribute);null!=n&&(this._byId[n]=t),t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var n=this.modelId(t.attributes,t.idAttribute);null!=n&&delete this._byId[n],this===t.collection&&delete t.collection,t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,n,r){if(e){if(("add"===t||"remove"===t)&&n!==this)return;if("destroy"===t&&this.remove(e,r),"changeId"===t){var i=this.modelId(e.previousAttributes(),e.idAttribute),s=this.modelId(e.attributes,e.idAttribute);null!=i&&delete this._byId[i],null!=s&&(this._byId[s]=e)}}this.trigger.apply(this,arguments)},_forwardPristineError:function(t,e,n){this.has(t)||this._onModelEvent("error",t,e,n)}});var _="function"==typeof Symbol&&Symbol.iterator;_&&(y.prototype[_]=y.prototype.values);var x=function(t,e){this._collection=t,this._kind=e,this._index=0},C=1,k=2,N=3;_&&(x.prototype[_]=function(){return this}),x.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var t,e=this._collection.at(this._index);if(this._index++,this._kind===C)t=e;else{var n=this._collection.modelId(e.attributes,e.idAttribute);t=this._kind===k?n:[n,e]}return{value:t,done:!1}}this._collection=void 0}return{value:void 0,done:!0}};var E=e.View=function(t){this.cid=n.uniqueId("view"),this.preinitialize.apply(this,arguments),n.extend(this,n.pick(t,j)),this._ensureElement(),this.initialize.apply(this,arguments)},P=/^(\S+)\s*(.*)$/,j=["model","collection","el","id","attributes","className","tagName","events"];n.extend(E.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(t){return this.undelegateEvents(),this._setElement(t),this.delegateEvents(),this},_setElement:function(t){this.$el=t instanceof e.$?t:e.$(t),this.el=this.$el[0]},delegateEvents:function(t){if(t||(t=n.result(this,"events")),!t)return this;for(var e in this.undelegateEvents(),t){var r=t[e];if(n.isFunction(r)||(r=this[r]),r){var i=e.match(P);this.delegate(i[1],i[2],r.bind(this))}}return this},delegate:function(t,e,n){return this.$el.on(t+".delegateEvents"+this.cid,e,n),this},undelegateEvents:function(){return this.$el&&this.$el.off(".delegateEvents"+this.cid),this},undelegate:function(t,e,n){return this.$el.off(t+".delegateEvents"+this.cid,e,n),this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(this.el)this.setElement(n.result(this,"el"));else{var t=n.extend({},n.result(this,"attributes"));this.id&&(t.id=n.result(this,"id")),this.className&&(t.class=n.result(this,"className")),this.setElement(this._createElement(n.result(this,"tagName"))),this._setAttributes(t)}},_setAttributes:function(t){this.$el.attr(t)}});var S=function(t,e,r,i){n.each(r,(function(n,r){e[r]&&(t.prototype[r]=function(t,e,n,r){switch(e){case 1:return function(){return t[n](this[r])};case 2:return function(e){return t[n](this[r],e)};case 3:return function(e,i){return t[n](this[r],T(e,this),i)};case 4:return function(e,i,s){return t[n](this[r],T(e,this),i,s)};default:return function(){var e=s.call(arguments);return e.unshift(this[r]),t[n].apply(t,e)}}}(e,n,r,i))}))},T=function(t,e){return n.isFunction(t)?t:n.isObject(t)&&!e._isModel(t)?O(t):n.isString(t)?function(e){return e.get(t)}:t},O=function(t){var e=n.matches(t);return function(t){return e(t.attributes)}};n.each([[y,{forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3},"models"],[v,{keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1},"attributes"]],(function(t){var e=t[0],r=t[1],i=t[2];e.mixin=function(t){var r=n.reduce(n.functions(t),(function(t,e){return t[e]=0,t}),{});S(e,t,r,i)},S(e,n,r,i)})),e.sync=function(t,r,i){var s=I[t];n.defaults(i||(i={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var o={type:s,dataType:"json"};if(i.url||(o.url=n.result(r,"url")||H()),null!=i.data||!r||"create"!==t&&"update"!==t&&"patch"!==t||(o.contentType="application/json",o.data=JSON.stringify(i.attrs||r.toJSON(i))),i.emulateJSON&&(o.contentType="application/x-www-form-urlencoded",o.data=o.data?{model:o.data}:{}),i.emulateHTTP&&("PUT"===s||"DELETE"===s||"PATCH"===s)){o.type="POST",i.emulateJSON&&(o.data._method=s);var a=i.beforeSend;i.beforeSend=function(t){if(t.setRequestHeader("X-HTTP-Method-Override",s),a)return a.apply(this,arguments)}}"GET"===o.type||i.emulateJSON||(o.processData=!1);var l=i.error;i.error=function(t,e,n){i.textStatus=e,i.errorThrown=n,l&&l.call(i.context,t,e,n)};var u=i.xhr=e.ajax(n.extend(o,i));return r.trigger("request",r,u,i),u};var I={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var L=e.Router=function(t){t||(t={}),this.preinitialize.apply(this,arguments),t.routes&&(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},R=/\((.*?)\)/g,F=/(\(\?)?:\w+/g,B=/\*\w+/g,U=/[\-{}\[\]+?.,\\\^$|#\s]/g;n.extend(L.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(t,r,i){n.isRegExp(t)||(t=this._routeToRegExp(t)),n.isFunction(r)&&(i=r,r=""),i||(i=this[r]);var s=this;return e.history.route(t,(function(n){var o=s._extractParameters(t,n);!1!==s.execute(i,o,r)&&(s.trigger.apply(s,["route:"+r].concat(o)),s.trigger("route",r,o),e.history.trigger("route",s,r,o))})),this},execute:function(t,e,n){t&&t.apply(this,e)},navigate:function(t,n){return e.history.navigate(t,n),this},_bindRoutes:function(){if(this.routes){this.routes=n.result(this,"routes");for(var t,e=n.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(U,"\\$&").replace(R,"(?:$1)?").replace(F,(function(t,e){return e?t:"([^/?]+)"})).replace(B,"([^?]*?)"),new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var r=t.exec(e).slice(1);return n.map(r,(function(t,e){return e===r.length-1?t||null:t?decodeURIComponent(t):null}))}});var M=e.History=function(){this.handlers=[],this.checkUrl=this.checkUrl.bind(this),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},D=/^[#\/]|\s+$/g,$=/^\/+|\/+$/g,z=/#.*$/;M.started=!1,n.extend(M.prototype,a,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root&&!this.getSearch()},matchRoot:function(){return this.decodeFragment(this.location.pathname).slice(0,this.root.length-1)+"/"===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return"/"===t.charAt(0)?t.slice(1):t},getFragment:function(t){return null==t&&(t=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),t.replace(D,"")},start:function(t){if(M.started)throw new Error("Backbone.history has already been started");if(M.started=!0,this.options=n.extend({root:"/"},this.options,t),this.root=this.options.root,this._trailingSlash=this.options.trailingSlash,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange="onhashchange"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace($,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var r=document.body,i=r.insertBefore(this.iframe,r.firstChild).contentWindow;i.document.open(),i.document.close(),i.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState?s("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?s("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),M.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment)return!this.matchRoot()&&this.notfound();this.iframe&&this.navigate(e),this.loadUrl()},loadUrl:function(t){return this.matchRoot()?(t=this.fragment=this.getFragment(t),n.some(this.handlers,(function(e){if(e.route.test(t))return e.callback(t),!0}))||this.notfound()):this.notfound()},notfound:function(){return this.trigger("notfound"),!1},navigate:function(t,e){if(!M.started)return!1;e&&!0!==e||(e={trigger:!!e}),t=this.getFragment(t||"");var n=this.root;this._trailingSlash||""!==t&&"?"!==t.charAt(0)||(n=n.slice(0,-1)||"/");var r=n+t;t=t.replace(z,"");var i=this.decodeFragment(t);if(this.fragment!==i){if(this.fragment=i,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;e.replace||(s.document.open(),s.document.close()),this._updateHash(s.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else t.hash="#"+e}}),e.history=new M;v.extend=y.extend=L.extend=E.extend=M.extend=function(t,e){var r,i=this;return r=t&&n.has(t,"constructor")?t.constructor:function(){return i.apply(this,arguments)},n.extend(r,i,e),r.prototype=n.create(i.prototype,t),r.prototype.constructor=r,r.__super__=i.prototype,r};var H=function(){throw new Error('A "url" property or function must be specified')},q=function(t,e){var n=e.error;e.error=function(r){n&&n.call(e.context,t,r,e),t.trigger("error",t,r,e)}};return e._debug=function(){return{root:t,_:n}},e}(s,n,t,e)}.apply(e,r),void 0===i||(t.exports=i)},78658:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,".button-vue[data-v-3fa8511b]{margin-top:.5rem}","",{version:3,sources:["webpack://./core/src/components/login/LoginButton.vue"],names:[],mappings:"AACA,6BACC,gBAAA",sourcesContent:["\n.button-vue {\n\tmargin-top: .5rem;\n}\n"],sourceRoot:""}]);const a=o},44578:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,".login-form[data-v-8c18127a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-8c18127a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-8c18127a]{text-align:center;overflow-wrap:anywhere}","",{version:3,sources:["webpack://./core/src/components/login/LoginForm.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA,CACA,sBAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t\toverflow-wrap: anywhere;\n\t}\n}\n"],sourceRoot:""}]);const a=o},96798:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,"fieldset[data-v-1b2e37de]{display:flex;flex-direction:column;gap:.5rem}fieldset[data-v-1b2e37de] label{text-align:initial}.update[data-v-1b2e37de]{margin:0 auto}","",{version:3,sources:["webpack://./core/src/components/login/PasswordLessLoginForm.vue"],names:[],mappings:"AACA,0BACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,gCACC,kBAAA,CAIF,yBACC,aAAA",sourcesContent:["\nfieldset {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.5rem;\n\n\t:deep(label) {\n\t\ttext-align: initial;\n\t}\n}\n\n.update {\n\tmargin: 0 auto;\n}\n"],sourceRoot:""}]);const a=o},42467:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,".login-form[data-v-2507998a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-2507998a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-2507998a]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}","",{version:3,sources:["webpack://./core/src/components/login/ResetPassword.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n"],sourceRoot:""}]);const a=o},58552:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,"body{font-size:var(--default-font-size)}.login-box{width:320px;box-sizing:border-box}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}.login-passwordless .button-vue{margin-top:.5rem}","",{version:3,sources:["webpack://./core/src/views/Login.vue"],names:[],mappings:"AACA,KACC,kCAAA,CAGD,WAEC,WAAA,CACA,qBAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAIF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA,CAKD,gCACC,gBAAA",sourcesContent:["\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\t// Same size as dashboard panels\n\twidth: 320px;\n\tbox-sizing: border-box;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\n\n.fade-enter-active, .fade-leave-active {\n\ttransition: opacity .3s;\n}\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\topacity: 0;\n}\n\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n\n.login-passwordless {\n\t.button-vue {\n\t\tmargin-top: 0.5rem;\n\t}\n}\n"],sourceRoot:""}]);const a=o},60260:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,"\nfieldset[data-v-b9d4933a] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-b9d4933a] {\n\tmargin-top: 20px;\n}\n","",{version:3,sources:["webpack://./core/src/components/login/UpdatePassword.vue"],names:[],mappings:";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for=\"password\" class=\"infield\">{{ t('core', 'New password') }}</label>\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder=\"t('core', 'New password')\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"encrypted\" class=\"update\">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\n\t\t\t\t</p>\n\t\t\t\t<input id=\"encrypted-continue\"\n\t\t\t\t\tv-model=\"proceed\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t<label for=\"encrypted-continue\">\n\t\t\t\t\t{{ t('core', 'I know what I\\'m doing') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\n\n\t\t\t<p v-if=\"error && message\" :class=\"{warning: error}\">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from '@nextcloud/axios'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === 'success') {\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t\tthis.$emit('update:username', this.user)\n\t\t\t\t\tthis.$emit('done')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n<\/script>\n\n<style scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n"],sourceRoot:""}]);const a=o},78112:t=>{"undefined"==typeof dav&&(dav={}),dav._XML_CHAR_MAP={"<":"<",">":">","&":"&",'"':""","'":"'"},dav._escapeXml=function(t){return t.replace(/[<>&"']/g,(function(t){return dav._XML_CHAR_MAP[t]}))},dav.Client=function(t){var e;for(e in t)this[e]=t[e]},dav.Client.prototype={baseUrl:null,userName:null,password:null,xmlNamespaces:{"DAV:":"d"},propFind:function(t,e,n,r){void 0===n&&(n="0"),n=""+n,(r=r||{}).Depth=n,r["Content-Type"]="application/xml; charset=utf-8";var i,s='<?xml version="1.0"?>\n<d:propfind ';for(i in this.xmlNamespaces)s+=" xmlns:"+this.xmlNamespaces[i]+'="'+i+'"';for(var o in s+=">\n <d:prop>\n",e)if(e.hasOwnProperty(o)){var a=this.parseClarkNotation(e[o]);this.xmlNamespaces[a.namespace]?s+=" <"+this.xmlNamespaces[a.namespace]+":"+a.name+" />\n":s+=" <x:"+a.name+' xmlns:x="'+a.namespace+'" />\n'}return s+=" </d:prop>\n",s+="</d:propfind>",this.request("PROPFIND",t,r,s).then(function(t){return"0"===n?{status:t.status,body:t.body[0],xhr:t.xhr}:{status:t.status,body:t.body,xhr:t.xhr}}.bind(this))},_renderPropSet:function(t){var e=" <d:set>\n <d:prop>\n";for(var n in t)if(t.hasOwnProperty(n)){var r,i=this.parseClarkNotation(n),s=t[n];"d:resourcetype"!=(r=this.xmlNamespaces[i.namespace]?this.xmlNamespaces[i.namespace]+":"+i.name:"x:"+i.name+' xmlns:x="'+i.namespace+'"')&&(s=dav._escapeXml(s)),e+=" <"+r+">"+s+"</"+r+">\n"}return(e+=" </d:prop>\n")+" </d:set>\n"},propPatch:function(t,e,n){(n=n||{})["Content-Type"]="application/xml; charset=utf-8";var r,i='<?xml version="1.0"?>\n<d:propertyupdate ';for(r in this.xmlNamespaces)i+=" xmlns:"+this.xmlNamespaces[r]+'="'+r+'"';return i+=">\n"+this._renderPropSet(e),i+="</d:propertyupdate>",this.request("PROPPATCH",t,n,i).then(function(t){return{status:t.status,body:t.body,xhr:t.xhr}}.bind(this))},mkcol:function(t,e,n){var r="";if((n=n||{})["Content-Type"]="application/xml; charset=utf-8",e){var i;for(i in r='<?xml version="1.0"?>\n<d:mkcol',this.xmlNamespaces)r+=" xmlns:"+this.xmlNamespaces[i]+'="'+i+'"';r+=">\n"+this._renderPropSet(e),r+="</d:mkcol>"}return this.request("MKCOL",t,n,r).then(function(t){return{status:t.status,body:t.body,xhr:t.xhr}}.bind(this))},request:function(t,e,n,r,i,s){var o,a=this,l=this.xhrProvider();for(o in n=n||{},i=i||"",this.userName&&(n.Authorization="Basic "+btoa(this.userName+":"+this.password)),l.open(t,this.resolveUrl(e),!0),n)l.setRequestHeader(o,n[o]);return l.responseType=i,s&&"function"==typeof s.onProgress&&("PUT"===t||"POST"===t?l.upload.addEventListener("progress",(function(t){s.onProgress(t)}),!1):l.addEventListener("progress",(function(t){s.onProgress(t)}),!1)),void 0===r?l.send():l.send(r),new Promise((function(t,e){l.onreadystatechange=function(){if(4===l.readyState){var e=l.response;207===l.status&&(e=a.parseMultiStatus(l.response)),t({body:e,status:l.status,xhr:l})}},l.ontimeout=function(){e(new Error("Timeout exceeded"))}}))},xhrProvider:function(){return new XMLHttpRequest},_parsePropNode:function(t){var e=null;if(t.childNodes&&t.childNodes.length>0){for(var n=[],r=0;r<t.childNodes.length;r++){var i=t.childNodes[r];1===i.nodeType&&n.push(i)}n.length&&(e=n)}return e||t.textContent||t.text||""},parseMultiStatus:function(t){for(var e=(new DOMParser).parseFromString(t,"application/xml"),n=function(t){var e;for(e in this.xmlNamespaces)if(this.xmlNamespaces[e]===t)return e}.bind(this),r=e.evaluate("/d:multistatus/d:response",e,n,XPathResult.ANY_TYPE,null),i=[],s=r.iterateNext();s;){var o={href:null,propStat:[]};o.href=e.evaluate("string(d:href)",s,n,XPathResult.ANY_TYPE,null).stringValue;for(var a=e.evaluate("d:propstat",s,n,XPathResult.ANY_TYPE,null),l=a.iterateNext();l;){for(var u={status:e.evaluate("string(d:status)",l,n,XPathResult.ANY_TYPE,null).stringValue,properties:{}},c=e.evaluate("d:prop/*",l,n,XPathResult.ANY_TYPE,null),d=c.iterateNext();d;){var h=this._parsePropNode(d);u.properties["{"+d.namespaceURI+"}"+d.localName]=h,d=c.iterateNext()}o.propStat.push(u),l=a.iterateNext()}i.push(o),s=r.iterateNext()}return i},resolveUrl:function(t){if(/^https?:\/\//i.test(t))return t;var e=this.parseUrl(this.baseUrl);return t.charAt("/")?e.root+t:(e.root,-1!==e.path.lastIndexOf("/")&&e.path.subString(0,e.path.lastIndexOf("/")),t)},parseUrl:function(t){var e=t.match(/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/),n={url:e[0],scheme:e[1],host:e[3],port:e[4],path:e[5],query:e[6],fragment:e[7]};return n.root=n.scheme+"://"+n.host+(n.port?":"+n.port:""),n},parseClarkNotation:function(t){var e=t.match(/^{([^}]+)}(.*)$/);if(e)return{name:e[2],namespace:e[1]}}},void 0!==t.exports&&(t.exports.Client=dav.Client),t.exports={dav}},35358:(t,e,n)=>{var r={"./af":25177,"./af.js":25177,"./ar":61509,"./ar-dz":41488,"./ar-dz.js":41488,"./ar-kw":58676,"./ar-kw.js":58676,"./ar-ly":42353,"./ar-ly.js":42353,"./ar-ma":24496,"./ar-ma.js":24496,"./ar-ps":6947,"./ar-ps.js":6947,"./ar-sa":60301,"./ar-sa.js":60301,"./ar-tn":89756,"./ar-tn.js":89756,"./ar.js":61509,"./az":95533,"./az.js":95533,"./be":28959,"./be.js":28959,"./bg":47777,"./bg.js":47777,"./bm":54903,"./bm.js":54903,"./bn":61290,"./bn-bd":17357,"./bn-bd.js":17357,"./bn.js":61290,"./bo":31545,"./bo.js":31545,"./br":11470,"./br.js":11470,"./bs":44429,"./bs.js":44429,"./ca":7306,"./ca.js":7306,"./cs":56464,"./cs.js":56464,"./cv":73635,"./cv.js":73635,"./cy":64226,"./cy.js":64226,"./da":93601,"./da.js":93601,"./de":77853,"./de-at":26111,"./de-at.js":26111,"./de-ch":54697,"./de-ch.js":54697,"./de.js":77853,"./dv":60708,"./dv.js":60708,"./el":54691,"./el.js":54691,"./en-au":53872,"./en-au.js":53872,"./en-ca":28298,"./en-ca.js":28298,"./en-gb":56195,"./en-gb.js":56195,"./en-ie":66584,"./en-ie.js":66584,"./en-il":65543,"./en-il.js":65543,"./en-in":9033,"./en-in.js":9033,"./en-nz":79402,"./en-nz.js":79402,"./en-sg":43004,"./en-sg.js":43004,"./eo":32934,"./eo.js":32934,"./es":97650,"./es-do":20838,"./es-do.js":20838,"./es-mx":17730,"./es-mx.js":17730,"./es-us":56575,"./es-us.js":56575,"./es.js":97650,"./et":3035,"./et.js":3035,"./eu":3508,"./eu.js":3508,"./fa":119,"./fa.js":119,"./fi":90527,"./fi.js":90527,"./fil":95995,"./fil.js":95995,"./fo":52477,"./fo.js":52477,"./fr":85498,"./fr-ca":26435,"./fr-ca.js":26435,"./fr-ch":37892,"./fr-ch.js":37892,"./fr.js":85498,"./fy":37071,"./fy.js":37071,"./ga":41734,"./ga.js":41734,"./gd":70217,"./gd.js":70217,"./gl":77329,"./gl.js":77329,"./gom-deva":32124,"./gom-deva.js":32124,"./gom-latn":93383,"./gom-latn.js":93383,"./gu":95050,"./gu.js":95050,"./he":11713,"./he.js":11713,"./hi":43861,"./hi.js":43861,"./hr":26308,"./hr.js":26308,"./hu":90609,"./hu.js":90609,"./hy-am":17160,"./hy-am.js":17160,"./id":74063,"./id.js":74063,"./is":89374,"./is.js":89374,"./it":88383,"./it-ch":21827,"./it-ch.js":21827,"./it.js":88383,"./ja":23827,"./ja.js":23827,"./jv":89722,"./jv.js":89722,"./ka":41794,"./ka.js":41794,"./kk":27088,"./kk.js":27088,"./km":96870,"./km.js":96870,"./kn":84451,"./kn.js":84451,"./ko":63164,"./ko.js":63164,"./ku":98174,"./ku-kmr":6181,"./ku-kmr.js":6181,"./ku.js":98174,"./ky":78474,"./ky.js":78474,"./lb":79680,"./lb.js":79680,"./lo":15867,"./lo.js":15867,"./lt":45766,"./lt.js":45766,"./lv":69532,"./lv.js":69532,"./me":58076,"./me.js":58076,"./mi":41848,"./mi.js":41848,"./mk":30306,"./mk.js":30306,"./ml":73739,"./ml.js":73739,"./mn":99053,"./mn.js":99053,"./mr":86169,"./mr.js":86169,"./ms":73386,"./ms-my":92297,"./ms-my.js":92297,"./ms.js":73386,"./mt":77075,"./mt.js":77075,"./my":72264,"./my.js":72264,"./nb":22274,"./nb.js":22274,"./ne":8235,"./ne.js":8235,"./nl":92572,"./nl-be":43784,"./nl-be.js":43784,"./nl.js":92572,"./nn":54566,"./nn.js":54566,"./oc-lnc":69330,"./oc-lnc.js":69330,"./pa-in":29849,"./pa-in.js":29849,"./pl":94418,"./pl.js":94418,"./pt":79834,"./pt-br":48303,"./pt-br.js":48303,"./pt.js":79834,"./ro":24457,"./ro.js":24457,"./ru":82271,"./ru.js":82271,"./sd":1221,"./sd.js":1221,"./se":33478,"./se.js":33478,"./si":17538,"./si.js":17538,"./sk":5784,"./sk.js":5784,"./sl":46637,"./sl.js":46637,"./sq":86794,"./sq.js":86794,"./sr":45719,"./sr-cyrl":3322,"./sr-cyrl.js":3322,"./sr.js":45719,"./ss":56e3,"./ss.js":56e3,"./sv":41011,"./sv.js":41011,"./sw":40748,"./sw.js":40748,"./ta":11025,"./ta.js":11025,"./te":11885,"./te.js":11885,"./tet":28861,"./tet.js":28861,"./tg":86571,"./tg.js":86571,"./th":55802,"./th.js":55802,"./tk":59527,"./tk.js":59527,"./tl-ph":29231,"./tl-ph.js":29231,"./tlh":31052,"./tlh.js":31052,"./tr":85096,"./tr.js":85096,"./tzl":79846,"./tzl.js":79846,"./tzm":81765,"./tzm-latn":97711,"./tzm-latn.js":97711,"./tzm.js":81765,"./ug-cn":48414,"./ug-cn.js":48414,"./uk":16618,"./uk.js":16618,"./ur":57777,"./ur.js":57777,"./uz":57609,"./uz-latn":72475,"./uz-latn.js":72475,"./uz.js":57609,"./vi":21135,"./vi.js":21135,"./x-pseudo":64051,"./x-pseudo.js":64051,"./yo":82218,"./yo.js":82218,"./zh-cn":52648,"./zh-cn.js":52648,"./zh-hk":1632,"./zh-hk.js":1632,"./zh-mo":31541,"./zh-mo.js":31541,"./zh-tw":50304,"./zh-tw.js":50304};function i(t){var e=s(t);return n(e)}function s(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}i.keys=function(){return Object.keys(r)},i.resolve=s,t.exports=i,i.id=35358},35810:(t,e,n)=>{"use strict";n.d(e,{Al:()=>O,H4:()=>S,PY:()=>j,Q$:()=>T,R3:()=>w,VL:()=>b,lJ:()=>P,pt:()=>A,v7:()=>f});var r,i=n(92457),s=n(53529),o=n(53334),a=n(43627),l=n(71089),u=n(99498),c=n(44719);null===(r=(0,i.HW)())?(0,s.YK)().setApp("files").build():(0,s.YK)().setApp("files").setUid(r.uid).build();const d=["B","KB","MB","GB","TB","PB"],h=["B","KiB","MiB","GiB","TiB","PiB"];function f(t,e=!1,n=!1,r=!1){n=n&&!r,"string"==typeof t&&(t=Number(t));let i=t>0?Math.floor(Math.log(t)/Math.log(r?1e3:1024)):0;i=Math.min((n?h.length:d.length)-1,i);const s=n?h[i]:d[i];let a=(t/Math.pow(r?1e3:1024,i)).toFixed(1);return!0===e&&0===i?("0.0"!==a?"< 1 ":"0 ")+(n?h[1]:d[1]):(a=i<2?parseFloat(a).toFixed(0):parseFloat(a).toLocaleString((0,o.lO)()),a+" "+s)}var p=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(p||{});const m=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","nc:share-attributes","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:share-types","oc:size","ocs:share-permissions"],g={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},v=function(){return typeof window._nc_dav_properties>"u"&&(window._nc_dav_properties=[...m]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},y=function(){return typeof window._nc_dav_namespaces>"u"&&(window._nc_dav_namespaces={...g}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},b=function(){return`<?xml version="1.0"?>\n\t\t<d:propfind ${y()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`},w=function(t){return`<?xml version="1.0" encoding="UTF-8"?>\n<d:searchrequest ${y()}\n\txmlns:ns="https://github.com/icewind1991/SearchDAV/ns">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${(0,i.HW)()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${t}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`};var A=(t=>(t.Folder="folder",t.File="file",t))(A||{});const _=function(t,e){return null!==t.match(e)},x=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch{throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=p.NONE&&t.permissions<=p.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&_(t.source,e)){const n=t.source.match(e)[0];if(!t.source.includes((0,a.join)(n,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(C).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var C=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(C||{});class k{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;constructor(t,e){x(t,e||this._knownDavService),this._data=t;const n={set:(t,e,n)=>(this.updateMtime(),Reflect.set(t,e,n)),deleteProperty:(t,e)=>(this.updateMtime(),Reflect.deleteProperty(t,e))};this._attributes=new Proxy(t.attributes||{},n),delete this._data.attributes,e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,l.O0)(this.source.slice(t.length))}get basename(){return(0,a.basename)(this.source)}get extension(){return(0,a.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),n=this.root.replace(/\/$/,"");return(0,a.dirname)(t.slice(e+n.length)||"/")}const t=new URL(this.source);return(0,a.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}get crtime(){return this._data.crtime}get size(){return this._data.size}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:p.NONE:p.READ}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return _(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,a.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),n=this.root.replace(/\/$/,"");return t.slice(e+n.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id||this.attributes?.fileid}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){x({...this._data,source:t},this._knownDavService),this._data.source=t,this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,a.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}}class N extends k{get type(){return A.File}}class E extends k{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return A.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const P=`/files/${(0,i.HW)()?.uid}`,j=(0,u.dC)("dav"),S=function(t=j,e={}){const n=(0,c.UU)(t,{headers:e});function r(t){n.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,i.zo)(r),r((0,i.do)()),(0,c.Gu)().patch("fetch",((t,e)=>{const n=e.headers;return n?.method&&(e.method=n.method,delete n.method),fetch(t,e)})),n},T=async(t,e="/",n=P)=>(await t.getDirectoryContents(`${n}${e}`,{details:!0,data:`<?xml version="1.0"?>\n\t\t<oc:filter-files ${y()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>O(t,n))),O=function(t,e=P,n=j){const r=t.props,s=function(t=""){let e=p.NONE;return t&&((t.includes("C")||t.includes("K"))&&(e|=p.CREATE),t.includes("G")&&(e|=p.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=p.UPDATE),t.includes("D")&&(e|=p.DELETE),t.includes("R")&&(e|=p.SHARE)),e}(r?.permissions),o=r?.["owner-id"]||(0,i.HW)()?.uid,a={id:r?.fileid||0,source:`${n}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime,size:r?.size||Number.parseInt(r.getcontentlength||"0"),permissions:s,owner:o,root:e,attributes:{...t,...r,hasPreview:r?.["has-preview"]}};return delete a.attributes?.props,"file"===t.type?new N(a):new E(a)};var I={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",n="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",r=new RegExp("^"+n+"$");t.isExist=function(t){return typeof t<"u"},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,n){if(e){const r=Object.keys(e),i=r.length;for(let s=0;s<i;s++)t[r[s]]="strict"===n?[e[r[s]]]:e[r[s]]}},t.getValue=function(e){return t.isExist(e)?e:""},t.isName=function(t){const e=r.exec(t);return!(null===e||typeof e>"u")},t.getAllMatches=function(t,e){const n=[];let r=e.exec(t);for(;r;){const i=[];i.startIndex=e.lastIndex-r[0].length;const s=r.length;for(let t=0;t<s;t++)i.push(r[t]);n.push(i),r=e.exec(t)}return n},t.nameRegexp=n}(I);new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");var L={};const R={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,n){return t}};L.buildOptions=function(t){return Object.assign({},R,t)},L.defaultOptions=R,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,I.nameRegexp),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var F={};function B(t,e,n){let r;const i={};for(let s=0;s<t.length;s++){const o=t[s],a=U(o);let l="";if(l=void 0===n?a:n+"."+a,a===e.textNodeName)void 0===r?r=o[a]:r+=""+o[a];else{if(void 0===a)continue;if(o[a]){let t=B(o[a],e,l);const n=D(t,e);o[":@"]?M(t,o[":@"],l,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==i[a]&&i.hasOwnProperty(a)?(Array.isArray(i[a])||(i[a]=[i[a]]),i[a].push(t)):e.isArray(a,l,n)?i[a]=[t]:i[a]=t}}}return"string"==typeof r?r.length>0&&(i[e.textNodeName]=r):void 0!==r&&(i[e.textNodeName]=r),i}function U(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=e[t];if(":@"!==n)return n}}function M(t,e,n,r){if(e){const i=Object.keys(e),s=i.length;for(let o=0;o<s;o++){const s=i[o];r.isArray(s,n+"."+s,!0,!0)?t[s]=[e[s]]:t[s]=e[s]}}}function D(t,e){const{textNodeName:n}=e,r=Object.keys(t).length;return!(0!==r&&(1!==r||!t[n]&&"boolean"!=typeof t[n]&&0!==t[n]))}F.prettify=function(t,e){return B(t,e)};const{buildOptions:$}=L,{prettify:z}=F;function H(t,e,n,r){let i="",s=!1;for(let o=0;o<t.length;o++){const a=t[o],l=q(a);if(void 0===l)continue;let u="";if(u=0===n.length?l:`${n}.${l}`,l===e.textNodeName){let t=a[l];K(u,e)||(t=e.tagValueProcessor(l,t),t=Y(t,e)),s&&(i+=r),i+=t,s=!1;continue}if(l===e.cdataPropName){s&&(i+=r),i+=`<![CDATA[${a[l][0][e.textNodeName]}]]>`,s=!1;continue}if(l===e.commentPropName){i+=r+`\x3c!--${a[l][0][e.textNodeName]}--\x3e`,s=!0;continue}if("?"===l[0]){const t=V(a[":@"],e),n="?xml"===l?"":r;let o=a[l][0][e.textNodeName];o=0!==o.length?" "+o:"",i+=n+`<${l}${o}${t}?>`,s=!0;continue}let c=r;""!==c&&(c+=e.indentBy);const d=r+`<${l}${V(a[":@"],e)}`,h=H(a[l],e,u,c);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?i+=d+">":i+=d+"/>":h&&0!==h.length||!e.suppressEmptyNode?h&&h.endsWith(">")?i+=d+`>${h}${r}</${l}>`:(i+=d+">",h&&""!==r&&(h.includes("/>")||h.includes("</"))?i+=r+e.indentBy+h+r:i+=h,i+=`</${l}>`):i+=d+"/>",s=!0}return i}function q(t){const e=Object.keys(t);for(let n=0;n<e.length;n++){const r=e[n];if(t.hasOwnProperty(r)&&":@"!==r)return r}}function V(t,e){let n="";if(t&&!e.ignoreAttributes)for(let r in t){if(!t.hasOwnProperty(r))continue;let i=e.attributeValueProcessor(r,t[r]);i=Y(i,e),!0===i&&e.suppressBooleanAttributes?n+=` ${r.substr(e.attributeNamePrefix.length)}`:n+=` ${r.substr(e.attributeNamePrefix.length)}="${i}"`}return n}function K(t,e){let n=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let r in e.stopNodes)if(e.stopNodes[r]===t||e.stopNodes[r]==="*."+n)return!0;return!1}function Y(t,e){if(t&&t.length>0&&e.processEntities)for(let n=0;n<e.entities.length;n++){const r=e.entities[n];t=t.replace(r.regex,r.val)}return t}const W=function(t,e){let n="";return e.format&&e.indentBy.length>0&&(n="\n"),H(t,e,"",n)},G={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function J(t){this.options=Object.assign({},G,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Z),this.processTextOrObjNode=X,this.options.format?(this.indentate=Q,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function X(t,e,n){const r=this.j2x(t,n+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,r.attrStr,n):this.buildObjectNode(r.val,e,r.attrStr,n)}function Q(t){return this.options.indentBy.repeat(t)}function Z(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}J.prototype.build=function(t){return this.options.preserveOrder?W(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},J.prototype.j2x=function(t,e){let n="",r="";for(let i in t)if(Object.prototype.hasOwnProperty.call(t,i))if(typeof t[i]>"u")this.isAttribute(i)&&(r+="");else if(null===t[i])this.isAttribute(i)?r+="":"?"===i[0]?r+=this.indentate(e)+"<"+i+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+i+"/"+this.tagEndChar;else if(t[i]instanceof Date)r+=this.buildTextValNode(t[i],i,"",e);else if("object"!=typeof t[i]){const s=this.isAttribute(i);if(s)n+=this.buildAttrPairStr(s,""+t[i]);else if(i===this.options.textNodeName){let e=this.options.tagValueProcessor(i,""+t[i]);r+=this.replaceEntitiesValue(e)}else r+=this.buildTextValNode(t[i],i,"",e)}else if(Array.isArray(t[i])){const n=t[i].length;let s="";for(let o=0;o<n;o++){const n=t[i][o];typeof n>"u"||(null===n?"?"===i[0]?r+=this.indentate(e)+"<"+i+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+i+"/"+this.tagEndChar:"object"==typeof n?this.options.oneListGroup?s+=this.j2x(n,e+1).val:s+=this.processTextOrObjNode(n,i,e):s+=this.buildTextValNode(n,i,"",e))}this.options.oneListGroup&&(s=this.buildObjectNode(s,i,"",e)),r+=s}else if(this.options.attributesGroupName&&i===this.options.attributesGroupName){const e=Object.keys(t[i]),r=e.length;for(let s=0;s<r;s++)n+=this.buildAttrPairStr(e[s],""+t[i][e[s]])}else r+=this.processTextOrObjNode(t[i],i,e);return{attrStr:n,val:r}},J.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},J.prototype.buildObjectNode=function(t,e,n,r){if(""===t)return"?"===e[0]?this.indentate(r)+"<"+e+n+"?"+this.tagEndChar:this.indentate(r)+"<"+e+n+this.closeTag(e)+this.tagEndChar;{let i="</"+e+this.tagEndChar,s="";return"?"===e[0]&&(s="?",i=""),!n&&""!==n||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===s.length?this.indentate(r)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(r)+"<"+e+n+s+this.tagEndChar+t+this.indentate(r)+i:this.indentate(r)+"<"+e+n+s+">"+t+i}},J.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},J.prototype.buildTextValNode=function(t,e,n,r){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(r)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+n+"?"+this.tagEndChar;{let i=this.options.tagValueProcessor(e,t);return i=this.replaceEntitiesValue(i),""===i?this.indentate(r)+"<"+e+n+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+n+">"+i+"</"+e+this.tagEndChar}},J.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const n=this.options.entities[e];t=t.replace(n.regex,n.val)}return t}},4523:(t,e,n)=>{"use strict";n.r(e),n.d(e,{VERSION:()=>i,after:()=>Le,all:()=>tn,allKeys:()=>gt,any:()=>en,assign:()=>Lt,before:()=>Re,bind:()=>_e,bindAll:()=>ke,chain:()=>ye,chunk:()=>Un,clone:()=>Ut,collect:()=>We,compact:()=>En,compose:()=>Ie,constant:()=>Q,contains:()=>nn,countBy:()=>vn,create:()=>Bt,debounce:()=>Se,default:()=>Hn,defaults:()=>Rt,defer:()=>Pe,delay:()=>Ee,detect:()=>Ve,difference:()=>jn,drop:()=>kn,each:()=>Ye,escape:()=>oe,every:()=>tn,extend:()=>It,extendOwn:()=>Lt,filter:()=>Qe,find:()=>Ve,findIndex:()=>Me,findKey:()=>Be,findLastIndex:()=>De,findWhere:()=>Ke,first:()=>Cn,flatten:()=>Pn,foldl:()=>Je,foldr:()=>Xe,forEach:()=>Ye,functions:()=>Tt,get:()=>Ht,groupBy:()=>mn,has:()=>qt,head:()=>Cn,identity:()=>Vt,include:()=>nn,includes:()=>nn,indexBy:()=>gn,indexOf:()=>He,initial:()=>xn,inject:()=>Je,intersection:()=>In,invert:()=>St,invoke:()=>rn,isArguments:()=>G,isArray:()=>K,isArrayBuffer:()=>B,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>lt,isEqual:()=>mt,isError:()=>R,isFinite:()=>J,isFunction:()=>D,isMap:()=>Ct,isMatch:()=>ut,isNaN:()=>X,isNull:()=>N,isNumber:()=>O,isObject:()=>k,isRegExp:()=>L,isSet:()=>Nt,isString:()=>T,isSymbol:()=>F,isTypedArray:()=>it,isUndefined:()=>E,isWeakMap:()=>kt,isWeakSet:()=>Et,iteratee:()=>Jt,keys:()=>at,last:()=>Nn,lastIndexOf:()=>qe,map:()=>We,mapObject:()=>Qt,matcher:()=>Kt,matches:()=>Kt,max:()=>an,memoize:()=>Ne,methods:()=>Tt,min:()=>ln,mixin:()=>Dn,negate:()=>Oe,noop:()=>Zt,now:()=>re,object:()=>Fn,omit:()=>_n,once:()=>Fe,pairs:()=>jt,partial:()=>Ae,partition:()=>yn,pick:()=>An,pluck:()=>sn,property:()=>Yt,propertyOf:()=>te,random:()=>ne,range:()=>Bn,reduce:()=>Je,reduceRight:()=>Xe,reject:()=>Ze,rest:()=>kn,restArguments:()=>C,result:()=>me,sample:()=>dn,select:()=>Qe,shuffle:()=>hn,size:()=>bn,some:()=>en,sortBy:()=>fn,sortedIndex:()=>$e,tail:()=>kn,take:()=>Cn,tap:()=>Mt,template:()=>pe,templateSettings:()=>le,throttle:()=>je,times:()=>ee,toArray:()=>cn,toPath:()=>Dt,transpose:()=>Ln,unescape:()=>ae,union:()=>On,uniq:()=>Tn,unique:()=>Tn,uniqueId:()=>ve,unzip:()=>Ln,values:()=>Pt,where:()=>on,without:()=>Sn,wrap:()=>Te,zip:()=>Rn});var r={};n.r(r),n.d(r,{VERSION:()=>i,after:()=>Le,all:()=>tn,allKeys:()=>gt,any:()=>en,assign:()=>Lt,before:()=>Re,bind:()=>_e,bindAll:()=>ke,chain:()=>ye,chunk:()=>Un,clone:()=>Ut,collect:()=>We,compact:()=>En,compose:()=>Ie,constant:()=>Q,contains:()=>nn,countBy:()=>vn,create:()=>Bt,debounce:()=>Se,default:()=>$n,defaults:()=>Rt,defer:()=>Pe,delay:()=>Ee,detect:()=>Ve,difference:()=>jn,drop:()=>kn,each:()=>Ye,escape:()=>oe,every:()=>tn,extend:()=>It,extendOwn:()=>Lt,filter:()=>Qe,find:()=>Ve,findIndex:()=>Me,findKey:()=>Be,findLastIndex:()=>De,findWhere:()=>Ke,first:()=>Cn,flatten:()=>Pn,foldl:()=>Je,foldr:()=>Xe,forEach:()=>Ye,functions:()=>Tt,get:()=>Ht,groupBy:()=>mn,has:()=>qt,head:()=>Cn,identity:()=>Vt,include:()=>nn,includes:()=>nn,indexBy:()=>gn,indexOf:()=>He,initial:()=>xn,inject:()=>Je,intersection:()=>In,invert:()=>St,invoke:()=>rn,isArguments:()=>G,isArray:()=>K,isArrayBuffer:()=>B,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>lt,isEqual:()=>mt,isError:()=>R,isFinite:()=>J,isFunction:()=>D,isMap:()=>Ct,isMatch:()=>ut,isNaN:()=>X,isNull:()=>N,isNumber:()=>O,isObject:()=>k,isRegExp:()=>L,isSet:()=>Nt,isString:()=>T,isSymbol:()=>F,isTypedArray:()=>it,isUndefined:()=>E,isWeakMap:()=>kt,isWeakSet:()=>Et,iteratee:()=>Jt,keys:()=>at,last:()=>Nn,lastIndexOf:()=>qe,map:()=>We,mapObject:()=>Qt,matcher:()=>Kt,matches:()=>Kt,max:()=>an,memoize:()=>Ne,methods:()=>Tt,min:()=>ln,mixin:()=>Dn,negate:()=>Oe,noop:()=>Zt,now:()=>re,object:()=>Fn,omit:()=>_n,once:()=>Fe,pairs:()=>jt,partial:()=>Ae,partition:()=>yn,pick:()=>An,pluck:()=>sn,property:()=>Yt,propertyOf:()=>te,random:()=>ne,range:()=>Bn,reduce:()=>Je,reduceRight:()=>Xe,reject:()=>Ze,rest:()=>kn,restArguments:()=>C,result:()=>me,sample:()=>dn,select:()=>Qe,shuffle:()=>hn,size:()=>bn,some:()=>en,sortBy:()=>fn,sortedIndex:()=>$e,tail:()=>kn,take:()=>Cn,tap:()=>Mt,template:()=>pe,templateSettings:()=>le,throttle:()=>je,times:()=>ee,toArray:()=>cn,toPath:()=>Dt,transpose:()=>Ln,unescape:()=>ae,union:()=>On,uniq:()=>Tn,unique:()=>Tn,uniqueId:()=>ve,unzip:()=>Ln,values:()=>Pt,where:()=>on,without:()=>Sn,wrap:()=>Te,zip:()=>Rn});var i="1.13.6",s="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},o=Array.prototype,a=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=o.push,c=o.slice,d=a.toString,h=a.hasOwnProperty,f="undefined"!=typeof ArrayBuffer,p="undefined"!=typeof DataView,m=Array.isArray,g=Object.keys,v=Object.create,y=f&&ArrayBuffer.isView,b=isNaN,w=isFinite,A=!{toString:null}.propertyIsEnumerable("toString"),_=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],x=Math.pow(2,53)-1;function C(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),r=Array(n),i=0;i<n;i++)r[i]=arguments[i+e];switch(e){case 0:return t.call(this,r);case 1:return t.call(this,arguments[0],r);case 2:return t.call(this,arguments[0],arguments[1],r)}var s=Array(e+1);for(i=0;i<e;i++)s[i]=arguments[i];return s[e]=r,t.apply(this,s)}}function k(t){var e=typeof t;return"function"===e||"object"===e&&!!t}function N(t){return null===t}function E(t){return void 0===t}function P(t){return!0===t||!1===t||"[object Boolean]"===d.call(t)}function j(t){return!(!t||1!==t.nodeType)}function S(t){var e="[object "+t+"]";return function(t){return d.call(t)===e}}const T=S("String"),O=S("Number"),I=S("Date"),L=S("RegExp"),R=S("Error"),F=S("Symbol"),B=S("ArrayBuffer");var U=S("Function"),M=s.document&&s.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof M&&(U=function(t){return"function"==typeof t||!1});const D=U,$=S("Object");var z=p&&$(new DataView(new ArrayBuffer(8))),H="undefined"!=typeof Map&&$(new Map),q=S("DataView");const V=z?function(t){return null!=t&&D(t.getInt8)&&B(t.buffer)}:q,K=m||S("Array");function Y(t,e){return null!=t&&h.call(t,e)}var W=S("Arguments");!function(){W(arguments)||(W=function(t){return Y(t,"callee")})}();const G=W;function J(t){return!F(t)&&w(t)&&!isNaN(parseFloat(t))}function X(t){return O(t)&&b(t)}function Q(t){return function(){return t}}function Z(t){return function(e){var n=t(e);return"number"==typeof n&&n>=0&&n<=x}}function tt(t){return function(e){return null==e?void 0:e[t]}}const et=tt("byteLength"),nt=Z(et);var rt=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const it=f?function(t){return y?y(t)&&!V(t):nt(t)&&rt.test(d.call(t))}:Q(!1),st=tt("length");function ot(t,e){e=function(t){for(var e={},n=t.length,r=0;r<n;++r)e[t[r]]=!0;return{contains:function(t){return!0===e[t]},push:function(n){return e[n]=!0,t.push(n)}}}(e);var n=_.length,r=t.constructor,i=D(r)&&r.prototype||a,s="constructor";for(Y(t,s)&&!e.contains(s)&&e.push(s);n--;)(s=_[n])in t&&t[s]!==i[s]&&!e.contains(s)&&e.push(s)}function at(t){if(!k(t))return[];if(g)return g(t);var e=[];for(var n in t)Y(t,n)&&e.push(n);return A&&ot(t,e),e}function lt(t){if(null==t)return!0;var e=st(t);return"number"==typeof e&&(K(t)||T(t)||G(t))?0===e:0===st(at(t))}function ut(t,e){var n=at(e),r=n.length;if(null==t)return!r;for(var i=Object(t),s=0;s<r;s++){var o=n[s];if(e[o]!==i[o]||!(o in i))return!1}return!0}function ct(t){return t instanceof ct?t:this instanceof ct?void(this._wrapped=t):new ct(t)}function dt(t){return new Uint8Array(t.buffer||t,t.byteOffset||0,et(t))}ct.VERSION=i,ct.prototype.value=function(){return this._wrapped},ct.prototype.valueOf=ct.prototype.toJSON=ct.prototype.value,ct.prototype.toString=function(){return String(this._wrapped)};var ht="[object DataView]";function ft(t,e,n,r){if(t===e)return 0!==t||1/t==1/e;if(null==t||null==e)return!1;if(t!=t)return e!=e;var i=typeof t;return("function"===i||"object"===i||"object"==typeof e)&&pt(t,e,n,r)}function pt(t,e,n,r){t instanceof ct&&(t=t._wrapped),e instanceof ct&&(e=e._wrapped);var i=d.call(t);if(i!==d.call(e))return!1;if(z&&"[object Object]"==i&&V(t)){if(!V(e))return!1;i=ht}switch(i){case"[object RegExp]":case"[object String]":return""+t==""+e;case"[object Number]":return+t!=+t?+e!=+e:0==+t?1/+t==1/e:+t==+e;case"[object Date]":case"[object Boolean]":return+t==+e;case"[object Symbol]":return l.valueOf.call(t)===l.valueOf.call(e);case"[object ArrayBuffer]":case ht:return pt(dt(t),dt(e),n,r)}var s="[object Array]"===i;if(!s&&it(t)){if(et(t)!==et(e))return!1;if(t.buffer===e.buffer&&t.byteOffset===e.byteOffset)return!0;s=!0}if(!s){if("object"!=typeof t||"object"!=typeof e)return!1;var o=t.constructor,a=e.constructor;if(o!==a&&!(D(o)&&o instanceof o&&D(a)&&a instanceof a)&&"constructor"in t&&"constructor"in e)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===t)return r[u]===e;if(n.push(t),r.push(e),s){if((u=t.length)!==e.length)return!1;for(;u--;)if(!ft(t[u],e[u],n,r))return!1}else{var c,h=at(t);if(u=h.length,at(e).length!==u)return!1;for(;u--;)if(!Y(e,c=h[u])||!ft(t[c],e[c],n,r))return!1}return n.pop(),r.pop(),!0}function mt(t,e){return ft(t,e)}function gt(t){if(!k(t))return[];var e=[];for(var n in t)e.push(n);return A&&ot(t,e),e}function vt(t){var e=st(t);return function(n){if(null==n)return!1;var r=gt(n);if(st(r))return!1;for(var i=0;i<e;i++)if(!D(n[t[i]]))return!1;return t!==_t||!D(n[yt])}}var yt="forEach",bt=["clear","delete"],wt=["get","has","set"],At=bt.concat(yt,wt),_t=bt.concat(wt),xt=["add"].concat(bt,yt,"has");const Ct=H?vt(At):S("Map"),kt=H?vt(_t):S("WeakMap"),Nt=H?vt(xt):S("Set"),Et=S("WeakSet");function Pt(t){for(var e=at(t),n=e.length,r=Array(n),i=0;i<n;i++)r[i]=t[e[i]];return r}function jt(t){for(var e=at(t),n=e.length,r=Array(n),i=0;i<n;i++)r[i]=[e[i],t[e[i]]];return r}function St(t){for(var e={},n=at(t),r=0,i=n.length;r<i;r++)e[t[n[r]]]=n[r];return e}function Tt(t){var e=[];for(var n in t)D(t[n])&&e.push(n);return e.sort()}function Ot(t,e){return function(n){var r=arguments.length;if(e&&(n=Object(n)),r<2||null==n)return n;for(var i=1;i<r;i++)for(var s=arguments[i],o=t(s),a=o.length,l=0;l<a;l++){var u=o[l];e&&void 0!==n[u]||(n[u]=s[u])}return n}}const It=Ot(gt),Lt=Ot(at),Rt=Ot(gt,!0);function Ft(t){if(!k(t))return{};if(v)return v(t);var e=function(){};e.prototype=t;var n=new e;return e.prototype=null,n}function Bt(t,e){var n=Ft(t);return e&&Lt(n,e),n}function Ut(t){return k(t)?K(t)?t.slice():It({},t):t}function Mt(t,e){return e(t),t}function Dt(t){return K(t)?t:[t]}function $t(t){return ct.toPath(t)}function zt(t,e){for(var n=e.length,r=0;r<n;r++){if(null==t)return;t=t[e[r]]}return n?t:void 0}function Ht(t,e,n){var r=zt(t,$t(e));return E(r)?n:r}function qt(t,e){for(var n=(e=$t(e)).length,r=0;r<n;r++){var i=e[r];if(!Y(t,i))return!1;t=t[i]}return!!n}function Vt(t){return t}function Kt(t){return t=Lt({},t),function(e){return ut(e,t)}}function Yt(t){return t=$t(t),function(e){return zt(e,t)}}function Wt(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,s){return t.call(e,n,r,i,s)}}return function(){return t.apply(e,arguments)}}function Gt(t,e,n){return null==t?Vt:D(t)?Wt(t,e,n):k(t)&&!K(t)?Kt(t):Yt(t)}function Jt(t,e){return Gt(t,e,1/0)}function Xt(t,e,n){return ct.iteratee!==Jt?ct.iteratee(t,e):Gt(t,e,n)}function Qt(t,e,n){e=Xt(e,n);for(var r=at(t),i=r.length,s={},o=0;o<i;o++){var a=r[o];s[a]=e(t[a],a,t)}return s}function Zt(){}function te(t){return null==t?Zt:function(e){return Ht(t,e)}}function ee(t,e,n){var r=Array(Math.max(0,t));e=Wt(e,n,1);for(var i=0;i<t;i++)r[i]=e(i);return r}function ne(t,e){return null==e&&(e=t,t=0),t+Math.floor(Math.random()*(e-t+1))}ct.toPath=Dt,ct.iteratee=Jt;const re=Date.now||function(){return(new Date).getTime()};function ie(t){var e=function(e){return t[e]},n="(?:"+at(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(t){return t=null==t?"":""+t,r.test(t)?t.replace(i,e):t}}const se={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},oe=ie(se),ae=ie(St(se)),le=ct.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ue=/(.)^/,ce={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},de=/\\|'|\r|\n|\u2028|\u2029/g;function he(t){return"\\"+ce[t]}var fe=/^\s*(\w|\$)+\s*$/;function pe(t,e,n){!e&&n&&(e=n),e=Rt({},e,ct.templateSettings);var r=RegExp([(e.escape||ue).source,(e.interpolate||ue).source,(e.evaluate||ue).source].join("|")+"|$","g"),i=0,s="__p+='";t.replace(r,(function(e,n,r,o,a){return s+=t.slice(i,a).replace(de,he),i=a+e.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?s+="'+\n((__t=("+r+"))==null?'':__t)+\n'":o&&(s+="';\n"+o+"\n__p+='"),e})),s+="';\n";var o,a=e.variable;if(a){if(!fe.test(a))throw new Error("variable is not a bare identifier: "+a)}else s="with(obj||{}){\n"+s+"}\n",a="obj";s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{o=new Function(a,"_",s)}catch(t){throw t.source=s,t}var l=function(t){return o.call(this,t,ct)};return l.source="function("+a+"){\n"+s+"}",l}function me(t,e,n){var r=(e=$t(e)).length;if(!r)return D(n)?n.call(t):n;for(var i=0;i<r;i++){var s=null==t?void 0:t[e[i]];void 0===s&&(s=n,i=r),t=D(s)?s.call(t):s}return t}var ge=0;function ve(t){var e=++ge+"";return t?t+e:e}function ye(t){var e=ct(t);return e._chain=!0,e}function be(t,e,n,r,i){if(!(r instanceof e))return t.apply(n,i);var s=Ft(t.prototype),o=t.apply(s,i);return k(o)?o:s}var we=C((function(t,e){var n=we.placeholder,r=function(){for(var i=0,s=e.length,o=Array(s),a=0;a<s;a++)o[a]=e[a]===n?arguments[i++]:e[a];for(;i<arguments.length;)o.push(arguments[i++]);return be(t,r,this,this,o)};return r}));we.placeholder=ct;const Ae=we,_e=C((function(t,e,n){if(!D(t))throw new TypeError("Bind must be called on a function");var r=C((function(i){return be(t,r,e,this,n.concat(i))}));return r})),xe=Z(st);function Ce(t,e,n,r){if(r=r||[],e||0===e){if(e<=0)return r.concat(t)}else e=1/0;for(var i=r.length,s=0,o=st(t);s<o;s++){var a=t[s];if(xe(a)&&(K(a)||G(a)))if(e>1)Ce(a,e-1,n,r),i=r.length;else for(var l=0,u=a.length;l<u;)r[i++]=a[l++];else n||(r[i++]=a)}return r}const ke=C((function(t,e){var n=(e=Ce(e,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=e[n];t[r]=_e(t[r],t)}return t}));function Ne(t,e){var n=function(r){var i=n.cache,s=""+(e?e.apply(this,arguments):r);return Y(i,s)||(i[s]=t.apply(this,arguments)),i[s]};return n.cache={},n}const Ee=C((function(t,e,n){return setTimeout((function(){return t.apply(null,n)}),e)})),Pe=Ae(Ee,ct,1);function je(t,e,n){var r,i,s,o,a=0;n||(n={});var l=function(){a=!1===n.leading?0:re(),r=null,o=t.apply(i,s),r||(i=s=null)},u=function(){var u=re();a||!1!==n.leading||(a=u);var c=e-(u-a);return i=this,s=arguments,c<=0||c>e?(r&&(clearTimeout(r),r=null),a=u,o=t.apply(i,s),r||(i=s=null)):r||!1===n.trailing||(r=setTimeout(l,c)),o};return u.cancel=function(){clearTimeout(r),a=0,r=i=s=null},u}function Se(t,e,n){var r,i,s,o,a,l=function(){var u=re()-i;e>u?r=setTimeout(l,e-u):(r=null,n||(o=t.apply(a,s)),r||(s=a=null))},u=C((function(u){return a=this,s=u,i=re(),r||(r=setTimeout(l,e),n&&(o=t.apply(a,s))),o}));return u.cancel=function(){clearTimeout(r),r=s=a=null},u}function Te(t,e){return Ae(e,t)}function Oe(t){return function(){return!t.apply(this,arguments)}}function Ie(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}}function Le(t,e){return function(){if(--t<1)return e.apply(this,arguments)}}function Re(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}}const Fe=Ae(Re,2);function Be(t,e,n){e=Xt(e,n);for(var r,i=at(t),s=0,o=i.length;s<o;s++)if(e(t[r=i[s]],r,t))return r}function Ue(t){return function(e,n,r){n=Xt(n,r);for(var i=st(e),s=t>0?0:i-1;s>=0&&s<i;s+=t)if(n(e[s],s,e))return s;return-1}}const Me=Ue(1),De=Ue(-1);function $e(t,e,n,r){for(var i=(n=Xt(n,r,1))(e),s=0,o=st(t);s<o;){var a=Math.floor((s+o)/2);n(t[a])<i?s=a+1:o=a}return s}function ze(t,e,n){return function(r,i,s){var o=0,a=st(r);if("number"==typeof s)t>0?o=s>=0?s:Math.max(s+a,o):a=s>=0?Math.min(s+1,a):s+a+1;else if(n&&s&&a)return r[s=n(r,i)]===i?s:-1;if(i!=i)return(s=e(c.call(r,o,a),X))>=0?s+o:-1;for(s=t>0?o:a-1;s>=0&&s<a;s+=t)if(r[s]===i)return s;return-1}}const He=ze(1,Me,$e),qe=ze(-1,De);function Ve(t,e,n){var r=(xe(t)?Me:Be)(t,e,n);if(void 0!==r&&-1!==r)return t[r]}function Ke(t,e){return Ve(t,Kt(e))}function Ye(t,e,n){var r,i;if(e=Wt(e,n),xe(t))for(r=0,i=t.length;r<i;r++)e(t[r],r,t);else{var s=at(t);for(r=0,i=s.length;r<i;r++)e(t[s[r]],s[r],t)}return t}function We(t,e,n){e=Xt(e,n);for(var r=!xe(t)&&at(t),i=(r||t).length,s=Array(i),o=0;o<i;o++){var a=r?r[o]:o;s[o]=e(t[a],a,t)}return s}function Ge(t){return function(e,n,r,i){var s=arguments.length>=3;return function(e,n,r,i){var s=!xe(e)&&at(e),o=(s||e).length,a=t>0?0:o-1;for(i||(r=e[s?s[a]:a],a+=t);a>=0&&a<o;a+=t){var l=s?s[a]:a;r=n(r,e[l],l,e)}return r}(e,Wt(n,i,4),r,s)}}const Je=Ge(1),Xe=Ge(-1);function Qe(t,e,n){var r=[];return e=Xt(e,n),Ye(t,(function(t,n,i){e(t,n,i)&&r.push(t)})),r}function Ze(t,e,n){return Qe(t,Oe(Xt(e)),n)}function tn(t,e,n){e=Xt(e,n);for(var r=!xe(t)&&at(t),i=(r||t).length,s=0;s<i;s++){var o=r?r[s]:s;if(!e(t[o],o,t))return!1}return!0}function en(t,e,n){e=Xt(e,n);for(var r=!xe(t)&&at(t),i=(r||t).length,s=0;s<i;s++){var o=r?r[s]:s;if(e(t[o],o,t))return!0}return!1}function nn(t,e,n,r){return xe(t)||(t=Pt(t)),("number"!=typeof n||r)&&(n=0),He(t,e,n)>=0}const rn=C((function(t,e,n){var r,i;return D(e)?i=e:(e=$t(e),r=e.slice(0,-1),e=e[e.length-1]),We(t,(function(t){var s=i;if(!s){if(r&&r.length&&(t=zt(t,r)),null==t)return;s=t[e]}return null==s?s:s.apply(t,n)}))}));function sn(t,e){return We(t,Yt(e))}function on(t,e){return Qe(t,Kt(e))}function an(t,e,n){var r,i,s=-1/0,o=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=xe(t)?t:Pt(t)).length;a<l;a++)null!=(r=t[a])&&r>s&&(s=r);else e=Xt(e,n),Ye(t,(function(t,n,r){((i=e(t,n,r))>o||i===-1/0&&s===-1/0)&&(s=t,o=i)}));return s}function ln(t,e,n){var r,i,s=1/0,o=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=xe(t)?t:Pt(t)).length;a<l;a++)null!=(r=t[a])&&r<s&&(s=r);else e=Xt(e,n),Ye(t,(function(t,n,r){((i=e(t,n,r))<o||i===1/0&&s===1/0)&&(s=t,o=i)}));return s}var un=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function cn(t){return t?K(t)?c.call(t):T(t)?t.match(un):xe(t)?We(t,Vt):Pt(t):[]}function dn(t,e,n){if(null==e||n)return xe(t)||(t=Pt(t)),t[ne(t.length-1)];var r=cn(t),i=st(r);e=Math.max(Math.min(e,i),0);for(var s=i-1,o=0;o<e;o++){var a=ne(o,s),l=r[o];r[o]=r[a],r[a]=l}return r.slice(0,e)}function hn(t){return dn(t,1/0)}function fn(t,e,n){var r=0;return e=Xt(e,n),sn(We(t,(function(t,n,i){return{value:t,index:r++,criteria:e(t,n,i)}})).sort((function(t,e){var n=t.criteria,r=e.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return t.index-e.index})),"value")}function pn(t,e){return function(n,r,i){var s=e?[[],[]]:{};return r=Xt(r,i),Ye(n,(function(e,i){var o=r(e,i,n);t(s,e,o)})),s}}const mn=pn((function(t,e,n){Y(t,n)?t[n].push(e):t[n]=[e]})),gn=pn((function(t,e,n){t[n]=e})),vn=pn((function(t,e,n){Y(t,n)?t[n]++:t[n]=1})),yn=pn((function(t,e,n){t[n?0:1].push(e)}),!0);function bn(t){return null==t?0:xe(t)?t.length:at(t).length}function wn(t,e,n){return e in n}const An=C((function(t,e){var n={},r=e[0];if(null==t)return n;D(r)?(e.length>1&&(r=Wt(r,e[1])),e=gt(t)):(r=wn,e=Ce(e,!1,!1),t=Object(t));for(var i=0,s=e.length;i<s;i++){var o=e[i],a=t[o];r(a,o,t)&&(n[o]=a)}return n})),_n=C((function(t,e){var n,r=e[0];return D(r)?(r=Oe(r),e.length>1&&(n=e[1])):(e=We(Ce(e,!1,!1),String),r=function(t,n){return!nn(e,n)}),An(t,r,n)}));function xn(t,e,n){return c.call(t,0,Math.max(0,t.length-(null==e||n?1:e)))}function Cn(t,e,n){return null==t||t.length<1?null==e||n?void 0:[]:null==e||n?t[0]:xn(t,t.length-e)}function kn(t,e,n){return c.call(t,null==e||n?1:e)}function Nn(t,e,n){return null==t||t.length<1?null==e||n?void 0:[]:null==e||n?t[t.length-1]:kn(t,Math.max(0,t.length-e))}function En(t){return Qe(t,Boolean)}function Pn(t,e){return Ce(t,e,!1)}const jn=C((function(t,e){return e=Ce(e,!0,!0),Qe(t,(function(t){return!nn(e,t)}))})),Sn=C((function(t,e){return jn(t,e)}));function Tn(t,e,n,r){P(e)||(r=n,n=e,e=!1),null!=n&&(n=Xt(n,r));for(var i=[],s=[],o=0,a=st(t);o<a;o++){var l=t[o],u=n?n(l,o,t):l;e&&!n?(o&&s===u||i.push(l),s=u):n?nn(s,u)||(s.push(u),i.push(l)):nn(i,l)||i.push(l)}return i}const On=C((function(t){return Tn(Ce(t,!0,!0))}));function In(t){for(var e=[],n=arguments.length,r=0,i=st(t);r<i;r++){var s=t[r];if(!nn(e,s)){var o;for(o=1;o<n&&nn(arguments[o],s);o++);o===n&&e.push(s)}}return e}function Ln(t){for(var e=t&&an(t,st).length||0,n=Array(e),r=0;r<e;r++)n[r]=sn(t,r);return n}const Rn=C(Ln);function Fn(t,e){for(var n={},r=0,i=st(t);r<i;r++)e?n[t[r]]=e[r]:n[t[r][0]]=t[r][1];return n}function Bn(t,e,n){null==e&&(e=t||0,t=0),n||(n=e<t?-1:1);for(var r=Math.max(Math.ceil((e-t)/n),0),i=Array(r),s=0;s<r;s++,t+=n)i[s]=t;return i}function Un(t,e){if(null==e||e<1)return[];for(var n=[],r=0,i=t.length;r<i;)n.push(c.call(t,r,r+=e));return n}function Mn(t,e){return t._chain?ct(e).chain():e}function Dn(t){return Ye(Tt(t),(function(e){var n=ct[e]=t[e];ct.prototype[e]=function(){var t=[this._wrapped];return u.apply(t,arguments),Mn(this,n.apply(ct,t))}})),ct}Ye(["pop","push","reverse","shift","sort","splice","unshift"],(function(t){var e=o[t];ct.prototype[t]=function(){var n=this._wrapped;return null!=n&&(e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0]),Mn(this,n)}})),Ye(["concat","join","slice"],(function(t){var e=o[t];ct.prototype[t]=function(){var t=this._wrapped;return null!=t&&(t=e.apply(t,arguments)),Mn(this,t)}}));const $n=ct;var zn=Dn(r);zn._=zn;const Hn=zn}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var n=o[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=s,e=[],a.O=(t,n,r,i)=>{if(!n){var s=1/0;for(c=0;c<e.length;c++){n=e[c][0],r=e[c][1],i=e[c][2];for(var o=!0,l=0;l<n.length;l++)(!1&i||s>=i)&&Object.keys(a.O).every((t=>a.O[t](n[l])))?n.splice(l--,1):(o=!1,i<s&&(s=i));if(o){e.splice(c--,1);var u=r();void 0!==u&&(t=u)}}return t}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[n,r,i]},a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>t+"-"+t+".js?v="+{1359:"d217768bf3f39a7359dd",8618:"1e8f15db3b14455fef8f"}[t],a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r={},i="nextcloud:",a.l=(t,e,n,s)=>{if(r[t])r[t].push(e);else{var o,l;if(void 0!==n)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var d=u[c];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==i+n){o=d;break}}o||(l=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,a.nc&&o.setAttribute("nonce",a.nc),o.setAttribute("data-webpack",i+n),o.src=t),r[t]=[e];var h=(e,n)=>{o.onerror=o.onload=null,clearTimeout(f);var i=r[t];if(delete r[t],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach((t=>t(n))),e)return e(n)},f=setTimeout(h.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=h.bind(null,o.onerror),o.onload=h.bind(null,o.onload),l&&document.head.appendChild(o)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),a.j=1418,(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),(()=>{a.b=document.baseURI||self.location.href;var t={1418:0};a.f.j=(e,n)=>{var r=a.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var i=new Promise(((n,i)=>r=t[e]=[n,i]));n.push(r[2]=i);var s=a.p+a.u(e),o=new Error;a.l(s,(n=>{if(a.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var i=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.src;o.message="Loading chunk "+e+" failed.\n("+i+": "+s+")",o.name="ChunkLoadError",o.type=i,o.request=s,r[1](o)}}),"chunk-"+e,e)}},a.O.j=e=>0===t[e];var e=(e,n)=>{var r,i,s=n[0],o=n[1],l=n[2],u=0;if(s.some((e=>0!==t[e]))){for(r in o)a.o(o,r)&&(a.m[r]=o[r]);if(l)var c=l(a)}for(e&&e(n);u<s.length;u++)i=s[u],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return a.O(c)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),a.nc=void 0;var l=a.O(void 0,[4208],(()=>a(92126)));l=a.O(l)})(); -//# sourceMappingURL=core-login.js.map?v=993629d5c274aa365410
\ No newline at end of file +(()=>{var e,r,i,s={52138:(e,r,i)=>{"use strict";var s={};i.r(s),i.d(s,{exclude:()=>Vt,extract:()=>Mt,parse:()=>Dt,parseUrl:()=>zt,pick:()=>qt,stringify:()=>$t,stringifyUrl:()=>Ht});var o=i(85471),a=i(61338),l=i(4523),u=i(74692),c=i.n(u),d=i(85168),h=i(96763);const f={updatableNotification:null,getDefaultNotificationFunction:null,setDefault(t){this.getDefaultNotificationFunction=t},hide(t,e){l.default.isFunction(t)&&(e=t,t=void 0),t?(t.each((function(){c()(this)[0].toastify?c()(this)[0].toastify.hideToast():h.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),e&&e.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):h.error("Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification")},showHtml(t,e){(e=e||{}).isHTML=!0,e.timeout=e.timeout?e.timeout:d.DH;const n=(0,d.rG)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},show(t,e){(e=e||{}).timeout=e.timeout?e.timeout:d.DH;const n=(0,d.rG)(function(t){return t.toString().split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}(t),e);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate(t){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,d.rG)(t,{timeout:d.DH}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary(t,e){(e=e||{}).timeout=e.timeout||d.aR;const n=(0,d.rG)(t,e);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:()=>!c()("#content").find(".toastify").length},p=l.default.throttle((()=>{f.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1});let m=!1;const g={enableDynamicSlideToggle(){m=!0},showAppSidebar:function(t){(t||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(t){(t||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};var v=i(99498);function y(t,e,n){"post"!==t&&"delete"!==t||!wt.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:t.toUpperCase(),url:(0,v.KT)("apps/provisioning_api/api/v1/config/apps")+e,data:n.data||{},success:n.success,error:n.error})):wt.PasswordConfirmation.requirePasswordConfirmation(_.bind(y,this,t,e,n))}const b=window.oc_appconfig||{},w={getValue:function(t,e,n,r){!function(t,e,n,r){(r=r||{}).data={defaultValue:n},y("get","/"+t+"/"+e,r)}(t,e,n,{success:r})},setValue:function(t,e,n){!function(t,e,n,r){(r=r||{}).data={value:n},y("post","/"+t+"/"+e,r)}(t,e,n)},getApps:function(t){!function(t){y("get","",t)}({success:t})},getKeys:function(t,e){!function(t,e){y("get","/"+t,e)}(t,{success:e})},deleteKey:function(t,e){!function(t,e,n){y("delete","/"+t+"/"+e,void 0)}(t,e)}},A=void 0!==window._oc_appswebroots&&window._oc_appswebroots;var x=i(21391),C=i.n(x),N=i(78112),k=i(96763);const E={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function P(t,e){if(l.default.isArray(t))return l.default.map(t,(function(t){return P(t,e)}));var n={href:t.href};return l.default.each(t.propStat,(function(t){if("HTTP/1.1 200 OK"===t.status)for(var r in t.properties){var i=r;r in e&&(i=e[r]),n[i]=t.properties[r]}})),n.id||(n.id=j(n.href)),n}function j(t){var e=t.indexOf("?");e>0&&(t=t.substr(0,e));var n,r=t.split("/");do{n=r[r.length-1],r.pop()}while(!n&&r.length>0);return n}function S(t){return t>=200&&t<=299}function T(t,e,n,r){return t.propPatch(e.url,function(t,e){var n,r={};for(n in t){var i=e[n],s=t[n];i||(k.warn('No matching DAV property for property "'+n),i=n),(l.default.isBoolean(s)||l.default.isNumber(s))&&(s=""+s),r[i]=s}return r}(n.changed,e.davProperties),r).then((function(t){S(t.status)?l.default.isFunction(e.success)&&e.success(n.toJSON()):l.default.isFunction(e.error)&&e.error(t)}))}const O=C().noConflict();Object.assign(O,{davCall:(t,e)=>{var n=new N.dav.Client({baseUrl:t.url,xmlNamespaces:l.default.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},t.xmlNamespaces||{})});n.resolveUrl=function(){return t.url};var r=l.default.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},t.headers);return"PROPFIND"===t.type?function(t,e,n,r){return t.propFind(e.url,l.default.values(e.davProperties)||[],e.depth,r).then((function(t){if(S(t.status)){if(l.default.isFunction(e.success)){var n=l.default.invert(e.davProperties),r=P(t.body,n);e.depth>0&&r.shift(),e.success(r)}}else l.default.isFunction(e.error)&&e.error(t)}))}(n,t,0,r):"PROPPATCH"===t.type?T(n,t,e,r):"MKCOL"===t.type?function(t,e,n,r){return t.request(e.type,e.url,r,null).then((function(i){S(i.status)?T(t,e,n,r):l.default.isFunction(e.error)&&e.error(i)}))}(n,t,e,r):function(t,e,n,r){return r["Content-Type"]="application/json",t.request(e.type,e.url,r,e.data).then((function(t){if(S(t.status)){if(l.default.isFunction(e.success)){if("PUT"===e.type||"POST"===e.type||"MKCOL"===e.type){var r=t.body||n.toJSON(),i=t.xhr.getResponseHeader("Content-Location");return"POST"===e.type&&i&&(r.id=j(i)),void e.success(r)}if(207===t.status){var s=l.default.invert(e.davProperties);e.success(P(t.body,s))}else e.success(t.body)}}else l.default.isFunction(e.error)&&e.error(t)}))}(n,t,e,r)},davSync:(t=>(e,n,r)=>{var i={type:E[e]||e},s=n instanceof t.Collection;if("update"===e&&(n.hasInnerCollection?i.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(i.type="PUT")),r.url||(i.url=l.default.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=r.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(i.data=JSON.stringify(r.attrs||n.toJSON(r))),"PROPFIND"!==i.type&&(i.processData=!1),"PROPFIND"===i.type||"PROPPATCH"===i.type){var o=n.davProperties;!o&&n.model&&(o=n.model.prototype.davProperties),o&&(l.default.isFunction(o)?i.davProperties=o.call(n):i.davProperties=o),i.davProperties=l.default.extend(i.davProperties||{},r.davProperties),l.default.isUndefined(r.depth)&&(r.depth=s?1:0)}var a=r.error;r.error=function(t,e,n){r.textStatus=e,r.errorThrown=n,a&&a.call(r.context,t,e,n)};var u=r.xhr=t.davCall(l.default.extend(i,r),n);return n.trigger("request",n,u,r),u})(O)});const I=O;var L=i(71089);const R=window._oc_config||{},F=document.getElementsByTagName("head")[0].getAttribute("data-user"),B=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),U=void 0!==F&&F;var M=i(39285),D=i(36882),$=i(43627);const z={YES_NO_BUTTONS:70,OK_BUTTONS:71,FILEPICKER_TYPE_CHOOSE:1,FILEPICKER_TYPE_MOVE:2,FILEPICKER_TYPE_COPY:3,FILEPICKER_TYPE_COPY_MOVE:4,FILEPICKER_TYPE_CUSTOM:5,dialogsCounter:0,alert:function(t,e,n,r){this.message(t,e,"alert",z.OK_BUTTON,n,r)},info:function(t,e,n,r){this.message(t,e,"info",z.OK_BUTTON,n,r)},confirm:function(t,e,n,r){return this.message(t,e,"notice",z.YES_NO_BUTTONS,n,r)},confirmDestructive:function(t,e,n,r,i){return this.message(t,e,"none",n,r,void 0===i||i)},confirmHtml:function(t,e,n,r){return this.message(t,e,"notice",z.YES_NO_BUTTONS,n,r,!0)},prompt:function(e,n,r,i,s,o){return c().when(this._getMessageTemplate()).then((function(a){var u="oc-dialog-"+z.dialogsCounter+"-content",d="#"+u,h=a.octemplate({dialog_name:u,title:n,message:e,type:"notice"}),f=c()("<input/>");f.attr("type",o?"password":"text").attr("id",u+"-input").attr("placeholder",s);var p=c()("<label/>").attr("for",u+"-input").text(s+": ");h.append(p),h.append(f),void 0===i&&(i=!1),c()("body").append(h),void 0!==r&&(r=l.default.once(r));var m=[{text:t("core","No"),click:function(){void 0!==r&&r(!1,f.val()),c()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==r&&r(!0,f.val()),c()(d).ocdialog("close")},defaultButton:!0}];c()(d).ocdialog({closeOnEscape:!0,modal:i,buttons:m,close:function(){void 0!==r&&r(!1,f.val())}}),f.focus(),z.dialogsCounter++}))},filepicker(e,n){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:d.bh.Choose,o=arguments.length>6&&void 0!==arguments[6]?arguments[6]:void 0,a=arguments.length>7&&void 0!==arguments[7]?arguments[7]:void 0;const l=(t,e)=>{const n=t=>{const e=(null==t?void 0:t.root)||"";let n=(null==t?void 0:t.path)||"";return n.startsWith(e)&&(n=n.slice(e.length)||"/"),n};return r?r=>t(r.map(n),e):r=>t(n(r[0]),e)},u=(0,d.a1)(e);s===this.FILEPICKER_TYPE_CUSTOM?(a.buttons||[]).forEach((t=>{u.addButton({callback:l(n,t.type),label:t.text,type:t.defaultButton?"primary":"secondary"})})):u.setButtonFactory(((e,r)=>{var i,o;const a=[],u=(null==e||null===(i=e[0])||void 0===i||null===(i=i.attributes)||void 0===i?void 0:i.displayName)||(null==e||null===(o=e[0])||void 0===o?void 0:o.basename),c=u||(0,$.basename)(r);return s===d.bh.Choose&&a.push({callback:l(n,d.bh.Choose),label:u&&!this.multiSelect?t("core","Choose {file}",{file:u}):t("core","Choose"),type:"primary"}),s!==d.bh.CopyMove&&s!==d.bh.Copy||a.push({callback:l(n,d.bh.Copy),label:c?t("core","Copy to {target}",{target:c}):t("core","Copy"),type:"primary",icon:D}),s!==d.bh.Move&&s!==d.bh.CopyMove||a.push({callback:l(n,d.bh.Move),label:c?t("core","Move to {target}",{target:c}):t("core","Move"),type:s===d.bh.Move?"primary":"secondary",icon:M}),a})),i&&u.setMimeTypeFilter("string"==typeof i?[i]:i||[]),"function"==typeof(null==a?void 0:a.filter)&&u.setFilter((t=>a.filter((t=>{var e,n,r,i,s,o;return{id:t.fileid||null,path:t.path,mimetype:t.mime||null,mtime:(null===(e=t.mtime)||void 0===e?void 0:e.getTime())||null,permissions:t.permissions,name:(null===(n=t.attributes)||void 0===n?void 0:n.displayName)||t.basename,etag:(null===(r=t.attributes)||void 0===r?void 0:r.etag)||null,hasPreview:(null===(i=t.attributes)||void 0===i?void 0:i.hasPreview)||null,mountType:(null===(s=t.attributes)||void 0===s?void 0:s.mountType)||null,quotaAvailableBytes:(null===(o=t.attributes)||void 0===o?void 0:o.quotaAvailableBytes)||null,icon:null,sharePermissions:null}})(t)))),u.allowDirectories(!0===(null==a?void 0:a.allowDirectoryChooser)||(null==i?void 0:i.includes("httpd/unix-directory"))||!1).setMultiSelect(r).startAt(o).build().pick()},message:function(e,n,r,i,s,o,a){return c().when(this._getMessageTemplate()).then((function(l){var u="oc-dialog-"+z.dialogsCounter+"-content",d="#"+u,h=l.octemplate({dialog_name:u,title:n,message:e,type:r},a?{escapeFunction:""}:{});void 0===o&&(o=!1),c()("body").append(h);var f=[];switch(i){case z.YES_NO_BUTTONS:f=[{text:t("core","No"),click:function(){void 0!==s&&s(!1),c()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==s&&s(!0),c()(d).ocdialog("close")},defaultButton:!0}];break;case z.OK_BUTTON:f[0]={text:t("core","OK"),click:function(){c()(d).ocdialog("close"),void 0!==s&&s()},defaultButton:!0};break;default:"object"==typeof i&&i.type===z.YES_NO_BUTTONS&&(f=[{text:i.cancel||t("core","No"),click:function(){void 0!==s&&s(!1),c()(d).ocdialog("close")}},{text:i.confirm||t("core","Yes"),click:function(){void 0!==s&&s(!0),c()(d).ocdialog("close")},defaultButton:!0,classes:i.confirmClasses}])}c()(d).ocdialog({closeOnEscape:!0,closeCallback:()=>{s&&s(!1)},modal:o,buttons:f}),z.dialogsCounter++})).fail((function(r,i){0===r?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:i}))}))},_fileexistsshown:!1,fileexists:function(e,r,i,s){var o=this,a=new(c().Deferred),l=function(t,e,n,r,i){r=Math.round(r),i=Math.round(i);for(var s=t.getContext("2d").getImageData(0,0,e,n),o=t.getContext("2d").getImageData(0,0,r,i),a=s.data,l=o.data,u=e/r,c=n/i,d=Math.ceil(u/2),h=Math.ceil(c/2),f=0;f<i;f++)for(var p=0;p<r;p++){for(var m=4*(p+f*r),g=0,v=0,y=0,b=0,w=0,A=0,_=0,x=(f+.5)*c,C=Math.floor(f*c);C<(f+1)*c;C++)for(var N=Math.abs(x-(C+.5))/h,k=(p+.5)*u,E=N*N,P=Math.floor(p*u);P<(p+1)*u;P++){var j=Math.abs(k-(P+.5))/d,S=Math.sqrt(E+j*j);S>=-1&&S<=1&&(g=2*S*S*S-3*S*S+1)>0&&(_+=g*a[3+(j=4*(P+C*e))],y+=g,a[j+3]<255&&(g=g*a[j+3]/250),b+=g*a[j],w+=g*a[j+1],A+=g*a[j+2],v+=g)}l[m]=b/v,l[m+1]=w/v,l[m+2]=A/v,l[m+3]=_/y}t.getContext("2d").clearRect(0,0,Math.max(e,r),Math.max(n,i)),t.width=r,t.height=i,t.getContext("2d").putImageData(o,0,0)},u=function(n,r,i){var s=n.find(".template").clone().removeClass("template").addClass("conflict"),o=s.find(".original"),a=s.find(".replacement");s.data("data",e),s.find(".filename").text(r.name),o.find(".size").text(wt.Util.humanFileSize(r.size)),o.find(".mtime").text(wt.Util.formatDate(r.mtime)),i.size&&i.lastModified&&(a.find(".size").text(wt.Util.humanFileSize(i.size)),a.find(".mtime").text(wt.Util.formatDate(i.lastModified)));var u=r.directory+"/"+r.name,d={file:u,x:96,y:96,c:r.etag,forceIcon:0},h=Files.generatePreviewUrl(d);h=h.replace(/'/g,"%27"),o.find(".icon").css({"background-image":"url('"+h+"')"}),function(t){var e=new(c().Deferred),n=t.type&&t.type.split("/").shift();if(window.FileReader&&"image"===n){var r=new FileReader;r.onload=function(t){var n=new Blob([t.target.result]);window.URL=window.URL||window.webkitURL;var r=window.URL.createObjectURL(n),i=new Image;i.src=r,i.onload=function(){var t,n,r,s,o,a,u,c=(t=i,o=document.createElement("canvas"),a=t.width,u=t.height,a>u?(r=0,n=(a-u)/2):(r=(u-a)/2,n=0),s=Math.min(a,u),o.width=s,o.height=s,o.getContext("2d").drawImage(t,n,r,s,s,0,0,s,s),l(o,s,s,96,96),o.toDataURL("image/png",.7));e.resolve(c)}},r.readAsArrayBuffer(t)}else e.reject();return e}(i).then((function(t){a.find(".icon").css("background-image","url("+t+")")}),(function(){u=wt.MimeType.getIconUrl(i.type),a.find(".icon").css("background-image","url("+u+")")}));var f=n.find(".conflict").length;o.find("input:checkbox").attr("id","checkbox_original_"+f),a.find("input:checkbox").attr("id","checkbox_replacement_"+f),n.append(s),i.lastModified>r.mtime?a.find(".mtime").css("font-weight","bold"):i.lastModified<r.mtime&&o.find(".mtime").css("font-weight","bold"),i.size&&i.size>r.size?a.find(".size").css("font-weight","bold"):i.size&&i.size<r.size&&o.find(".size").css("font-weight","bold"),"readonly"===r.status&&(o.addClass("readonly").find('input[type="checkbox"]').prop("checked",!0).prop("disabled",!0),o.find(".message").text(t("core","read-only")))},d="oc-dialog-fileexists-content",h="#"+d;if(this._fileexistsshown){var f=c()(h+" .conflicts");u(f,r,i);var p=c()(h+" .conflict").length,m=n("core","{count} file conflict","{count} file conflicts",p,{count:p});c()(h).parent().children(".oc-dialog-title").text(m),c()(window).trigger("resize"),a.resolve()}else this._fileexistsshown=!0,c().when(this._getFileExistsTemplate()).then((function(n){var l=t("core","One file conflict"),f=n.octemplate({dialog_name:d,title:l,type:"fileexists",allnewfiles:t("core","New Files"),allexistingfiles:t("core","Already existing files"),why:t("core","Which files do you want to keep?"),what:t("core","If you select both versions, the copied file will have a number added to its name.")});if(c()("body").append(f),r&&i){var p=f.find(".conflicts");u(p,r,i)}var m=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==s.onCancel&&s.onCancel(e),c()(h).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==s.onContinue&&s.onContinue(c()(h+" .conflict")),c()(h).ocdialog("close")}}];c()(h).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:m,closeButton:null,close:function(){o._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(t){}}}),c()(h).css("height","auto");var g=f.closest(".oc-dialog").find("button.continue");function v(){var t=f.find(".conflicts .checkbox:checked").length;g.prop("disabled",0===t)}g.prop("disabled",!0),c()(h).find(".allnewfiles").on("click",(function(){c()(h).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(h).find(".allexistingfiles").on("click",(function(){c()(h).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(h).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var t=c()(this).find('input[type="checkbox"]');t.prop("checked",!t.prop("checked"))})),c()(h).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var t=c()(this);t.prop("checked",!t.prop("checked"))})),c()(h).on("click",".replacement,.allnewfiles",(function(){var e=c()(h).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(h+" .conflict").length?(c()(h).find(".allnewfiles").prop("checked",!0),c()(h).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(h).find(".allnewfiles").prop("checked",!1),c()(h).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(h).find(".allnewfiles").prop("checked",!1),c()(h).find(".allnewfiles + .count").text("")),v()})),c()(h).on("click",".original,.allexistingfiles",(function(){var e=c()(h).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(h+" .conflict").length?(c()(h).find(".allexistingfiles").prop("checked",!0),c()(h).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(h).find(".allexistingfiles").prop("checked",!1),c()(h).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(h).find(".allexistingfiles").prop("checked",!1),c()(h).find(".allexistingfiles + .count").text("")),v()})),a.resolve()})).fail((function(){a.reject(),alert(t("core","Error loading file exists template"))}));return a.promise()},_getMessageTemplate:function(){var t=c().Deferred();if(this.$messageTemplate)t.resolve(this.$messageTemplate);else{var e=this;c().get(wt.filePath("core","templates","message.html"),(function(n){e.$messageTemplate=c()(n),t.resolve(e.$messageTemplate)})).fail((function(e,n,r){t.reject(e.status,r)}))}return t.promise()},_getFileExistsTemplate:function(){var t=c().Deferred();if(this.$fileexistsTemplate)t.resolve(this.$fileexistsTemplate);else{var e=this;c().get(wt.filePath("files","templates","fileexists.html"),(function(n){e.$fileexistsTemplate=c()(n),t.resolve(e.$fileexistsTemplate)})).fail((function(){t.reject()}))}return t.promise()}},H=z,q=((t,e)=>{let n=t.getElementsByTagName("head")[0].getAttribute("data-requesttoken");return{getToken:()=>n,setToken:t=>{n=t,e("csrf-token-update",{token:n})}}})(document,a.Ic),V=q.getToken,K=(q.setToken,function(t,e){var n,r,i="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},e)for(n in e)i+=n+"="+encodeURIComponent(e[n])+"&";if(i+="requesttoken="+encodeURIComponent(V()),this.useFallBack||"undefined"==typeof EventSource){var s="oc_eventsource_iframe_"+K.iframeCount;K.fallBackSources[K.iframeCount]=this,this.iframe=c()("<iframe></iframe>"),this.iframe.attr("id",s),this.iframe.hide(),r="&",-1===t.indexOf("?")&&(r="?"),this.iframe.attr("src",t+r+"fallback=true&fallback_id="+K.iframeCount+"&"+i),c()("body").append(this.iframe),this.useFallBack=!0,K.iframeCount++}else r="&",-1===t.indexOf("?")&&(r="?"),this.source=new EventSource(t+r+i),this.source.onmessage=function(t){for(var e=0;e<this.typelessListeners.length;e++)this.typelessListeners[e](JSON.parse(t.data))}.bind(this);this.listen("__internal__",function(t){"close"===t&&this.close()}.bind(this))});K.fallBackSources=[],K.iframeCount=0,K.fallBackCallBack=function(t,e,n){K.fallBackSources[t].fallBackCallBack(e,n)},K.prototype={typelessListeners:[],iframe:null,listeners:{},useFallBack:!1,fallBackCallBack:function(t,e){var n;if(!this.closed)if(t){if(void 0!==this.listeners.done)for(n=0;n<this.listeners[t].length;n++)this.listeners[t][n](e)}else for(n=0;n<this.typelessListeners.length;n++)this.typelessListeners[n](e)},lastLength:0,listen:function(t,e){e&&e.call&&(t?this.useFallBack?(this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)):this.source.addEventListener(t,(function(t){void 0!==t.data?e(JSON.parse(t.data)):e("")}),!1):this.typelessListeners.push(e))},close:function(){this.closed=!0,void 0!==this.source&&this.source.close()}};const Y=K;var W=i(22843),G=i(96763);let J=null,X=null;const Q=function(t){if(J){const e=J;J.trigger(new(c().Event)("beforeHide")),J.slideUp(50,(function(){e.trigger(new(c().Event)("afterHide")),t&&t.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),X&&X.attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),J=null,X=null},Z=!!window._oc_isadmin;var tt=i(93633),et=i.n(tt),nt=i(53334);const rt={load:nt.Zi,register:nt.kz,_unregister:nt.ht,translate:nt.Tl,translatePlural:nt.zw};et().registerHelper("t",(function(t,e){return(0,nt.Tl)(t,e)}));const it={startSaving(e){this.startAction(e,t("core","Saving …"))},startAction(t,e){c()(t).text(e).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving(t,e){this.finishedAction(t,e)},finishedAction(t,e){"success"===e.status?this.finishedSuccess(t,e.data.message):this.finishedError(t,e.data.message)},finishedSuccess(t,e){c()(t).text(e).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError(t,e){c()(t).text(e).addClass("error").removeClass("success").show()}};var st=i(56760);i(51257);const ot={requiresPasswordConfirmation:()=>(0,st.o)(),requirePasswordConfirmation(t,e,n){(0,st.C)().then(t,n)}},at={_plugins:{},register(t,e){let n=this._plugins[t];n||(n=this._plugins[t]=[]),n.push(e)},getPlugins(t){return this._plugins[t]||[]},attach(t,e,n){const r=this.getPlugins(t);for(let t=0;t<r.length;t++)r[t].attach&&r[t].attach(e,n)},detach(t,e,n){const r=this.getPlugins(t);for(let t=0;t<r.length;t++)r[t].detach&&r[t].detach(e,n)}},lt=window._theme||{};var ut=i(95093),ct=i.n(ut);const dt={_handlers:[],_pushState(t,e,n){let r;if(r="string"==typeof t?t:wt.buildQueryString(t),window.history.pushState){if(e=e||location.pathname+"?"+r,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51){const t=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]');for(let e,n=0,r=t.length;n<r;n++)e=t[n],e.style.fill=e.style.fill,e.style.stroke=e.style.stroke,e.removeAttribute("filter"),e.setAttribute("filter","url(#invert)")}n?window.history.replaceState(t,"",e):window.history.pushState(t,"",e)}else window.location.hash="?"+r,this._cancelPop=!0},pushState(t,e){this._pushState(t,e,!1)},replaceState(t,e){this._pushState(t,e,!0)},addOnPopStateHandler(t){this._handlers.push(t)},_parseHashQuery(){const t=window.location.hash,e=t.indexOf("?");return e>=0?t.substr(e+1):t.length?t.substr(1):""},_decodeQuery:t=>t.replace(/\+/g," "),parseUrlQuery(){const t=this._parseHashQuery();let e;return t&&(e=wt.parseQueryString(this._decodeQuery(t))),e=l.default.extend(e||{},wt.parseQueryString(this._decodeQuery(location.search))),e||{}},_onPopState(t){if(this._cancelPop)return void(this._cancelPop=!1);let e;if(this._handlers.length){e=t&&t.state,l.default.isString(e)?e=wt.parseQueryString(e):e||(e=this.parseUrlQuery()||{});for(let t=0;t<this._handlers.length;t++)this._handlers[t](e)}}};var ht=i(35810),ft=i(96763);function pt(t){const e=[];let n,r=0,i=-1,s=0;for(;r<t.length;){n=t.charAt(r);const o=!s&&"."===n||n>="0"&&n<="9";o!==s&&(i++,e[i]="",s=o),e[i]+=n,r++}return e}const mt={History:dt,humanFileSize:ht.v7,computerFileSize(t){if("string"!=typeof t)return null;const e=t.toLowerCase().trim();let n=null;const r=e.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===r?null:(n=parseFloat(e),isFinite(n)?(r[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[r[5]]),n=Math.round(n),n):null)},formatDate:(t,e)=>(void 0===window.TESTING&&wt.debug&&ft.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),e=e||"LLL",ct()(t).format(e)),relativeModifiedDate(e){void 0===window.TESTING&&wt.debug&&ft.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");const n=ct()().diff(ct()(e));return n>=0&&n<45e3?t("core","seconds ago"):ct()(e).fromNow()},getScrollBarWidth(){if(this._scrollBarWidth)return this._scrollBarWidth;const t=document.createElement("p");t.style.width="100%",t.style.height="200px";const e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);const n=t.offsetWidth;e.style.overflow="scroll";let r=t.offsetWidth;return n===r&&(r=e.clientWidth),document.body.removeChild(e),this._scrollBarWidth=n-r,this._scrollBarWidth},stripTime:t=>new Date(t.getFullYear(),t.getMonth(),t.getDate()),naturalSortCompare(t,e){let n;const r=pt(t),i=pt(e);for(n=0;r[n]&&i[n];n++)if(r[n]!==i[n]){const t=Number(r[n]),e=Number(i[n]);return t==r[n]&&e==i[n]?t-e:r[n].localeCompare(i[n],wt.getLanguage())}return r.length-i.length},waitFor(t,e){const n=function(){!0!==t()&&setTimeout(n,e)};n()},isCookieSetToValue(t,e){const n=document.cookie.split(";");for(let r=0;r<n.length;r++){const i=n[r].split("=");if(i[0].trim()===t&&i[1].trim()===e)return!0}return!1}},gt=window._oc_debug;let vt=window._oc_webroot;if(void 0===vt){vt=location.pathname;const t=vt.indexOf("/index.php/");vt=-1!==t?vt.substr(0,t):vt.substr(0,vt.lastIndexOf("/"))}const yt=vt;var bt=i(96763);const wt={coreApps:["","admin","log","core/search","core","3rdparty"],menuSpeed:50,PERMISSION_ALL:31,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_NONE:0,PERMISSION_READ:1,PERMISSION_SHARE:16,PERMISSION_UPDATE:2,TAG_FAVORITE:"_$!<Favorite>!$_",fileIsBlacklisted:t=>!!t.match(R.blacklist_files_regex),Apps:g,AppConfig:w,appConfig:b,appswebroots:A,Backbone:I,config:R,currentUser:U,dialogs:H,EventSource:Y,getCurrentUser:()=>({uid:U,displayName:B}),isUserAdmin:()=>Z,L10N:rt,_ajaxConnectionLostHandler:p,_processAjaxError:t=>{(0!==t.status||"abort"!==t.statusText&&"timeout"!==t.statusText&&!wt._reloadCalled)&&(l.default.contains([302,303,307,401],t.status)&&wt.currentUser?setTimeout((function(){if(!wt._userIsNavigatingAway&&!wt._reloadCalled){let t=0;const e=5,r=setInterval((function(){f.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",e-t)),t>=e&&(clearInterval(r),wt.reload()),t++}),1e3);wt._reloadCalled=!0}}),100):0===t.status&&setTimeout((function(){wt._userIsNavigatingAway||wt._reloadCalled||wt._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:t=>{t.addEventListener&&(t.addEventListener("load",(()=>{4===t.readyState&&(t.status>=200&&t.status<300||304===t.status||c()(document).trigger(new(c().Event)("ajaxError"),t))})),t.addEventListener("error",(()=>{c()(document).trigger(new(c().Event)("ajaxError"),t)})))},getCapabilities:()=>(OC.debug&&G.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,W.F)()),hideMenus:Q,registerMenu:function(t,e,n,r){e.addClass("menu");const i="A"===t.prop("tagName")||"BUTTON"===t.prop("tagName");t.on(i?"click.menu":"click.menu keyup.menu",(function(i){i.preventDefault(),i.key&&"Enter"!==i.key||(e.is(J)?Q():(J&&Q(),!0===r&&e.parent().addClass("openedMenu"),t.attr("aria-expanded",!0),e.slideToggle(50,n),J=e,X=t))}))},showMenu:(t,e,n)=>{e.is(J)||(Q(),J=e,X=t,e.trigger(new(c().Event)("beforeShow")),e.show(),e.trigger(new(c().Event)("afterShow")),l.default.isFunction(n)&&n())},unregisterMenu:(t,e)=>{e.is(J)&&Q(),t.off("click.menu").removeClass("menutoggle"),e.removeClass("menu")},basename:L.P8,encodePath:L.O0,dirname:L.pD,isSamePath:L.ys,joinPaths:L.HS,getHost:()=>window.location.host,getHostName:()=>window.location.hostname,getPort:()=>window.location.port,getProtocol:()=>window.location.protocol.split(":")[0],getCanonicalLocale:nt.lO,getLocale:nt.JK,getLanguage:nt.Z0,buildQueryString:t=>t?c().map(t,(function(t,e){let n=encodeURIComponent(e);return null!=t&&(n+="="+encodeURIComponent(t)),n})).join("&"):"",parseQueryString:t=>{let e,n;const r={};let i;if(!t)return null;e=t.indexOf("?"),e>=0&&(t=t.substr(e+1));const s=t.replace(/\+/g,"%20").split("&");for(let t=0;t<s.length;t++){const o=s[t];e=o.indexOf("="),n=e>=0?[o.substr(0,e),o.substr(e+1)]:[o],n.length&&(i=decodeURIComponent(n[0]),i&&(r[i]=n.length>1?decodeURIComponent(n[1]):null))}return r},msg:it,Notification:f,PasswordConfirmation:ot,Plugins:at,theme:lt,Util:mt,debug:gt,filePath:v.fg,generateUrl:v.Jv,get:(At=window,t=>{const e=t.split("."),n=e.pop();for(let t=0;t<e.length;t++)if(!(At=At[e[t]]))return!1;return At[n]}),set:(t=>(e,n)=>{const r=e.split("."),i=r.pop();for(let e=0;e<r.length;e++)t[r[e]]||(t[r[e]]={}),t=t[r[e]];return t[i]=n,n})(window),getRootPath:v.aU,imagePath:v.d0,redirect:t=>{window.location=t},reload:()=>{window.location.reload()},requestToken:V(),linkTo:v.uM,linkToOCS:(t,e)=>(0,v.KT)(t,{},{ocsVersion:e||1})+"/",linkToRemote:v.dC,linkToRemoteBase:t=>(0,v.aU)()+"/remote.php/"+t,webroot:yt};var At;(0,a.B1)("csrf-token-update",(t=>{OC.requestToken=t.token,bt.info("OC.requestToken changed",t.token)}));var _t=i(38613);const xt="%[a-f0-9]{2}",Ct=new RegExp("("+xt+")|([^%]+?)","gi"),Nt=new RegExp("("+xt+")+","gi");function kt(t,e){try{return[decodeURIComponent(t.join(""))]}catch{}if(1===t.length)return t;e=e||1;const n=t.slice(0,e),r=t.slice(e);return Array.prototype.concat.call([],kt(n),kt(r))}function Et(t){try{return decodeURIComponent(t)}catch{let e=t.match(Ct)||[];for(let n=1;n<e.length;n++)e=(t=kt(e,n).join("")).match(Ct)||[];return t}}function Pt(t,e){if("string"!=typeof t||"string"!=typeof e)throw new TypeError("Expected the arguments to be of type `string`");if(""===t||""===e)return[];const n=t.indexOf(e);return-1===n?[]:[t.slice(0,n),t.slice(n+e.length)]}function jt(t,e){const n={};if(Array.isArray(e))for(const r of e){const e=Object.getOwnPropertyDescriptor(t,r);e?.enumerable&&Object.defineProperty(n,r,e)}else for(const r of Reflect.ownKeys(t)){const i=Object.getOwnPropertyDescriptor(t,r);i.enumerable&&e(r,t[r],t)&&Object.defineProperty(n,r,i)}return n}const St=t=>null==t,Tt=t=>encodeURIComponent(t).replaceAll(/[!'()*]/g,(t=>`%${t.charCodeAt(0).toString(16).toUpperCase()}`)),Ot=Symbol("encodeFragmentIdentifier");function It(t){if("string"!=typeof t||1!==t.length)throw new TypeError("arrayFormatSeparator must be single character string")}function Lt(t,e){return e.encode?e.strict?Tt(t):encodeURIComponent(t):t}function Rt(t,e){return e.decode?function(t){if("string"!=typeof t)throw new TypeError("Expected `encodedURI` to be of type `string`, got `"+typeof t+"`");try{return decodeURIComponent(t)}catch{return function(t){const e={"%FE%FF":"��","%FF%FE":"��"};let n=Nt.exec(t);for(;n;){try{e[n[0]]=decodeURIComponent(n[0])}catch{const t=Et(n[0]);t!==n[0]&&(e[n[0]]=t)}n=Nt.exec(t)}e["%C2"]="�";const r=Object.keys(e);for(const n of r)t=t.replace(new RegExp(n,"g"),e[n]);return t}(t)}}(t):t}function Ft(t){return Array.isArray(t)?t.sort():"object"==typeof t?Ft(Object.keys(t)).sort(((t,e)=>Number(t)-Number(e))).map((e=>t[e])):t}function Bt(t){const e=t.indexOf("#");return-1!==e&&(t=t.slice(0,e)),t}function Ut(t,e){return e.parseNumbers&&!Number.isNaN(Number(t))&&"string"==typeof t&&""!==t.trim()?t=Number(t):!e.parseBooleans||null===t||"true"!==t.toLowerCase()&&"false"!==t.toLowerCase()||(t="true"===t.toLowerCase()),t}function Mt(t){const e=(t=Bt(t)).indexOf("?");return-1===e?"":t.slice(e+1)}function Dt(t,e){It((e={decode:!0,sort:!0,arrayFormat:"none",arrayFormatSeparator:",",parseNumbers:!1,parseBooleans:!1,...e}).arrayFormatSeparator);const n=function(t){let e;switch(t.arrayFormat){case"index":return(t,n,r)=>{e=/\[(\d*)]$/.exec(t),t=t.replace(/\[\d*]$/,""),e?(void 0===r[t]&&(r[t]={}),r[t][e[1]]=n):r[t]=n};case"bracket":return(t,n,r)=>{e=/(\[])$/.exec(t),t=t.replace(/\[]$/,""),e?void 0!==r[t]?r[t]=[...r[t],n]:r[t]=[n]:r[t]=n};case"colon-list-separator":return(t,n,r)=>{e=/(:list)$/.exec(t),t=t.replace(/:list$/,""),e?void 0!==r[t]?r[t]=[...r[t],n]:r[t]=[n]:r[t]=n};case"comma":case"separator":return(e,n,r)=>{const i="string"==typeof n&&n.includes(t.arrayFormatSeparator),s="string"==typeof n&&!i&&Rt(n,t).includes(t.arrayFormatSeparator);n=s?Rt(n,t):n;const o=i||s?n.split(t.arrayFormatSeparator).map((e=>Rt(e,t))):null===n?n:Rt(n,t);r[e]=o};case"bracket-separator":return(e,n,r)=>{const i=/(\[])$/.test(e);if(e=e.replace(/\[]$/,""),!i)return void(r[e]=n?Rt(n,t):n);const s=null===n?[]:n.split(t.arrayFormatSeparator).map((e=>Rt(e,t)));void 0!==r[e]?r[e]=[...r[e],...s]:r[e]=s};default:return(t,e,n)=>{void 0!==n[t]?n[t]=[...[n[t]].flat(),e]:n[t]=e}}}(e),r=Object.create(null);if("string"!=typeof t)return r;if(!(t=t.trim().replace(/^[?#&]/,"")))return r;for(const i of t.split("&")){if(""===i)continue;const t=e.decode?i.replaceAll("+"," "):i;let[s,o]=Pt(t,"=");void 0===s&&(s=t),o=void 0===o?null:["comma","separator","bracket-separator"].includes(e.arrayFormat)?o:Rt(o,e),n(Rt(s,e),o,r)}for(const[t,n]of Object.entries(r))if("object"==typeof n&&null!==n)for(const[t,r]of Object.entries(n))n[t]=Ut(r,e);else r[t]=Ut(n,e);return!1===e.sort?r:(!0===e.sort?Object.keys(r).sort():Object.keys(r).sort(e.sort)).reduce(((t,e)=>{const n=r[e];return t[e]=Boolean(n)&&"object"==typeof n&&!Array.isArray(n)?Ft(n):n,t}),Object.create(null))}function $t(t,e){if(!t)return"";It((e={encode:!0,strict:!0,arrayFormat:"none",arrayFormatSeparator:",",...e}).arrayFormatSeparator);const n=n=>e.skipNull&&St(t[n])||e.skipEmptyString&&""===t[n],r=function(t){switch(t.arrayFormat){case"index":return e=>(n,r)=>{const i=n.length;return void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,[Lt(e,t),"[",i,"]"].join("")]:[...n,[Lt(e,t),"[",Lt(i,t),"]=",Lt(r,t)].join("")]};case"bracket":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,[Lt(e,t),"[]"].join("")]:[...n,[Lt(e,t),"[]=",Lt(r,t)].join("")];case"colon-list-separator":return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,[Lt(e,t),":list="].join("")]:[...n,[Lt(e,t),":list=",Lt(r,t)].join("")];case"comma":case"separator":case"bracket-separator":{const e="bracket-separator"===t.arrayFormat?"[]=":"=";return n=>(r,i)=>void 0===i||t.skipNull&&null===i||t.skipEmptyString&&""===i?r:(i=null===i?"":i,0===r.length?[[Lt(n,t),e,Lt(i,t)].join("")]:[[r,Lt(i,t)].join(t.arrayFormatSeparator)])}default:return e=>(n,r)=>void 0===r||t.skipNull&&null===r||t.skipEmptyString&&""===r?n:null===r?[...n,Lt(e,t)]:[...n,[Lt(e,t),"=",Lt(r,t)].join("")]}}(e),i={};for(const[e,r]of Object.entries(t))n(e)||(i[e]=r);const s=Object.keys(i);return!1!==e.sort&&s.sort(e.sort),s.map((n=>{const i=t[n];return void 0===i?"":null===i?Lt(n,e):Array.isArray(i)?0===i.length&&"bracket-separator"===e.arrayFormat?Lt(n,e)+"[]":i.reduce(r(n),[]).join("&"):Lt(n,e)+"="+Lt(i,e)})).filter((t=>t.length>0)).join("&")}function zt(t,e){e={decode:!0,...e};let[n,r]=Pt(t,"#");return void 0===n&&(n=t),{url:n?.split("?")?.[0]??"",query:Dt(Mt(t),e),...e&&e.parseFragmentIdentifier&&r?{fragmentIdentifier:Rt(r,e)}:{}}}function Ht(t,e){e={encode:!0,strict:!0,[Ot]:!0,...e};const n=Bt(t.url).split("?")[0]||"";let r=$t({...Dt(Mt(t.url),{sort:!1}),...t.query},e);r&&=`?${r}`;let i=function(t){let e="";const n=t.indexOf("#");return-1!==n&&(e=t.slice(n)),e}(t.url);if("string"==typeof t.fragmentIdentifier){const r=new URL(n);r.hash=t.fragmentIdentifier,i=e[Ot]?r.hash:`#${t.fragmentIdentifier}`}return`${n}${r}${i}`}function qt(t,e,n){n={parseFragmentIdentifier:!0,[Ot]:!1,...n};const{url:r,query:i,fragmentIdentifier:s}=zt(t,n);return Ht({url:r,query:jt(i,e),fragmentIdentifier:s},n)}function Vt(t,e,n){return qt(t,Array.isArray(e)?t=>!e.includes(t):(t,n)=>!e(t,n),n)}const Kt=s;var Yt=i(16044),Wt=i(82182),Gt=i(48934),Jt=i(9518);const Xt={name:"LoginButton",components:{ArrowRight:i(9191).A,NcButton:Jt.A},props:{value:{type:String,default:t("core","Log in")},valueLoading:{type:String,default:t("core","Logging in …")},loading:{type:Boolean,required:!0},invertedColors:{type:Boolean,default:!1}}};var Qt=i(85072),Zt=i.n(Qt),te=i(97825),ee=i.n(te),ne=i(77659),re=i.n(ne),ie=i(55056),se=i.n(ie),oe=i(10540),ae=i.n(oe),le=i(41113),ue=i.n(le),ce=i(78658),de={};de.styleTagTransform=ue(),de.setAttributes=se(),de.insert=re().bind(null,"head"),de.domAPI=ee(),de.insertStyleElement=ae(),Zt()(ce.A,de),ce.A&&ce.A.locals&&ce.A.locals;var he=i(14486);const fe=(0,he.A)(Xt,(function(){var t=this,e=t._self._c;return e("NcButton",{attrs:{type:"primary","native-type":"submit",wide:!0},on:{click:function(e){return t.$emit("click")}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("div",{staticClass:"submit-wrapper__icon icon-loading-small-dark"}):e("ArrowRight",{staticClass:"submit-wrapper__icon"})]},proxy:!0}])},[t._v("\n\t"+t._s(t.loading?t.valueLoading:t.value)+"\n\t")])}),[],!1,null,"3fa8511b",null).exports,pe={name:"LoginForm",components:{LoginButton:fe,NcPasswordField:Yt.A,NcTextField:Wt.A,NcNoteCard:Gt.A},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},errors:{type:Array,default:()=>[]},messages:{type:Array,default:()=>[]},throttleDelay:{type:Number,default:0},autoCompleteAllowed:{type:Boolean,default:!0},directLogin:{type:Boolean,default:!1},emailStates:{type:Array,default:()=>[]}},data(){var e;return{loading:!1,timezone:null===(e=new Intl.DateTimeFormat)||void 0===e||null===(e=e.resolvedOptions())||void 0===e?void 0:e.timeZone,timezoneOffset:-(new Date).getTimezoneOffset()/60,headline:t("core","Log in to {productName}",{productName:OC.theme.name}),user:"",password:""}},computed:{isError(){return this.invalidPassword||this.userDisabled||this.throttleDelay>5e3},errorLabel(){return this.invalidPassword?t("core","Wrong login or password."):this.userDisabled?t("core","This account is disabled"):this.throttleDelay>5e3?t("core","We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds."):void 0},apacheAuthFailed(){return-1!==this.errors.indexOf("apacheAuthFailed")},csrfCheckFailed(){return-1!==this.errors.indexOf("csrfCheckFailed")},internalException(){return-1!==this.errors.indexOf("internalexception")},invalidPassword(){return-1!==this.errors.indexOf("invalidpassword")},userDisabled(){return-1!==this.errors.indexOf("userdisabled")},loadingIcon:()=>(0,v.d0)("core","loading-dark.gif"),loginActionUrl:()=>(0,v.Jv)("login"),emailEnabled(){return this.emailStates?this.emailStates.every((t=>"1"===t)):1},loginText(){return this.emailEnabled?t("core","Login with username or email"):t("core","Login with username")}},mounted(){""===this.username?this.$refs.user.$refs.inputField.$refs.input.focus():(this.user=this.username,this.$refs.password.$refs.inputField.$refs.input.focus())},methods:{updateUsername(){this.$emit("update:username",this.user)},submit(){this.loading=!0,this.$emit("submit")}}};var me=i(44578),ge={};ge.styleTagTransform=ue(),ge.setAttributes=se(),ge.insert=re().bind(null,"head"),ge.domAPI=ee(),ge.insertStyleElement=ae(),Zt()(me.A,ge),me.A&&me.A.locals&&me.A.locals;const ve=(0,he.A)(pe,(function(){var t=this,e=t._self._c;return e("form",{ref:"loginForm",staticClass:"login-form",attrs:{method:"post",name:"login",action:t.loginActionUrl},on:{submit:t.submit}},[e("fieldset",{staticClass:"login-form__fieldset",attrs:{"data-login-form":""}},[t.apacheAuthFailed?e("NcNoteCard",{attrs:{title:t.t("core","Server side authentication failed!"),type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),t.csrfCheckFailed?e("NcNoteCard",{attrs:{heading:t.t("core","Temporary error"),type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please try again."))+"\n\t\t")]):t._e(),t._v(" "),t.messages.length>0?e("NcNoteCard",t._l(t.messages,(function(n,r){return e("div",{key:r},[t._v("\n\t\t\t\t"+t._s(n)),e("br")])})),0):t._e(),t._v(" "),t.internalException?e("NcNoteCard",{class:t.t("core","An internal error occurred."),attrs:{type:"warning"}},[t._v("\n\t\t\t"+t._s(t.t("core","Please try again or contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("div",{staticClass:"hidden",attrs:{id:"message"}},[e("img",{staticClass:"float-spinner",attrs:{alt:"",src:t.loadingIcon}}),t._v(" "),e("span",{attrs:{id:"messageText"}}),t._v(" "),e("div",{staticStyle:{clear:"both"}})]),t._v(" "),e("h2",{staticClass:"login-form__headline",attrs:{"data-login-form-headline":""},domProps:{innerHTML:t._s(t.headline)}}),t._v(" "),e("NcTextField",{ref:"user",class:{shake:t.invalidPassword},attrs:{id:"user",label:t.loginText,name:"user",value:t.user,autocapitalize:"none",spellchecking:!1,autocomplete:t.autoCompleteAllowed?"username":"off",required:"","data-login-form-input-user":""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("NcPasswordField",{ref:"password",class:{shake:t.invalidPassword},attrs:{id:"password",name:"password",value:t.password,spellchecking:!1,autocapitalize:"none",autocomplete:t.autoCompleteAllowed?"current-password":"off",label:t.t("core","Password"),"helper-text":t.errorLabel,error:t.isError,"data-login-form-input-password":"",required:""},on:{"update:value":function(e){t.password=e}}}),t._v(" "),e("LoginButton",{attrs:{"data-login-form-submit":"",loading:t.loading}}),t._v(" "),t.redirectUrl?e("input",{attrs:{type:"hidden",name:"redirect_url"},domProps:{value:t.redirectUrl}}):t._e(),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone"},domProps:{value:t.timezone}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"timezone_offset"},domProps:{value:t.timezoneOffset}}),t._v(" "),e("input",{attrs:{type:"hidden",name:"requesttoken"},domProps:{value:t.OC.requestToken}}),t._v(" "),t.directLogin?e("input",{attrs:{type:"hidden",name:"direct",value:"1"}}):t._e()],1)])}),[],!1,null,"8c18127a",null).exports;var ye=i(26287);const be={name:"InformationIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},we=(0,he.A)(be,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon information-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports,Ae={name:"LockOpenIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}},_e=(0,he.A)(Ae,(function(){var t=this,e=t._self._c;return e("span",t._b({staticClass:"material-design-icon lock-open-icon",attrs:{"aria-hidden":!t.title||null,"aria-label":t.title,role:"img"},on:{click:function(e){return t.$emit("click",e)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var xe=i(96763);class Ce extends Error{}const Ne={name:"PasswordLessLoginForm",components:{LoginButton:fe,InformationIcon:we,LockOpenIcon:_e,NcTextField:Wt.A},props:{username:{type:String,default:""},redirectUrl:{type:[String,Boolean],default:!1},autoCompleteAllowed:{type:Boolean,default:!0},isHttps:{type:Boolean,default:!1},isLocalhost:{type:Boolean,default:!1},hasPublicKeyCredential:{type:Boolean,default:!1}},data(){return{user:this.username,loading:!1,validCredentials:!0}},methods:{authenticate(){this.$refs.loginForm.checkValidity()&&(xe.debug("passwordless login initiated"),this.getAuthenticationData(this.user).then((t=>(xe.debug(t),t))).then(this.sign).then(this.completeAuthentication).catch((t=>{t instanceof Ce?this.validCredentials=!1:xe.debug(t)})))},changeUsername(t){this.user=t,this.$emit("update:username",this.user)},getAuthenticationData(t){const e=function(t){const e=(t=t.replace(/-/g,"+").replace(/_/g,"/")).length%4;if(e){if(1===e)throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");t+=new Array(5-e).join("=")}return window.atob(t)};return function(t){const e=(0,v.Jv)("/login/webauthn/start");return ye.A.post(e,{loginName:t}).then((t=>t.data))}(t).then((t=>{if(xe.debug("Obtained PublicKeyCredentialRequestOptions"),xe.debug(t),!Object.prototype.hasOwnProperty.call(t,"allowCredentials"))throw xe.debug("No credentials found."),new Ce;return t.challenge=Uint8Array.from(e(t.challenge),(t=>t.charCodeAt(0))),t.allowCredentials=t.allowCredentials.map((function(t){return{...t,id:Uint8Array.from(e(t.id),(t=>t.charCodeAt(0)))}})),xe.debug("Converted PublicKeyCredentialRequestOptions"),xe.debug(t),t})).catch((t=>{throw xe.debug("Error while obtaining data"),t}))},sign(t){const e=function(t){return window.btoa(String.fromCharCode(...t))};return navigator.credentials.get({publicKey:t}).then((t=>{return xe.debug(t),xe.debug(new Uint8Array(t.rawId)),xe.debug(e(new Uint8Array(t.rawId))),{id:t.id,type:t.type,rawId:e(new Uint8Array(t.rawId)),response:{authenticatorData:e(new Uint8Array(t.response.authenticatorData)),clientDataJSON:e(new Uint8Array(t.response.clientDataJSON)),signature:e(new Uint8Array(t.response.signature)),userHandle:t.response.userHandle?(n=new Uint8Array(t.response.userHandle),String.fromCharCode(...n)):null}};var n})).then((t=>(xe.debug(t),t))).catch((t=>{xe.debug("GOT AN ERROR!"),xe.debug(t)}))},completeAuthentication(t){xe.debug("TIME TO COMPLETE");const e=this.redirectUrl;return function(t){const e=(0,v.Jv)("/login/webauthn/finish");return ye.A.post(e,{data:t}).then((t=>t.data))}(JSON.stringify(t)).then((t=>{let{defaultRedirectUrl:n}=t;xe.debug("Logged in redirecting"),window.location.href=e||n})).catch((t=>{xe.debug("GOT AN ERROR WHILE SUBMITTING CHALLENGE!"),xe.debug(t)}))},submit(){}}};var ke=i(96798),Ee={};Ee.styleTagTransform=ue(),Ee.setAttributes=se(),Ee.insert=re().bind(null,"head"),Ee.domAPI=ee(),Ee.insertStyleElement=ae(),Zt()(ke.A,Ee),ke.A&&ke.A.locals&&ke.A.locals;const Pe=(0,he.A)(Ne,(function(){var t=this,e=t._self._c;return(t.isHttps||t.isLocalhost)&&t.hasPublicKeyCredential?e("form",{ref:"loginForm",attrs:{method:"post",name:"login"},on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("h2",[t._v(t._s(t.t("core","Log in with a device")))]),t._v(" "),e("fieldset",[e("NcTextField",{attrs:{required:"",value:t.user,autocomplete:t.autoCompleteAllowed?"on":"off",error:!t.validCredentials,label:t.t("core","Login or email"),placeholder:t.t("core","Login or email"),"helper-text":t.validCredentials?"":t.t("core","Your account is not setup for passwordless login.")},on:{"update:value":t.changeUsername}}),t._v(" "),t.validCredentials?e("LoginButton",{attrs:{loading:t.loading},on:{click:t.authenticate}}):t._e()],1)]):t.hasPublicKeyCredential?t.isHttps||t.isLocalhost?t._e():e("div",{staticClass:"update"},[e("LockOpenIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Your connection is not secure")))]),t._v(" "),e("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is only available over a secure connection."))+"\n\t")])],1):e("div",{staticClass:"update"},[e("InformationIcon",{attrs:{size:"70"}}),t._v(" "),e("h2",[t._v(t._s(t.t("core","Browser not supported")))]),t._v(" "),e("p",{staticClass:"infogroup"},[t._v("\n\t\t"+t._s(t.t("core","Passwordless authentication is not supported in your browser."))+"\n\t")])],1)}),[],!1,null,"1b2e37de",null).exports;var je=i(96763);const Se={name:"ResetPassword",components:{LoginButton:fe,NcNoteCard:Gt.A,NcTextField:Wt.A},props:{username:{type:String,required:!0},resetPasswordLink:{type:String,required:!0}},data(){return{error:!1,loading:!1,message:void 0,user:this.username}},watch:{username(t){this.user=t}},methods:{updateUsername(){this.$emit("update:username",this.user)},submit(){this.loading=!0,this.error=!1,this.message="";const t=(0,v.Jv)("/lostpassword/email"),e={user:this.user};return ye.A.post(t,e).then((t=>t.data)).then((t=>{if("success"!==t.status)throw new Error("got status ".concat(t.status));this.message="send-success"})).catch((t=>{je.error("could not send reset email request",t),this.error=!0,this.message="send-error"})).then((()=>{this.loading=!1}))}}};var Te=i(42467),Oe={};Oe.styleTagTransform=ue(),Oe.setAttributes=se(),Oe.insert=re().bind(null,"head"),Oe.domAPI=ee(),Oe.insertStyleElement=ae(),Zt()(Te.A,Oe),Te.A&&Te.A.locals&&Te.A.locals;const Ie=(0,he.A)(Se,(function(){var t=this,e=t._self._c;return e("form",{staticClass:"login-form",on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",{staticClass:"login-form__fieldset"},[e("NcTextField",{attrs:{id:"user",value:t.user,name:"user",autocapitalize:"off",label:t.t("core","Login or email"),required:""},on:{"update:value":function(e){t.user=e},change:t.updateUsername}}),t._v(" "),e("LoginButton",{attrs:{value:t.t("core","Reset password")}}),t._v(" "),"send-success"===t.message?e("NcNoteCard",{attrs:{type:"success"}},[t._v("\n\t\t\t"+t._s(t.t("core","If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or Login, check your spam/junk folders or ask your local administration for help."))+"\n\t\t")]):"send-error"===t.message?e("NcNoteCard",{attrs:{type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Couldn't send reset email. Please contact your administrator."))+"\n\t\t")]):"reset-error"===t.message?e("NcNoteCard",{attrs:{type:"error"}},[t._v("\n\t\t\t"+t._s(t.t("core","Password cannot be changed. Please contact your administrator."))+"\n\t\t")]):t._e(),t._v(" "),e("a",{staticClass:"login-form__link",attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),t.$emit("abort")}}},[t._v("\n\t\t\t"+t._s(t.t("core","Back to login"))+"\n\t\t")])],1)])}),[],!1,null,"2507998a",null).exports,Le={name:"UpdatePassword",components:{LoginButton:fe},props:{username:{type:String,required:!0},resetPasswordTarget:{type:String,required:!0}},data(){return{error:!1,loading:!1,message:void 0,user:this.username,password:"",encrypted:!1,proceed:!1}},watch:{username(t){this.user=t}},methods:{async submit(){this.loading=!0,this.error=!1,this.message="";try{const{data:t}=await ye.A.post(this.resetPasswordTarget,{password:this.password,proceed:this.proceed});if(t&&"success"===t.status)this.message="send-success",this.$emit("update:username",this.user),this.$emit("done");else{if(!t||!t.encryption)throw t&&t.msg?new Error(t.msg):new Error;this.encrypted=!0}}catch(e){this.error=!0,this.message=e.message?e.message:t("core","Password cannot be changed. Please contact your administrator.")}finally{this.loading=!1}}}};var Re=i(60260),Fe={};Fe.styleTagTransform=ue(),Fe.setAttributes=se(),Fe.insert=re().bind(null,"head"),Fe.domAPI=ee(),Fe.insertStyleElement=ae(),Zt()(Re.A,Fe),Re.A&&Re.A.locals&&Re.A.locals;const Be=(0,he.A)(Le,(function(){var t=this,e=t._self._c;return e("form",{on:{submit:function(e){return e.preventDefault(),t.submit.apply(null,arguments)}}},[e("fieldset",[e("p",[e("label",{staticClass:"infield",attrs:{for:"password"}},[t._v(t._s(t.t("core","New password")))]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.password,expression:"password"}],attrs:{id:"password",type:"password",name:"password",autocomplete:"new-password",autocapitalize:"none",spellcheck:"false",required:"",placeholder:t.t("core","New password")},domProps:{value:t.password},on:{input:function(e){e.target.composing||(t.password=e.target.value)}}})]),t._v(" "),t.encrypted?e("div",{staticClass:"update"},[e("p",[t._v("\n\t\t\t\t"+t._s(t.t("core","Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?"))+"\n\t\t\t")]),t._v(" "),e("input",{directives:[{name:"model",rawName:"v-model",value:t.proceed,expression:"proceed"}],staticClass:"checkbox",attrs:{id:"encrypted-continue",type:"checkbox"},domProps:{checked:Array.isArray(t.proceed)?t._i(t.proceed,null)>-1:t.proceed},on:{change:function(e){var n=t.proceed,r=e.target,i=!!r.checked;if(Array.isArray(n)){var s=t._i(n,null);r.checked?s<0&&(t.proceed=n.concat([null])):s>-1&&(t.proceed=n.slice(0,s).concat(n.slice(s+1)))}else t.proceed=i}}}),t._v(" "),e("label",{attrs:{for:"encrypted-continue"}},[t._v("\n\t\t\t\t"+t._s(t.t("core","I know what I'm doing"))+"\n\t\t\t")])]):t._e(),t._v(" "),e("LoginButton",{attrs:{loading:t.loading,value:t.t("core","Reset password"),"value-loading":t.t("core","Resetting password")}}),t._v(" "),t.error&&t.message?e("p",{class:{warning:t.error}},[t._v("\n\t\t\t"+t._s(t.message)+"\n\t\t")]):t._e()],1)])}),[],!1,null,"b9d4933a",null).exports;var Ue=i(96763);const Me=Kt.parse(location.search);if("1"===Me.clear)try{window.localStorage.clear(),window.sessionStorage.clear(),Ue.debug("Browser storage cleared")}catch(t){Ue.error("Could not clear browser storage",t)}const De={name:"Login",components:{LoginForm:ve,PasswordLessLoginForm:Pe,ResetPassword:Ie,UpdatePassword:Be,NcButton:Jt.A,NcNoteCard:Gt.A},data:()=>({loading:!1,user:(0,_t.C)("core","loginUsername",""),passwordlessLogin:!1,resetPassword:!1,errors:(0,_t.C)("core","loginErrors",[]),messages:(0,_t.C)("core","loginMessages",[]),redirectUrl:(0,_t.C)("core","loginRedirectUrl",!1),throttleDelay:(0,_t.C)("core","loginThrottleDelay",0),canResetPassword:(0,_t.C)("core","loginCanResetPassword",!1),resetPasswordLink:(0,_t.C)("core","loginResetPasswordLink",""),autoCompleteAllowed:(0,_t.C)("core","loginAutocomplete",!0),resetPasswordTarget:(0,_t.C)("core","resetPasswordTarget",""),resetPasswordUser:(0,_t.C)("core","resetPasswordUser",""),directLogin:"1"===Me.direct,hasPasswordless:(0,_t.C)("core","webauthn-available",!1),countAlternativeLogins:(0,_t.C)("core","countAlternativeLogins",!1),alternativeLogins:(0,_t.C)("core","alternativeLogins",[]),isHttps:"https:"===window.location.protocol,isLocalhost:"localhost"===window.location.hostname,hasPublicKeyCredential:void 0!==window.PublicKeyCredential,hideLoginForm:(0,_t.C)("core","hideLoginForm",!1),emailStates:(0,_t.C)("core","emailStates",[])}),methods:{passwordResetFinished(){this.resetPasswordTarget="",this.directLogin=!0}}};var $e=i(75056),ze={};ze.styleTagTransform=ue(),ze.setAttributes=se(),ze.insert=re().bind(null,"head"),ze.domAPI=ee(),ze.insertStyleElement=ae(),Zt()($e.A,ze),$e.A&&$e.A.locals&&$e.A.locals;const He=(0,he.A)(De,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"guest-box login-box"},[!t.hideLoginForm||t.directLogin?[e("transition",{attrs:{name:"fade",mode:"out-in"}},[t.passwordlessLogin||t.resetPassword||""!==t.resetPasswordTarget?!t.loading&&t.passwordlessLogin?e("div",{key:"reset-pw-less",staticClass:"login-additional login-passwordless"},[e("PasswordLessLoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"auto-complete-allowed":t.autoCompleteAllowed,"is-https":t.isHttps,"is-localhost":t.isLocalhost,"has-public-key-credential":t.hasPublicKeyCredential},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),e("NcButton",{attrs:{type:"tertiary","aria-label":t.t("core","Back to login form"),wide:!0},on:{click:function(e){t.passwordlessLogin=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Back"))+"\n\t\t\t\t")])],1):!t.loading&&t.canResetPassword?e("div",{key:"reset-can-reset",staticClass:"login-additional"},[e("div",{staticClass:"lost-password-container"},[t.resetPassword?e("ResetPassword",{attrs:{username:t.user,"reset-password-link":t.resetPasswordLink},on:{"update:username":function(e){t.user=e},abort:function(e){t.resetPassword=!1}}}):t._e()],1)]):""!==t.resetPasswordTarget?e("div",[e("UpdatePassword",{attrs:{username:t.user,"reset-password-target":t.resetPasswordTarget},on:{"update:username":function(e){t.user=e},done:t.passwordResetFinished}})],1):t._e():e("div",[e("LoginForm",{attrs:{username:t.user,"redirect-url":t.redirectUrl,"direct-login":t.directLogin,messages:t.messages,errors:t.errors,"throttle-delay":t.throttleDelay,"auto-complete-allowed":t.autoCompleteAllowed,"email-states":t.emailStates},on:{"update:username":function(e){t.user=e},submit:function(e){t.loading=!0}}}),t._v(" "),t.canResetPassword&&""!==t.resetPasswordLink?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t.canResetPassword&&!t.resetPassword?e("a",{staticClass:"login-box__link",attrs:{id:"lost-password",href:t.resetPasswordLink},on:{click:function(e){e.preventDefault(),t.resetPassword=!0}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("core","Forgot password?"))+"\n\t\t\t\t")]):t._e(),t._v(" "),t.hasPasswordless?[t.countAlternativeLogins?e("div",{staticClass:"alternative-logins"},[t.hasPasswordless?e("a",{staticClass:"button",class:{"single-alt-login-option":t.countAlternativeLogins},attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t\t")]):t._e()]):e("a",{attrs:{href:"#"},on:{click:function(e){e.preventDefault(),t.passwordlessLogin=!0}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("core","Log in with a device"))+"\n\t\t\t\t\t")])]:t._e()],2)])]:[e("transition",{attrs:{name:"fade",mode:"out-in"}},[e("NcNoteCard",{attrs:{type:"info",title:t.t("core","Login form is disabled.")}},[t._v("\n\t\t\t\t"+t._s(t.t("core","The Nextcloud login form is disabled. Use another login option if available or contact your administration."))+"\n\t\t\t")])],1)],t._v(" "),e("div",{staticClass:"alternative-logins",attrs:{id:"alternative-logins"}},t._l(t.alternativeLogins,(function(n,r){return e("NcButton",{key:r,class:[n.class],attrs:{type:"secondary",wide:!0,role:"link",href:n.href}},[t._v("\n\t\t\t"+t._s(n.name)+"\n\t\t")])})),1)],2)}),[],!1,null,null,null).exports,qe={data:()=>({OC:wt}),methods:{t:rt.translate.bind(rt),n:rt.translatePlural.bind(rt)}};o.Ay.mixin(qe),(new(o.Ay.extend(He))).$mount("#login")},21391:(t,e,n)=>{var r,i,s;s="object"==typeof self&&self.self===self&&self||"object"==typeof n.g&&n.g.global===n.g&&n.g,r=[n(4523),n(74692),e],i=function(t,e,n){s.Backbone=function(t,e,n,r){var i=t.Backbone,s=Array.prototype.slice;e.VERSION="1.6.0",e.$=r,e.noConflict=function(){return t.Backbone=i,this},e.emulateHTTP=!1,e.emulateJSON=!1;var o,a=e.Events={},l=/\s+/,u=function(t,e,r,i,s){var o,a=0;if(r&&"object"==typeof r){void 0!==i&&"context"in s&&void 0===s.context&&(s.context=i);for(o=n.keys(r);a<o.length;a++)e=u(t,e,o[a],r[o[a]],s)}else if(r&&l.test(r))for(o=r.split(l);a<o.length;a++)e=t(e,o[a],i,s);else e=t(e,r,i,s);return e};a.on=function(t,e,n){return this._events=u(c,this._events||{},t,e,{context:n,ctx:this,listening:o}),o&&((this._listeners||(this._listeners={}))[o.id]=o,o.interop=!1),this},a.listenTo=function(t,e,r){if(!t)return this;var i=t._listenId||(t._listenId=n.uniqueId("l")),s=this._listeningTo||(this._listeningTo={}),a=o=s[i];a||(this._listenId||(this._listenId=n.uniqueId("l")),a=o=s[i]=new g(this,t));var l=d(t,e,r,this);if(o=void 0,l)throw l;return a.interop&&a.on(e,r),this};var c=function(t,e,n,r){if(n){var i=t[e]||(t[e]=[]),s=r.context,o=r.ctx,a=r.listening;a&&a.count++,i.push({callback:n,context:s,ctx:s||o,listening:a})}return t},d=function(t,e,n,r){try{t.on(e,n,r)}catch(t){return t}};a.off=function(t,e,n){return this._events?(this._events=u(h,this._events,t,e,{context:n,listeners:this._listeners}),this):this},a.stopListening=function(t,e,r){var i=this._listeningTo;if(!i)return this;for(var s=t?[t._listenId]:n.keys(i),o=0;o<s.length;o++){var a=i[s[o]];if(!a)break;a.obj.off(e,r,this),a.interop&&a.off(e,r)}return n.isEmpty(i)&&(this._listeningTo=void 0),this};var h=function(t,e,r,i){if(t){var s,o=i.context,a=i.listeners,l=0;if(e||o||r){for(s=e?[e]:n.keys(t);l<s.length;l++){var u=t[e=s[l]];if(!u)break;for(var c=[],d=0;d<u.length;d++){var h=u[d];if(r&&r!==h.callback&&r!==h.callback._callback||o&&o!==h.context)c.push(h);else{var f=h.listening;f&&f.off(e,r)}}c.length?t[e]=c:delete t[e]}return t}for(s=n.keys(a);l<s.length;l++)a[s[l]].cleanup()}};a.once=function(t,e,n){var r=u(f,{},t,e,this.off.bind(this));return"string"==typeof t&&null==n&&(e=void 0),this.on(r,e,n)},a.listenToOnce=function(t,e,n){var r=u(f,{},e,n,this.stopListening.bind(this,t));return this.listenTo(t,r)};var f=function(t,e,r,i){if(r){var s=t[e]=n.once((function(){i(e,s),r.apply(this,arguments)}));s._callback=r}return t};a.trigger=function(t){if(!this._events)return this;for(var e=Math.max(0,arguments.length-1),n=Array(e),r=0;r<e;r++)n[r]=arguments[r+1];return u(p,this._events,t,void 0,n),this};var p=function(t,e,n,r){if(t){var i=t[e],s=t.all;i&&s&&(s=s.slice()),i&&m(i,r),s&&m(s,[e].concat(r))}return t},m=function(t,e){var n,r=-1,i=t.length,s=e[0],o=e[1],a=e[2];switch(e.length){case 0:for(;++r<i;)(n=t[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=t[r]).callback.call(n.ctx,s);return;case 2:for(;++r<i;)(n=t[r]).callback.call(n.ctx,s,o);return;case 3:for(;++r<i;)(n=t[r]).callback.call(n.ctx,s,o,a);return;default:for(;++r<i;)(n=t[r]).callback.apply(n.ctx,e);return}},g=function(t,e){this.id=t._listenId,this.listener=t,this.obj=e,this.interop=!0,this.count=0,this._events=void 0};g.prototype.on=a.on,g.prototype.off=function(t,e){var n;this.interop?(this._events=u(h,this._events,t,e,{context:void 0,listeners:void 0}),n=!this._events):(this.count--,n=0===this.count),n&&this.cleanup()},g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId],this.interop||delete this.obj._listeners[this.id]},a.bind=a.on,a.unbind=a.off,n.extend(e,a);var v=e.Model=function(t,e){var r=t||{};e||(e={}),this.preinitialize.apply(this,arguments),this.cid=n.uniqueId(this.cidPrefix),this.attributes={},e.collection&&(this.collection=e.collection),e.parse&&(r=this.parse(r,e)||{});var i=n.result(this,"defaults");r=n.defaults(n.extend({},i,r),i),this.set(r,e),this.changed={},this.initialize.apply(this,arguments)};n.extend(v.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return n.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return n.escape(this.get(t))},has:function(t){return null!=this.get(t)},matches:function(t){return!!n.iteratee(t,this)(this.attributes)},set:function(t,e,r){if(null==t)return this;var i;if("object"==typeof t?(i=t,r=e):(i={})[t]=e,r||(r={}),!this._validate(i,r))return!1;var s=r.unset,o=r.silent,a=[],l=this._changing;this._changing=!0,l||(this._previousAttributes=n.clone(this.attributes),this.changed={});var u=this.attributes,c=this.changed,d=this._previousAttributes;for(var h in i)e=i[h],n.isEqual(u[h],e)||a.push(h),n.isEqual(d[h],e)?delete c[h]:c[h]=e,s?delete u[h]:u[h]=e;if(this.idAttribute in i){var f=this.id;this.id=this.get(this.idAttribute),this.trigger("changeId",this,f,r)}if(!o){a.length&&(this._pending=r);for(var p=0;p<a.length;p++)this.trigger("change:"+a[p],this,u[a[p]],r)}if(l)return this;if(!o)for(;this._pending;)r=this._pending,this._pending=!1,this.trigger("change",this,r);return this._pending=!1,this._changing=!1,this},unset:function(t,e){return this.set(t,void 0,n.extend({},e,{unset:!0}))},clear:function(t){var e={};for(var r in this.attributes)e[r]=void 0;return this.set(e,n.extend({},t,{unset:!0}))},hasChanged:function(t){return null==t?!n.isEmpty(this.changed):n.has(this.changed,t)},changedAttributes:function(t){if(!t)return!!this.hasChanged()&&n.clone(this.changed);var e,r=this._changing?this._previousAttributes:this.attributes,i={};for(var s in t){var o=t[s];n.isEqual(r[s],o)||(i[s]=o,e=!0)}return!!e&&i},previous:function(t){return null!=t&&this._previousAttributes?this._previousAttributes[t]:null},previousAttributes:function(){return n.clone(this._previousAttributes)},fetch:function(t){t=n.extend({parse:!0},t);var e=this,r=t.success;return t.success=function(n){var i=t.parse?e.parse(n,t):n;if(!e.set(i,t))return!1;r&&r.call(t.context,e,n,t),e.trigger("sync",e,n,t)},q(this,t),this.sync("read",this,t)},save:function(t,e,r){var i;null==t||"object"==typeof t?(i=t,r=e):(i={})[t]=e;var s=(r=n.extend({validate:!0,parse:!0},r)).wait;if(i&&!s){if(!this.set(i,r))return!1}else if(!this._validate(i,r))return!1;var o=this,a=r.success,l=this.attributes;r.success=function(t){o.attributes=l;var e=r.parse?o.parse(t,r):t;if(s&&(e=n.extend({},i,e)),e&&!o.set(e,r))return!1;a&&a.call(r.context,o,t,r),o.trigger("sync",o,t,r)},q(this,r),i&&s&&(this.attributes=n.extend({},l,i));var u=this.isNew()?"create":r.patch?"patch":"update";"patch"!==u||r.attrs||(r.attrs=i);var c=this.sync(u,this,r);return this.attributes=l,c},destroy:function(t){t=t?n.clone(t):{};var e=this,r=t.success,i=t.wait,s=function(){e.stopListening(),e.trigger("destroy",e,e.collection,t)};t.success=function(n){i&&s(),r&&r.call(t.context,e,n,t),e.isNew()||e.trigger("sync",e,n,t)};var o=!1;return this.isNew()?n.defer(t.success):(q(this,t),o=this.sync("delete",this,t)),i||s(),o},url:function(){var t=n.result(this,"urlRoot")||n.result(this.collection,"url")||H();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},n.extend({},t,{validate:!0}))},_validate:function(t,e){if(!e.validate||!this.validate)return!0;t=n.extend({},this.attributes,t);var r=this.validationError=this.validate(t,e)||null;return!r||(this.trigger("invalid",this,r,n.extend(e,{validationError:r})),!1)}});var y=e.Collection=function(t,e){e||(e={}),this.preinitialize.apply(this,arguments),e.model&&(this.model=e.model),void 0!==e.comparator&&(this.comparator=e.comparator),this._reset(),this.initialize.apply(this,arguments),t&&this.reset(t,n.extend({silent:!0},e))},b={add:!0,remove:!0,merge:!0},w={add:!0,remove:!1},A=function(t,e,n){n=Math.min(Math.max(n,0),t.length);var r,i=Array(t.length-n),s=e.length;for(r=0;r<i.length;r++)i[r]=t[r+n];for(r=0;r<s;r++)t[r+n]=e[r];for(r=0;r<i.length;r++)t[r+s+n]=i[r]};n.extend(y.prototype,a,{model:v,preinitialize:function(){},initialize:function(){},toJSON:function(t){return this.map((function(e){return e.toJSON(t)}))},sync:function(){return e.sync.apply(this,arguments)},add:function(t,e){return this.set(t,n.extend({merge:!1},e,w))},remove:function(t,e){e=n.extend({},e);var r=!n.isArray(t);t=r?[t]:t.slice();var i=this._removeModels(t,e);return!e.silent&&i.length&&(e.changes={added:[],merged:[],removed:i},this.trigger("update",this,e)),r?i[0]:i},set:function(t,e){if(null!=t){(e=n.extend({},b,e)).parse&&!this._isModel(t)&&(t=this.parse(t,e)||[]);var r=!n.isArray(t);t=r?[t]:t.slice();var i=e.at;null!=i&&(i=+i),i>this.length&&(i=this.length),i<0&&(i+=this.length+1);var s,o,a=[],l=[],u=[],c=[],d={},h=e.add,f=e.merge,p=e.remove,m=!1,g=this.comparator&&null==i&&!1!==e.sort,v=n.isString(this.comparator)?this.comparator:null;for(o=0;o<t.length;o++){s=t[o];var y=this.get(s);if(y){if(f&&s!==y){var w=this._isModel(s)?s.attributes:s;e.parse&&(w=y.parse(w,e)),y.set(w,e),u.push(y),g&&!m&&(m=y.hasChanged(v))}d[y.cid]||(d[y.cid]=!0,a.push(y)),t[o]=y}else h&&(s=t[o]=this._prepareModel(s,e))&&(l.push(s),this._addReference(s,e),d[s.cid]=!0,a.push(s))}if(p){for(o=0;o<this.length;o++)d[(s=this.models[o]).cid]||c.push(s);c.length&&this._removeModels(c,e)}var _=!1,x=!g&&h&&p;if(a.length&&x?(_=this.length!==a.length||n.some(this.models,(function(t,e){return t!==a[e]})),this.models.length=0,A(this.models,a,0),this.length=this.models.length):l.length&&(g&&(m=!0),A(this.models,l,null==i?this.length:i),this.length=this.models.length),m&&this.sort({silent:!0}),!e.silent){for(o=0;o<l.length;o++)null!=i&&(e.index=i+o),(s=l[o]).trigger("add",s,this,e);(m||_)&&this.trigger("sort",this,e),(l.length||c.length||u.length)&&(e.changes={added:l,removed:c,merged:u},this.trigger("update",this,e))}return r?t[0]:t}},reset:function(t,e){e=e?n.clone(e):{};for(var r=0;r<this.models.length;r++)this._removeReference(this.models[r],e);return e.previousModels=this.models,this._reset(),t=this.add(t,n.extend({silent:!0},e)),e.silent||this.trigger("reset",this,e),t},push:function(t,e){return this.add(t,n.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,n.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(null!=t)return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t,t.idAttribute)]||t.cid&&this._byId[t.cid]},has:function(t){return null!=this.get(t)},at:function(t){return t<0&&(t+=this.length),this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,!0)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var r=e.length;return n.isFunction(e)&&(e=e.bind(this)),1===r||n.isString(e)?this.models=this.sortBy(e):this.models.sort(e),t.silent||this.trigger("sort",this,t),this},pluck:function(t){return this.map(t+"")},fetch:function(t){var e=(t=n.extend({parse:!0},t)).success,r=this;return t.success=function(n){var i=t.reset?"reset":"set";r[i](n,t),e&&e.call(t.context,r,n,t),r.trigger("sync",r,n,t)},q(this,t),this.sync("read",this,t)},create:function(t,e){var r=(e=e?n.clone(e):{}).wait;if(!(t=this._prepareModel(t,e)))return!1;r||this.add(t,e);var i=this,s=e.success;return e.success=function(t,e,n){r&&(t.off("error",i._forwardPristineError,i),i.add(t,n)),s&&s.call(n.context,t,e,n)},r&&t.once("error",this._forwardPristineError,this),t.save(null,e),t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t,e){return t[e||this.model.prototype.idAttribute||"id"]},values:function(){return new x(this,C)},keys:function(){return new x(this,N)},entries:function(){return new x(this,k)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(t,e){return this._isModel(t)?(t.collection||(t.collection=this),t):((e=e?n.clone(e):{}).collection=this,(r=this.model.prototype?new this.model(t,e):this.model(t,e)).validationError?(this.trigger("invalid",this,r.validationError,e),!1):r);var r},_removeModels:function(t,e){for(var n=[],r=0;r<t.length;r++){var i=this.get(t[r]);if(i){var s=this.indexOf(i);this.models.splice(s,1),this.length--,delete this._byId[i.cid];var o=this.modelId(i.attributes,i.idAttribute);null!=o&&delete this._byId[o],e.silent||(e.index=s,i.trigger("remove",i,this,e)),n.push(i),this._removeReference(i,e)}}return t.length>0&&!e.silent&&delete e.index,n},_isModel:function(t){return t instanceof v},_addReference:function(t,e){this._byId[t.cid]=t;var n=this.modelId(t.attributes,t.idAttribute);null!=n&&(this._byId[n]=t),t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var n=this.modelId(t.attributes,t.idAttribute);null!=n&&delete this._byId[n],this===t.collection&&delete t.collection,t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,n,r){if(e){if(("add"===t||"remove"===t)&&n!==this)return;if("destroy"===t&&this.remove(e,r),"changeId"===t){var i=this.modelId(e.previousAttributes(),e.idAttribute),s=this.modelId(e.attributes,e.idAttribute);null!=i&&delete this._byId[i],null!=s&&(this._byId[s]=e)}}this.trigger.apply(this,arguments)},_forwardPristineError:function(t,e,n){this.has(t)||this._onModelEvent("error",t,e,n)}});var _="function"==typeof Symbol&&Symbol.iterator;_&&(y.prototype[_]=y.prototype.values);var x=function(t,e){this._collection=t,this._kind=e,this._index=0},C=1,N=2,k=3;_&&(x.prototype[_]=function(){return this}),x.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var t,e=this._collection.at(this._index);if(this._index++,this._kind===C)t=e;else{var n=this._collection.modelId(e.attributes,e.idAttribute);t=this._kind===N?n:[n,e]}return{value:t,done:!1}}this._collection=void 0}return{value:void 0,done:!0}};var E=e.View=function(t){this.cid=n.uniqueId("view"),this.preinitialize.apply(this,arguments),n.extend(this,n.pick(t,j)),this._ensureElement(),this.initialize.apply(this,arguments)},P=/^(\S+)\s*(.*)$/,j=["model","collection","el","id","attributes","className","tagName","events"];n.extend(E.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(t){return this.undelegateEvents(),this._setElement(t),this.delegateEvents(),this},_setElement:function(t){this.$el=t instanceof e.$?t:e.$(t),this.el=this.$el[0]},delegateEvents:function(t){if(t||(t=n.result(this,"events")),!t)return this;for(var e in this.undelegateEvents(),t){var r=t[e];if(n.isFunction(r)||(r=this[r]),r){var i=e.match(P);this.delegate(i[1],i[2],r.bind(this))}}return this},delegate:function(t,e,n){return this.$el.on(t+".delegateEvents"+this.cid,e,n),this},undelegateEvents:function(){return this.$el&&this.$el.off(".delegateEvents"+this.cid),this},undelegate:function(t,e,n){return this.$el.off(t+".delegateEvents"+this.cid,e,n),this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(this.el)this.setElement(n.result(this,"el"));else{var t=n.extend({},n.result(this,"attributes"));this.id&&(t.id=n.result(this,"id")),this.className&&(t.class=n.result(this,"className")),this.setElement(this._createElement(n.result(this,"tagName"))),this._setAttributes(t)}},_setAttributes:function(t){this.$el.attr(t)}});var S=function(t,e,r,i){n.each(r,(function(n,r){e[r]&&(t.prototype[r]=function(t,e,n,r){switch(e){case 1:return function(){return t[n](this[r])};case 2:return function(e){return t[n](this[r],e)};case 3:return function(e,i){return t[n](this[r],T(e,this),i)};case 4:return function(e,i,s){return t[n](this[r],T(e,this),i,s)};default:return function(){var e=s.call(arguments);return e.unshift(this[r]),t[n].apply(t,e)}}}(e,n,r,i))}))},T=function(t,e){return n.isFunction(t)?t:n.isObject(t)&&!e._isModel(t)?O(t):n.isString(t)?function(e){return e.get(t)}:t},O=function(t){var e=n.matches(t);return function(t){return e(t.attributes)}};n.each([[y,{forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3},"models"],[v,{keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1},"attributes"]],(function(t){var e=t[0],r=t[1],i=t[2];e.mixin=function(t){var r=n.reduce(n.functions(t),(function(t,e){return t[e]=0,t}),{});S(e,t,r,i)},S(e,n,r,i)})),e.sync=function(t,r,i){var s=I[t];n.defaults(i||(i={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var o={type:s,dataType:"json"};if(i.url||(o.url=n.result(r,"url")||H()),null!=i.data||!r||"create"!==t&&"update"!==t&&"patch"!==t||(o.contentType="application/json",o.data=JSON.stringify(i.attrs||r.toJSON(i))),i.emulateJSON&&(o.contentType="application/x-www-form-urlencoded",o.data=o.data?{model:o.data}:{}),i.emulateHTTP&&("PUT"===s||"DELETE"===s||"PATCH"===s)){o.type="POST",i.emulateJSON&&(o.data._method=s);var a=i.beforeSend;i.beforeSend=function(t){if(t.setRequestHeader("X-HTTP-Method-Override",s),a)return a.apply(this,arguments)}}"GET"===o.type||i.emulateJSON||(o.processData=!1);var l=i.error;i.error=function(t,e,n){i.textStatus=e,i.errorThrown=n,l&&l.call(i.context,t,e,n)};var u=i.xhr=e.ajax(n.extend(o,i));return r.trigger("request",r,u,i),u};var I={create:"POST",update:"PUT",patch:"PATCH",delete:"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var L=e.Router=function(t){t||(t={}),this.preinitialize.apply(this,arguments),t.routes&&(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},R=/\((.*?)\)/g,F=/(\(\?)?:\w+/g,B=/\*\w+/g,U=/[\-{}\[\]+?.,\\\^$|#\s]/g;n.extend(L.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(t,r,i){n.isRegExp(t)||(t=this._routeToRegExp(t)),n.isFunction(r)&&(i=r,r=""),i||(i=this[r]);var s=this;return e.history.route(t,(function(n){var o=s._extractParameters(t,n);!1!==s.execute(i,o,r)&&(s.trigger.apply(s,["route:"+r].concat(o)),s.trigger("route",r,o),e.history.trigger("route",s,r,o))})),this},execute:function(t,e,n){t&&t.apply(this,e)},navigate:function(t,n){return e.history.navigate(t,n),this},_bindRoutes:function(){if(this.routes){this.routes=n.result(this,"routes");for(var t,e=n.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(U,"\\$&").replace(R,"(?:$1)?").replace(F,(function(t,e){return e?t:"([^/?]+)"})).replace(B,"([^?]*?)"),new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var r=t.exec(e).slice(1);return n.map(r,(function(t,e){return e===r.length-1?t||null:t?decodeURIComponent(t):null}))}});var M=e.History=function(){this.handlers=[],this.checkUrl=this.checkUrl.bind(this),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},D=/^[#\/]|\s+$/g,$=/^\/+|\/+$/g,z=/#.*$/;M.started=!1,n.extend(M.prototype,a,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root&&!this.getSearch()},matchRoot:function(){return this.decodeFragment(this.location.pathname).slice(0,this.root.length-1)+"/"===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return"/"===t.charAt(0)?t.slice(1):t},getFragment:function(t){return null==t&&(t=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),t.replace(D,"")},start:function(t){if(M.started)throw new Error("Backbone.history has already been started");if(M.started=!0,this.options=n.extend({root:"/"},this.options,t),this.root=this.options.root,this._trailingSlash=this.options.trailingSlash,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange="onhashchange"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=("/"+this.root+"/").replace($,"/"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";return this.location.replace(e+"#"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe"),this.iframe.src="javascript:0",this.iframe.style.display="none",this.iframe.tabIndex=-1;var r=document.body,i=r.insertBefore(this.iframe,r.firstChild).contentWindow;i.document.open(),i.document.close(),i.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState?s("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe?s("hashchange",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};this._usePushState?t("popstate",this.checkUrl,!1):this._useHashChange&&!this.iframe&&t("hashchange",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),M.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe&&(e=this.getHash(this.iframe.contentWindow)),e===this.fragment)return!this.matchRoot()&&this.notfound();this.iframe&&this.navigate(e),this.loadUrl()},loadUrl:function(t){return this.matchRoot()?(t=this.fragment=this.getFragment(t),n.some(this.handlers,(function(e){if(e.route.test(t))return e.callback(t),!0}))||this.notfound()):this.notfound()},notfound:function(){return this.trigger("notfound"),!1},navigate:function(t,e){if(!M.started)return!1;e&&!0!==e||(e={trigger:!!e}),t=this.getFragment(t||"");var n=this.root;this._trailingSlash||""!==t&&"?"!==t.charAt(0)||(n=n.slice(0,-1)||"/");var r=n+t;t=t.replace(z,"");var i=this.decodeFragment(t);if(this.fragment!==i){if(this.fragment=i,this._usePushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;e.replace||(s.document.open(),s.document.close()),this._updateHash(s.location,t,e.replace)}}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else t.hash="#"+e}}),e.history=new M;v.extend=y.extend=L.extend=E.extend=M.extend=function(t,e){var r,i=this;return r=t&&n.has(t,"constructor")?t.constructor:function(){return i.apply(this,arguments)},n.extend(r,i,e),r.prototype=n.create(i.prototype,t),r.prototype.constructor=r,r.__super__=i.prototype,r};var H=function(){throw new Error('A "url" property or function must be specified')},q=function(t,e){var n=e.error;e.error=function(r){n&&n.call(e.context,t,r,e),t.trigger("error",t,r,e)}};return e._debug=function(){return{root:t,_:n}},e}(s,n,t,e)}.apply(e,r),void 0===i||(t.exports=i)},78658:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,".button-vue[data-v-3fa8511b]{margin-top:.5rem}","",{version:3,sources:["webpack://./core/src/components/login/LoginButton.vue"],names:[],mappings:"AACA,6BACC,gBAAA",sourcesContent:["\n.button-vue {\n\tmargin-top: .5rem;\n}\n"],sourceRoot:""}]);const a=o},44578:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,".login-form[data-v-8c18127a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-8c18127a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-8c18127a]{text-align:center;overflow-wrap:anywhere}","",{version:3,sources:["webpack://./core/src/components/login/LoginForm.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA,CACA,sBAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t\toverflow-wrap: anywhere;\n\t}\n}\n"],sourceRoot:""}]);const a=o},96798:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,"fieldset[data-v-1b2e37de]{display:flex;flex-direction:column;gap:.5rem}fieldset[data-v-1b2e37de] label{text-align:initial}.update[data-v-1b2e37de]{margin:0 auto}","",{version:3,sources:["webpack://./core/src/components/login/PasswordLessLoginForm.vue"],names:[],mappings:"AACA,0BACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,gCACC,kBAAA,CAIF,yBACC,aAAA",sourcesContent:["\nfieldset {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.5rem;\n\n\t:deep(label) {\n\t\ttext-align: initial;\n\t}\n}\n\n.update {\n\tmargin: 0 auto;\n}\n"],sourceRoot:""}]);const a=o},42467:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,".login-form[data-v-2507998a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-2507998a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-2507998a]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}","",{version:3,sources:["webpack://./core/src/components/login/ResetPassword.vue"],names:[],mappings:"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA",sourcesContent:["\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n"],sourceRoot:""}]);const a=o},75056:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,"body{font-size:var(--default-font-size)}.login-box{width:320px;box-sizing:border-box}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}.login-passwordless .button-vue{margin-top:.5rem}","",{version:3,sources:["webpack://./core/src/views/Login.vue"],names:[],mappings:"AACA,KACC,kCAAA,CAGD,WAEC,WAAA,CACA,qBAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAIF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA,CAKD,gCACC,gBAAA",sourcesContent:["\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\t// Same size as dashboard panels\n\twidth: 320px;\n\tbox-sizing: border-box;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\n\n.fade-enter-active, .fade-leave-active {\n\ttransition: opacity .3s;\n}\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\topacity: 0;\n}\n\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n\n.login-passwordless {\n\t.button-vue {\n\t\tmargin-top: 0.5rem;\n\t}\n}\n"],sourceRoot:""}]);const a=o},60260:(t,e,n)=>{"use strict";n.d(e,{A:()=>a});var r=n(71354),i=n.n(r),s=n(76314),o=n.n(s)()(i());o.push([t.id,"\nfieldset[data-v-b9d4933a] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-b9d4933a] {\n\tmargin-top: 20px;\n}\n","",{version:3,sources:["webpack://./core/src/components/login/UpdatePassword.vue"],names:[],mappings:";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA",sourcesContent:["\x3c!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for=\"password\" class=\"infield\">{{ t('core', 'New password') }}</label>\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder=\"t('core', 'New password')\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"encrypted\" class=\"update\">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\n\t\t\t\t</p>\n\t\t\t\t<input id=\"encrypted-continue\"\n\t\t\t\t\tv-model=\"proceed\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t<label for=\"encrypted-continue\">\n\t\t\t\t\t{{ t('core', 'I know what I\\'m doing') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\n\n\t\t\t<p v-if=\"error && message\" :class=\"{warning: error}\">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from '@nextcloud/axios'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === 'success') {\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t\tthis.$emit('update:username', this.user)\n\t\t\t\t\tthis.$emit('done')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n<\/script>\n\n<style scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n"],sourceRoot:""}]);const a=o},78112:t=>{"undefined"==typeof dav&&(dav={}),dav._XML_CHAR_MAP={"<":"<",">":">","&":"&",'"':""","'":"'"},dav._escapeXml=function(t){return t.replace(/[<>&"']/g,(function(t){return dav._XML_CHAR_MAP[t]}))},dav.Client=function(t){var e;for(e in t)this[e]=t[e]},dav.Client.prototype={baseUrl:null,userName:null,password:null,xmlNamespaces:{"DAV:":"d"},propFind:function(t,e,n,r){void 0===n&&(n="0"),n=""+n,(r=r||{}).Depth=n,r["Content-Type"]="application/xml; charset=utf-8";var i,s='<?xml version="1.0"?>\n<d:propfind ';for(i in this.xmlNamespaces)s+=" xmlns:"+this.xmlNamespaces[i]+'="'+i+'"';for(var o in s+=">\n <d:prop>\n",e)if(e.hasOwnProperty(o)){var a=this.parseClarkNotation(e[o]);this.xmlNamespaces[a.namespace]?s+=" <"+this.xmlNamespaces[a.namespace]+":"+a.name+" />\n":s+=" <x:"+a.name+' xmlns:x="'+a.namespace+'" />\n'}return s+=" </d:prop>\n",s+="</d:propfind>",this.request("PROPFIND",t,r,s).then(function(t){return"0"===n?{status:t.status,body:t.body[0],xhr:t.xhr}:{status:t.status,body:t.body,xhr:t.xhr}}.bind(this))},_renderPropSet:function(t){var e=" <d:set>\n <d:prop>\n";for(var n in t)if(t.hasOwnProperty(n)){var r,i=this.parseClarkNotation(n),s=t[n];"d:resourcetype"!=(r=this.xmlNamespaces[i.namespace]?this.xmlNamespaces[i.namespace]+":"+i.name:"x:"+i.name+' xmlns:x="'+i.namespace+'"')&&(s=dav._escapeXml(s)),e+=" <"+r+">"+s+"</"+r+">\n"}return(e+=" </d:prop>\n")+" </d:set>\n"},propPatch:function(t,e,n){(n=n||{})["Content-Type"]="application/xml; charset=utf-8";var r,i='<?xml version="1.0"?>\n<d:propertyupdate ';for(r in this.xmlNamespaces)i+=" xmlns:"+this.xmlNamespaces[r]+'="'+r+'"';return i+=">\n"+this._renderPropSet(e),i+="</d:propertyupdate>",this.request("PROPPATCH",t,n,i).then(function(t){return{status:t.status,body:t.body,xhr:t.xhr}}.bind(this))},mkcol:function(t,e,n){var r="";if((n=n||{})["Content-Type"]="application/xml; charset=utf-8",e){var i;for(i in r='<?xml version="1.0"?>\n<d:mkcol',this.xmlNamespaces)r+=" xmlns:"+this.xmlNamespaces[i]+'="'+i+'"';r+=">\n"+this._renderPropSet(e),r+="</d:mkcol>"}return this.request("MKCOL",t,n,r).then(function(t){return{status:t.status,body:t.body,xhr:t.xhr}}.bind(this))},request:function(t,e,n,r,i,s){var o,a=this,l=this.xhrProvider();for(o in n=n||{},i=i||"",this.userName&&(n.Authorization="Basic "+btoa(this.userName+":"+this.password)),l.open(t,this.resolveUrl(e),!0),n)l.setRequestHeader(o,n[o]);return l.responseType=i,s&&"function"==typeof s.onProgress&&("PUT"===t||"POST"===t?l.upload.addEventListener("progress",(function(t){s.onProgress(t)}),!1):l.addEventListener("progress",(function(t){s.onProgress(t)}),!1)),void 0===r?l.send():l.send(r),new Promise((function(t,e){l.onreadystatechange=function(){if(4===l.readyState){var e=l.response;207===l.status&&(e=a.parseMultiStatus(l.response)),t({body:e,status:l.status,xhr:l})}},l.ontimeout=function(){e(new Error("Timeout exceeded"))}}))},xhrProvider:function(){return new XMLHttpRequest},_parsePropNode:function(t){var e=null;if(t.childNodes&&t.childNodes.length>0){for(var n=[],r=0;r<t.childNodes.length;r++){var i=t.childNodes[r];1===i.nodeType&&n.push(i)}n.length&&(e=n)}return e||t.textContent||t.text||""},parseMultiStatus:function(t){for(var e=(new DOMParser).parseFromString(t,"application/xml"),n=function(t){var e;for(e in this.xmlNamespaces)if(this.xmlNamespaces[e]===t)return e}.bind(this),r=e.evaluate("/d:multistatus/d:response",e,n,XPathResult.ANY_TYPE,null),i=[],s=r.iterateNext();s;){var o={href:null,propStat:[]};o.href=e.evaluate("string(d:href)",s,n,XPathResult.ANY_TYPE,null).stringValue;for(var a=e.evaluate("d:propstat",s,n,XPathResult.ANY_TYPE,null),l=a.iterateNext();l;){for(var u={status:e.evaluate("string(d:status)",l,n,XPathResult.ANY_TYPE,null).stringValue,properties:{}},c=e.evaluate("d:prop/*",l,n,XPathResult.ANY_TYPE,null),d=c.iterateNext();d;){var h=this._parsePropNode(d);u.properties["{"+d.namespaceURI+"}"+d.localName]=h,d=c.iterateNext()}o.propStat.push(u),l=a.iterateNext()}i.push(o),s=r.iterateNext()}return i},resolveUrl:function(t){if(/^https?:\/\//i.test(t))return t;var e=this.parseUrl(this.baseUrl);return t.charAt("/")?e.root+t:(e.root,-1!==e.path.lastIndexOf("/")&&e.path.subString(0,e.path.lastIndexOf("/")),t)},parseUrl:function(t){var e=t.match(/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/),n={url:e[0],scheme:e[1],host:e[3],port:e[4],path:e[5],query:e[6],fragment:e[7]};return n.root=n.scheme+"://"+n.host+(n.port?":"+n.port:""),n},parseClarkNotation:function(t){var e=t.match(/^{([^}]+)}(.*)$/);if(e)return{name:e[2],namespace:e[1]}}},void 0!==t.exports&&(t.exports.Client=dav.Client),t.exports={dav}},35358:(t,e,n)=>{var r={"./af":25177,"./af.js":25177,"./ar":61509,"./ar-dz":41488,"./ar-dz.js":41488,"./ar-kw":58676,"./ar-kw.js":58676,"./ar-ly":42353,"./ar-ly.js":42353,"./ar-ma":24496,"./ar-ma.js":24496,"./ar-ps":6947,"./ar-ps.js":6947,"./ar-sa":60301,"./ar-sa.js":60301,"./ar-tn":89756,"./ar-tn.js":89756,"./ar.js":61509,"./az":95533,"./az.js":95533,"./be":28959,"./be.js":28959,"./bg":47777,"./bg.js":47777,"./bm":54903,"./bm.js":54903,"./bn":61290,"./bn-bd":17357,"./bn-bd.js":17357,"./bn.js":61290,"./bo":31545,"./bo.js":31545,"./br":11470,"./br.js":11470,"./bs":44429,"./bs.js":44429,"./ca":7306,"./ca.js":7306,"./cs":56464,"./cs.js":56464,"./cv":73635,"./cv.js":73635,"./cy":64226,"./cy.js":64226,"./da":93601,"./da.js":93601,"./de":77853,"./de-at":26111,"./de-at.js":26111,"./de-ch":54697,"./de-ch.js":54697,"./de.js":77853,"./dv":60708,"./dv.js":60708,"./el":54691,"./el.js":54691,"./en-au":53872,"./en-au.js":53872,"./en-ca":28298,"./en-ca.js":28298,"./en-gb":56195,"./en-gb.js":56195,"./en-ie":66584,"./en-ie.js":66584,"./en-il":65543,"./en-il.js":65543,"./en-in":9033,"./en-in.js":9033,"./en-nz":79402,"./en-nz.js":79402,"./en-sg":43004,"./en-sg.js":43004,"./eo":32934,"./eo.js":32934,"./es":97650,"./es-do":20838,"./es-do.js":20838,"./es-mx":17730,"./es-mx.js":17730,"./es-us":56575,"./es-us.js":56575,"./es.js":97650,"./et":3035,"./et.js":3035,"./eu":3508,"./eu.js":3508,"./fa":119,"./fa.js":119,"./fi":90527,"./fi.js":90527,"./fil":95995,"./fil.js":95995,"./fo":52477,"./fo.js":52477,"./fr":85498,"./fr-ca":26435,"./fr-ca.js":26435,"./fr-ch":37892,"./fr-ch.js":37892,"./fr.js":85498,"./fy":37071,"./fy.js":37071,"./ga":41734,"./ga.js":41734,"./gd":70217,"./gd.js":70217,"./gl":77329,"./gl.js":77329,"./gom-deva":32124,"./gom-deva.js":32124,"./gom-latn":93383,"./gom-latn.js":93383,"./gu":95050,"./gu.js":95050,"./he":11713,"./he.js":11713,"./hi":43861,"./hi.js":43861,"./hr":26308,"./hr.js":26308,"./hu":90609,"./hu.js":90609,"./hy-am":17160,"./hy-am.js":17160,"./id":74063,"./id.js":74063,"./is":89374,"./is.js":89374,"./it":88383,"./it-ch":21827,"./it-ch.js":21827,"./it.js":88383,"./ja":23827,"./ja.js":23827,"./jv":89722,"./jv.js":89722,"./ka":41794,"./ka.js":41794,"./kk":27088,"./kk.js":27088,"./km":96870,"./km.js":96870,"./kn":84451,"./kn.js":84451,"./ko":63164,"./ko.js":63164,"./ku":98174,"./ku-kmr":6181,"./ku-kmr.js":6181,"./ku.js":98174,"./ky":78474,"./ky.js":78474,"./lb":79680,"./lb.js":79680,"./lo":15867,"./lo.js":15867,"./lt":45766,"./lt.js":45766,"./lv":69532,"./lv.js":69532,"./me":58076,"./me.js":58076,"./mi":41848,"./mi.js":41848,"./mk":30306,"./mk.js":30306,"./ml":73739,"./ml.js":73739,"./mn":99053,"./mn.js":99053,"./mr":86169,"./mr.js":86169,"./ms":73386,"./ms-my":92297,"./ms-my.js":92297,"./ms.js":73386,"./mt":77075,"./mt.js":77075,"./my":72264,"./my.js":72264,"./nb":22274,"./nb.js":22274,"./ne":8235,"./ne.js":8235,"./nl":92572,"./nl-be":43784,"./nl-be.js":43784,"./nl.js":92572,"./nn":54566,"./nn.js":54566,"./oc-lnc":69330,"./oc-lnc.js":69330,"./pa-in":29849,"./pa-in.js":29849,"./pl":94418,"./pl.js":94418,"./pt":79834,"./pt-br":48303,"./pt-br.js":48303,"./pt.js":79834,"./ro":24457,"./ro.js":24457,"./ru":82271,"./ru.js":82271,"./sd":1221,"./sd.js":1221,"./se":33478,"./se.js":33478,"./si":17538,"./si.js":17538,"./sk":5784,"./sk.js":5784,"./sl":46637,"./sl.js":46637,"./sq":86794,"./sq.js":86794,"./sr":45719,"./sr-cyrl":3322,"./sr-cyrl.js":3322,"./sr.js":45719,"./ss":56e3,"./ss.js":56e3,"./sv":41011,"./sv.js":41011,"./sw":40748,"./sw.js":40748,"./ta":11025,"./ta.js":11025,"./te":11885,"./te.js":11885,"./tet":28861,"./tet.js":28861,"./tg":86571,"./tg.js":86571,"./th":55802,"./th.js":55802,"./tk":59527,"./tk.js":59527,"./tl-ph":29231,"./tl-ph.js":29231,"./tlh":31052,"./tlh.js":31052,"./tr":85096,"./tr.js":85096,"./tzl":79846,"./tzl.js":79846,"./tzm":81765,"./tzm-latn":97711,"./tzm-latn.js":97711,"./tzm.js":81765,"./ug-cn":48414,"./ug-cn.js":48414,"./uk":16618,"./uk.js":16618,"./ur":57777,"./ur.js":57777,"./uz":57609,"./uz-latn":72475,"./uz-latn.js":72475,"./uz.js":57609,"./vi":21135,"./vi.js":21135,"./x-pseudo":64051,"./x-pseudo.js":64051,"./yo":82218,"./yo.js":82218,"./zh-cn":52648,"./zh-cn.js":52648,"./zh-hk":1632,"./zh-hk.js":1632,"./zh-mo":31541,"./zh-mo.js":31541,"./zh-tw":50304,"./zh-tw.js":50304};function i(t){var e=s(t);return n(e)}function s(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}i.keys=function(){return Object.keys(r)},i.resolve=s,t.exports=i,i.id=35358},35810:(t,e,n)=>{"use strict";n.d(e,{Al:()=>O,H4:()=>S,PY:()=>j,Q$:()=>T,R3:()=>w,VL:()=>b,lJ:()=>P,pt:()=>A,v7:()=>f});var r,i=n(92457),s=n(53529),o=n(53334),a=n(43627),l=n(71089),u=n(99498),c=n(44719);null===(r=(0,i.HW)())?(0,s.YK)().setApp("files").build():(0,s.YK)().setApp("files").setUid(r.uid).build();const d=["B","KB","MB","GB","TB","PB"],h=["B","KiB","MiB","GiB","TiB","PiB"];function f(t,e=!1,n=!1,r=!1){n=n&&!r,"string"==typeof t&&(t=Number(t));let i=t>0?Math.floor(Math.log(t)/Math.log(r?1e3:1024)):0;i=Math.min((n?h.length:d.length)-1,i);const s=n?h[i]:d[i];let a=(t/Math.pow(r?1e3:1024,i)).toFixed(1);return!0===e&&0===i?("0.0"!==a?"< 1 ":"0 ")+(n?h[1]:d[1]):(a=i<2?parseFloat(a).toFixed(0):parseFloat(a).toLocaleString((0,o.lO)()),a+" "+s)}var p=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(p||{});const m=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","nc:share-attributes","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:share-types","oc:size","ocs:share-permissions"],g={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},v=function(){return typeof window._nc_dav_properties>"u"&&(window._nc_dav_properties=[...m]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},y=function(){return typeof window._nc_dav_namespaces>"u"&&(window._nc_dav_namespaces={...g}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},b=function(){return`<?xml version="1.0"?>\n\t\t<d:propfind ${y()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`},w=function(t){return`<?xml version="1.0" encoding="UTF-8"?>\n<d:searchrequest ${y()}\n\txmlns:ns="https://github.com/icewind1991/SearchDAV/ns">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${(0,i.HW)()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${t}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`};var A=(t=>(t.Folder="folder",t.File="file",t))(A||{});const _=function(t,e){return null!==t.match(e)},x=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch{throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=p.NONE&&t.permissions<=p.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&_(t.source,e)){const n=t.source.match(e)[0];if(!t.source.includes((0,a.join)(n,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(C).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var C=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(C||{});class N{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;constructor(t,e){x(t,e||this._knownDavService),this._data=t;const n={set:(t,e,n)=>(this.updateMtime(),Reflect.set(t,e,n)),deleteProperty:(t,e)=>(this.updateMtime(),Reflect.deleteProperty(t,e))};this._attributes=new Proxy(t.attributes||{},n),delete this._data.attributes,e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,l.O0)(this.source.slice(t.length))}get basename(){return(0,a.basename)(this.source)}get extension(){return(0,a.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),n=this.root.replace(/\/$/,"");return(0,a.dirname)(t.slice(e+n.length)||"/")}const t=new URL(this.source);return(0,a.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}get crtime(){return this._data.crtime}get size(){return this._data.size}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:p.NONE:p.READ}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return _(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,a.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),n=this.root.replace(/\/$/,"");return t.slice(e+n.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id||this.attributes?.fileid}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){x({...this._data,source:t},this._knownDavService),this._data.source=t,this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,a.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}}class k extends N{get type(){return A.File}}class E extends N{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return A.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const P=`/files/${(0,i.HW)()?.uid}`,j=(0,u.dC)("dav"),S=function(t=j,e={}){const n=(0,c.UU)(t,{headers:e});function r(t){n.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,i.zo)(r),r((0,i.do)()),(0,c.Gu)().patch("fetch",((t,e)=>{const n=e.headers;return n?.method&&(e.method=n.method,delete n.method),fetch(t,e)})),n},T=async(t,e="/",n=P)=>(await t.getDirectoryContents(`${n}${e}`,{details:!0,data:`<?xml version="1.0"?>\n\t\t<oc:filter-files ${y()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>O(t,n))),O=function(t,e=P,n=j){const r=t.props,s=function(t=""){let e=p.NONE;return t&&((t.includes("C")||t.includes("K"))&&(e|=p.CREATE),t.includes("G")&&(e|=p.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=p.UPDATE),t.includes("D")&&(e|=p.DELETE),t.includes("R")&&(e|=p.SHARE)),e}(r?.permissions),o=r?.["owner-id"]||(0,i.HW)()?.uid,a={id:r?.fileid||0,source:`${n}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime,size:r?.size||Number.parseInt(r.getcontentlength||"0"),permissions:s,owner:o,root:e,attributes:{...t,...r,hasPreview:r?.["has-preview"]}};return delete a.attributes?.props,"file"===t.type?new k(a):new E(a)};var I={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",n="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",r=new RegExp("^"+n+"$");t.isExist=function(t){return typeof t<"u"},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,n){if(e){const r=Object.keys(e),i=r.length;for(let s=0;s<i;s++)t[r[s]]="strict"===n?[e[r[s]]]:e[r[s]]}},t.getValue=function(e){return t.isExist(e)?e:""},t.isName=function(t){const e=r.exec(t);return!(null===e||typeof e>"u")},t.getAllMatches=function(t,e){const n=[];let r=e.exec(t);for(;r;){const i=[];i.startIndex=e.lastIndex-r[0].length;const s=r.length;for(let t=0;t<s;t++)i.push(r[t]);n.push(i),r=e.exec(t)}return n},t.nameRegexp=n}(I);new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");var L={};const R={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,n){return t}};L.buildOptions=function(t){return Object.assign({},R,t)},L.defaultOptions=R,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,I.nameRegexp),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var F={};function B(t,e,n){let r;const i={};for(let s=0;s<t.length;s++){const o=t[s],a=U(o);let l="";if(l=void 0===n?a:n+"."+a,a===e.textNodeName)void 0===r?r=o[a]:r+=""+o[a];else{if(void 0===a)continue;if(o[a]){let t=B(o[a],e,l);const n=D(t,e);o[":@"]?M(t,o[":@"],l,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==i[a]&&i.hasOwnProperty(a)?(Array.isArray(i[a])||(i[a]=[i[a]]),i[a].push(t)):e.isArray(a,l,n)?i[a]=[t]:i[a]=t}}}return"string"==typeof r?r.length>0&&(i[e.textNodeName]=r):void 0!==r&&(i[e.textNodeName]=r),i}function U(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const n=e[t];if(":@"!==n)return n}}function M(t,e,n,r){if(e){const i=Object.keys(e),s=i.length;for(let o=0;o<s;o++){const s=i[o];r.isArray(s,n+"."+s,!0,!0)?t[s]=[e[s]]:t[s]=e[s]}}}function D(t,e){const{textNodeName:n}=e,r=Object.keys(t).length;return!(0!==r&&(1!==r||!t[n]&&"boolean"!=typeof t[n]&&0!==t[n]))}F.prettify=function(t,e){return B(t,e)};const{buildOptions:$}=L,{prettify:z}=F;function H(t,e,n,r){let i="",s=!1;for(let o=0;o<t.length;o++){const a=t[o],l=q(a);if(void 0===l)continue;let u="";if(u=0===n.length?l:`${n}.${l}`,l===e.textNodeName){let t=a[l];K(u,e)||(t=e.tagValueProcessor(l,t),t=Y(t,e)),s&&(i+=r),i+=t,s=!1;continue}if(l===e.cdataPropName){s&&(i+=r),i+=`<![CDATA[${a[l][0][e.textNodeName]}]]>`,s=!1;continue}if(l===e.commentPropName){i+=r+`\x3c!--${a[l][0][e.textNodeName]}--\x3e`,s=!0;continue}if("?"===l[0]){const t=V(a[":@"],e),n="?xml"===l?"":r;let o=a[l][0][e.textNodeName];o=0!==o.length?" "+o:"",i+=n+`<${l}${o}${t}?>`,s=!0;continue}let c=r;""!==c&&(c+=e.indentBy);const d=r+`<${l}${V(a[":@"],e)}`,h=H(a[l],e,u,c);-1!==e.unpairedTags.indexOf(l)?e.suppressUnpairedNode?i+=d+">":i+=d+"/>":h&&0!==h.length||!e.suppressEmptyNode?h&&h.endsWith(">")?i+=d+`>${h}${r}</${l}>`:(i+=d+">",h&&""!==r&&(h.includes("/>")||h.includes("</"))?i+=r+e.indentBy+h+r:i+=h,i+=`</${l}>`):i+=d+"/>",s=!0}return i}function q(t){const e=Object.keys(t);for(let n=0;n<e.length;n++){const r=e[n];if(t.hasOwnProperty(r)&&":@"!==r)return r}}function V(t,e){let n="";if(t&&!e.ignoreAttributes)for(let r in t){if(!t.hasOwnProperty(r))continue;let i=e.attributeValueProcessor(r,t[r]);i=Y(i,e),!0===i&&e.suppressBooleanAttributes?n+=` ${r.substr(e.attributeNamePrefix.length)}`:n+=` ${r.substr(e.attributeNamePrefix.length)}="${i}"`}return n}function K(t,e){let n=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let r in e.stopNodes)if(e.stopNodes[r]===t||e.stopNodes[r]==="*."+n)return!0;return!1}function Y(t,e){if(t&&t.length>0&&e.processEntities)for(let n=0;n<e.entities.length;n++){const r=e.entities[n];t=t.replace(r.regex,r.val)}return t}const W=function(t,e){let n="";return e.format&&e.indentBy.length>0&&(n="\n"),H(t,e,"",n)},G={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function J(t){this.options=Object.assign({},G,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=Z),this.processTextOrObjNode=X,this.options.format?(this.indentate=Q,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function X(t,e,n){const r=this.j2x(t,n+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,r.attrStr,n):this.buildObjectNode(r.val,e,r.attrStr,n)}function Q(t){return this.options.indentBy.repeat(t)}function Z(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}J.prototype.build=function(t){return this.options.preserveOrder?W(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},J.prototype.j2x=function(t,e){let n="",r="";for(let i in t)if(Object.prototype.hasOwnProperty.call(t,i))if(typeof t[i]>"u")this.isAttribute(i)&&(r+="");else if(null===t[i])this.isAttribute(i)?r+="":"?"===i[0]?r+=this.indentate(e)+"<"+i+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+i+"/"+this.tagEndChar;else if(t[i]instanceof Date)r+=this.buildTextValNode(t[i],i,"",e);else if("object"!=typeof t[i]){const s=this.isAttribute(i);if(s)n+=this.buildAttrPairStr(s,""+t[i]);else if(i===this.options.textNodeName){let e=this.options.tagValueProcessor(i,""+t[i]);r+=this.replaceEntitiesValue(e)}else r+=this.buildTextValNode(t[i],i,"",e)}else if(Array.isArray(t[i])){const n=t[i].length;let s="";for(let o=0;o<n;o++){const n=t[i][o];typeof n>"u"||(null===n?"?"===i[0]?r+=this.indentate(e)+"<"+i+"?"+this.tagEndChar:r+=this.indentate(e)+"<"+i+"/"+this.tagEndChar:"object"==typeof n?this.options.oneListGroup?s+=this.j2x(n,e+1).val:s+=this.processTextOrObjNode(n,i,e):s+=this.buildTextValNode(n,i,"",e))}this.options.oneListGroup&&(s=this.buildObjectNode(s,i,"",e)),r+=s}else if(this.options.attributesGroupName&&i===this.options.attributesGroupName){const e=Object.keys(t[i]),r=e.length;for(let s=0;s<r;s++)n+=this.buildAttrPairStr(e[s],""+t[i][e[s]])}else r+=this.processTextOrObjNode(t[i],i,e);return{attrStr:n,val:r}},J.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},J.prototype.buildObjectNode=function(t,e,n,r){if(""===t)return"?"===e[0]?this.indentate(r)+"<"+e+n+"?"+this.tagEndChar:this.indentate(r)+"<"+e+n+this.closeTag(e)+this.tagEndChar;{let i="</"+e+this.tagEndChar,s="";return"?"===e[0]&&(s="?",i=""),!n&&""!==n||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===s.length?this.indentate(r)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(r)+"<"+e+n+s+this.tagEndChar+t+this.indentate(r)+i:this.indentate(r)+"<"+e+n+s+">"+t+i}},J.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},J.prototype.buildTextValNode=function(t,e,n,r){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(r)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(r)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(r)+"<"+e+n+"?"+this.tagEndChar;{let i=this.options.tagValueProcessor(e,t);return i=this.replaceEntitiesValue(i),""===i?this.indentate(r)+"<"+e+n+this.closeTag(e)+this.tagEndChar:this.indentate(r)+"<"+e+n+">"+i+"</"+e+this.tagEndChar}},J.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const n=this.options.entities[e];t=t.replace(n.regex,n.val)}return t}},4523:(t,e,n)=>{"use strict";n.r(e),n.d(e,{VERSION:()=>i,after:()=>Le,all:()=>tn,allKeys:()=>gt,any:()=>en,assign:()=>Lt,before:()=>Re,bind:()=>_e,bindAll:()=>Ne,chain:()=>ye,chunk:()=>Un,clone:()=>Ut,collect:()=>We,compact:()=>En,compose:()=>Ie,constant:()=>Q,contains:()=>nn,countBy:()=>vn,create:()=>Bt,debounce:()=>Se,default:()=>Hn,defaults:()=>Rt,defer:()=>Pe,delay:()=>Ee,detect:()=>Ve,difference:()=>jn,drop:()=>Nn,each:()=>Ye,escape:()=>oe,every:()=>tn,extend:()=>It,extendOwn:()=>Lt,filter:()=>Qe,find:()=>Ve,findIndex:()=>Me,findKey:()=>Be,findLastIndex:()=>De,findWhere:()=>Ke,first:()=>Cn,flatten:()=>Pn,foldl:()=>Je,foldr:()=>Xe,forEach:()=>Ye,functions:()=>Tt,get:()=>Ht,groupBy:()=>mn,has:()=>qt,head:()=>Cn,identity:()=>Vt,include:()=>nn,includes:()=>nn,indexBy:()=>gn,indexOf:()=>He,initial:()=>xn,inject:()=>Je,intersection:()=>In,invert:()=>St,invoke:()=>rn,isArguments:()=>G,isArray:()=>K,isArrayBuffer:()=>B,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>lt,isEqual:()=>mt,isError:()=>R,isFinite:()=>J,isFunction:()=>D,isMap:()=>Ct,isMatch:()=>ut,isNaN:()=>X,isNull:()=>k,isNumber:()=>O,isObject:()=>N,isRegExp:()=>L,isSet:()=>kt,isString:()=>T,isSymbol:()=>F,isTypedArray:()=>it,isUndefined:()=>E,isWeakMap:()=>Nt,isWeakSet:()=>Et,iteratee:()=>Jt,keys:()=>at,last:()=>kn,lastIndexOf:()=>qe,map:()=>We,mapObject:()=>Qt,matcher:()=>Kt,matches:()=>Kt,max:()=>an,memoize:()=>ke,methods:()=>Tt,min:()=>ln,mixin:()=>Dn,negate:()=>Oe,noop:()=>Zt,now:()=>re,object:()=>Fn,omit:()=>_n,once:()=>Fe,pairs:()=>jt,partial:()=>Ae,partition:()=>yn,pick:()=>An,pluck:()=>sn,property:()=>Yt,propertyOf:()=>te,random:()=>ne,range:()=>Bn,reduce:()=>Je,reduceRight:()=>Xe,reject:()=>Ze,rest:()=>Nn,restArguments:()=>C,result:()=>me,sample:()=>dn,select:()=>Qe,shuffle:()=>hn,size:()=>bn,some:()=>en,sortBy:()=>fn,sortedIndex:()=>$e,tail:()=>Nn,take:()=>Cn,tap:()=>Mt,template:()=>pe,templateSettings:()=>le,throttle:()=>je,times:()=>ee,toArray:()=>cn,toPath:()=>Dt,transpose:()=>Ln,unescape:()=>ae,union:()=>On,uniq:()=>Tn,unique:()=>Tn,uniqueId:()=>ve,unzip:()=>Ln,values:()=>Pt,where:()=>on,without:()=>Sn,wrap:()=>Te,zip:()=>Rn});var r={};n.r(r),n.d(r,{VERSION:()=>i,after:()=>Le,all:()=>tn,allKeys:()=>gt,any:()=>en,assign:()=>Lt,before:()=>Re,bind:()=>_e,bindAll:()=>Ne,chain:()=>ye,chunk:()=>Un,clone:()=>Ut,collect:()=>We,compact:()=>En,compose:()=>Ie,constant:()=>Q,contains:()=>nn,countBy:()=>vn,create:()=>Bt,debounce:()=>Se,default:()=>$n,defaults:()=>Rt,defer:()=>Pe,delay:()=>Ee,detect:()=>Ve,difference:()=>jn,drop:()=>Nn,each:()=>Ye,escape:()=>oe,every:()=>tn,extend:()=>It,extendOwn:()=>Lt,filter:()=>Qe,find:()=>Ve,findIndex:()=>Me,findKey:()=>Be,findLastIndex:()=>De,findWhere:()=>Ke,first:()=>Cn,flatten:()=>Pn,foldl:()=>Je,foldr:()=>Xe,forEach:()=>Ye,functions:()=>Tt,get:()=>Ht,groupBy:()=>mn,has:()=>qt,head:()=>Cn,identity:()=>Vt,include:()=>nn,includes:()=>nn,indexBy:()=>gn,indexOf:()=>He,initial:()=>xn,inject:()=>Je,intersection:()=>In,invert:()=>St,invoke:()=>rn,isArguments:()=>G,isArray:()=>K,isArrayBuffer:()=>B,isBoolean:()=>P,isDataView:()=>V,isDate:()=>I,isElement:()=>j,isEmpty:()=>lt,isEqual:()=>mt,isError:()=>R,isFinite:()=>J,isFunction:()=>D,isMap:()=>Ct,isMatch:()=>ut,isNaN:()=>X,isNull:()=>k,isNumber:()=>O,isObject:()=>N,isRegExp:()=>L,isSet:()=>kt,isString:()=>T,isSymbol:()=>F,isTypedArray:()=>it,isUndefined:()=>E,isWeakMap:()=>Nt,isWeakSet:()=>Et,iteratee:()=>Jt,keys:()=>at,last:()=>kn,lastIndexOf:()=>qe,map:()=>We,mapObject:()=>Qt,matcher:()=>Kt,matches:()=>Kt,max:()=>an,memoize:()=>ke,methods:()=>Tt,min:()=>ln,mixin:()=>Dn,negate:()=>Oe,noop:()=>Zt,now:()=>re,object:()=>Fn,omit:()=>_n,once:()=>Fe,pairs:()=>jt,partial:()=>Ae,partition:()=>yn,pick:()=>An,pluck:()=>sn,property:()=>Yt,propertyOf:()=>te,random:()=>ne,range:()=>Bn,reduce:()=>Je,reduceRight:()=>Xe,reject:()=>Ze,rest:()=>Nn,restArguments:()=>C,result:()=>me,sample:()=>dn,select:()=>Qe,shuffle:()=>hn,size:()=>bn,some:()=>en,sortBy:()=>fn,sortedIndex:()=>$e,tail:()=>Nn,take:()=>Cn,tap:()=>Mt,template:()=>pe,templateSettings:()=>le,throttle:()=>je,times:()=>ee,toArray:()=>cn,toPath:()=>Dt,transpose:()=>Ln,unescape:()=>ae,union:()=>On,uniq:()=>Tn,unique:()=>Tn,uniqueId:()=>ve,unzip:()=>Ln,values:()=>Pt,where:()=>on,without:()=>Sn,wrap:()=>Te,zip:()=>Rn});var i="1.13.6",s="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},o=Array.prototype,a=Object.prototype,l="undefined"!=typeof Symbol?Symbol.prototype:null,u=o.push,c=o.slice,d=a.toString,h=a.hasOwnProperty,f="undefined"!=typeof ArrayBuffer,p="undefined"!=typeof DataView,m=Array.isArray,g=Object.keys,v=Object.create,y=f&&ArrayBuffer.isView,b=isNaN,w=isFinite,A=!{toString:null}.propertyIsEnumerable("toString"),_=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],x=Math.pow(2,53)-1;function C(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),r=Array(n),i=0;i<n;i++)r[i]=arguments[i+e];switch(e){case 0:return t.call(this,r);case 1:return t.call(this,arguments[0],r);case 2:return t.call(this,arguments[0],arguments[1],r)}var s=Array(e+1);for(i=0;i<e;i++)s[i]=arguments[i];return s[e]=r,t.apply(this,s)}}function N(t){var e=typeof t;return"function"===e||"object"===e&&!!t}function k(t){return null===t}function E(t){return void 0===t}function P(t){return!0===t||!1===t||"[object Boolean]"===d.call(t)}function j(t){return!(!t||1!==t.nodeType)}function S(t){var e="[object "+t+"]";return function(t){return d.call(t)===e}}const T=S("String"),O=S("Number"),I=S("Date"),L=S("RegExp"),R=S("Error"),F=S("Symbol"),B=S("ArrayBuffer");var U=S("Function"),M=s.document&&s.document.childNodes;"object"!=typeof Int8Array&&"function"!=typeof M&&(U=function(t){return"function"==typeof t||!1});const D=U,$=S("Object");var z=p&&$(new DataView(new ArrayBuffer(8))),H="undefined"!=typeof Map&&$(new Map),q=S("DataView");const V=z?function(t){return null!=t&&D(t.getInt8)&&B(t.buffer)}:q,K=m||S("Array");function Y(t,e){return null!=t&&h.call(t,e)}var W=S("Arguments");!function(){W(arguments)||(W=function(t){return Y(t,"callee")})}();const G=W;function J(t){return!F(t)&&w(t)&&!isNaN(parseFloat(t))}function X(t){return O(t)&&b(t)}function Q(t){return function(){return t}}function Z(t){return function(e){var n=t(e);return"number"==typeof n&&n>=0&&n<=x}}function tt(t){return function(e){return null==e?void 0:e[t]}}const et=tt("byteLength"),nt=Z(et);var rt=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;const it=f?function(t){return y?y(t)&&!V(t):nt(t)&&rt.test(d.call(t))}:Q(!1),st=tt("length");function ot(t,e){e=function(t){for(var e={},n=t.length,r=0;r<n;++r)e[t[r]]=!0;return{contains:function(t){return!0===e[t]},push:function(n){return e[n]=!0,t.push(n)}}}(e);var n=_.length,r=t.constructor,i=D(r)&&r.prototype||a,s="constructor";for(Y(t,s)&&!e.contains(s)&&e.push(s);n--;)(s=_[n])in t&&t[s]!==i[s]&&!e.contains(s)&&e.push(s)}function at(t){if(!N(t))return[];if(g)return g(t);var e=[];for(var n in t)Y(t,n)&&e.push(n);return A&&ot(t,e),e}function lt(t){if(null==t)return!0;var e=st(t);return"number"==typeof e&&(K(t)||T(t)||G(t))?0===e:0===st(at(t))}function ut(t,e){var n=at(e),r=n.length;if(null==t)return!r;for(var i=Object(t),s=0;s<r;s++){var o=n[s];if(e[o]!==i[o]||!(o in i))return!1}return!0}function ct(t){return t instanceof ct?t:this instanceof ct?void(this._wrapped=t):new ct(t)}function dt(t){return new Uint8Array(t.buffer||t,t.byteOffset||0,et(t))}ct.VERSION=i,ct.prototype.value=function(){return this._wrapped},ct.prototype.valueOf=ct.prototype.toJSON=ct.prototype.value,ct.prototype.toString=function(){return String(this._wrapped)};var ht="[object DataView]";function ft(t,e,n,r){if(t===e)return 0!==t||1/t==1/e;if(null==t||null==e)return!1;if(t!=t)return e!=e;var i=typeof t;return("function"===i||"object"===i||"object"==typeof e)&&pt(t,e,n,r)}function pt(t,e,n,r){t instanceof ct&&(t=t._wrapped),e instanceof ct&&(e=e._wrapped);var i=d.call(t);if(i!==d.call(e))return!1;if(z&&"[object Object]"==i&&V(t)){if(!V(e))return!1;i=ht}switch(i){case"[object RegExp]":case"[object String]":return""+t==""+e;case"[object Number]":return+t!=+t?+e!=+e:0==+t?1/+t==1/e:+t==+e;case"[object Date]":case"[object Boolean]":return+t==+e;case"[object Symbol]":return l.valueOf.call(t)===l.valueOf.call(e);case"[object ArrayBuffer]":case ht:return pt(dt(t),dt(e),n,r)}var s="[object Array]"===i;if(!s&&it(t)){if(et(t)!==et(e))return!1;if(t.buffer===e.buffer&&t.byteOffset===e.byteOffset)return!0;s=!0}if(!s){if("object"!=typeof t||"object"!=typeof e)return!1;var o=t.constructor,a=e.constructor;if(o!==a&&!(D(o)&&o instanceof o&&D(a)&&a instanceof a)&&"constructor"in t&&"constructor"in e)return!1}r=r||[];for(var u=(n=n||[]).length;u--;)if(n[u]===t)return r[u]===e;if(n.push(t),r.push(e),s){if((u=t.length)!==e.length)return!1;for(;u--;)if(!ft(t[u],e[u],n,r))return!1}else{var c,h=at(t);if(u=h.length,at(e).length!==u)return!1;for(;u--;)if(!Y(e,c=h[u])||!ft(t[c],e[c],n,r))return!1}return n.pop(),r.pop(),!0}function mt(t,e){return ft(t,e)}function gt(t){if(!N(t))return[];var e=[];for(var n in t)e.push(n);return A&&ot(t,e),e}function vt(t){var e=st(t);return function(n){if(null==n)return!1;var r=gt(n);if(st(r))return!1;for(var i=0;i<e;i++)if(!D(n[t[i]]))return!1;return t!==_t||!D(n[yt])}}var yt="forEach",bt=["clear","delete"],wt=["get","has","set"],At=bt.concat(yt,wt),_t=bt.concat(wt),xt=["add"].concat(bt,yt,"has");const Ct=H?vt(At):S("Map"),Nt=H?vt(_t):S("WeakMap"),kt=H?vt(xt):S("Set"),Et=S("WeakSet");function Pt(t){for(var e=at(t),n=e.length,r=Array(n),i=0;i<n;i++)r[i]=t[e[i]];return r}function jt(t){for(var e=at(t),n=e.length,r=Array(n),i=0;i<n;i++)r[i]=[e[i],t[e[i]]];return r}function St(t){for(var e={},n=at(t),r=0,i=n.length;r<i;r++)e[t[n[r]]]=n[r];return e}function Tt(t){var e=[];for(var n in t)D(t[n])&&e.push(n);return e.sort()}function Ot(t,e){return function(n){var r=arguments.length;if(e&&(n=Object(n)),r<2||null==n)return n;for(var i=1;i<r;i++)for(var s=arguments[i],o=t(s),a=o.length,l=0;l<a;l++){var u=o[l];e&&void 0!==n[u]||(n[u]=s[u])}return n}}const It=Ot(gt),Lt=Ot(at),Rt=Ot(gt,!0);function Ft(t){if(!N(t))return{};if(v)return v(t);var e=function(){};e.prototype=t;var n=new e;return e.prototype=null,n}function Bt(t,e){var n=Ft(t);return e&&Lt(n,e),n}function Ut(t){return N(t)?K(t)?t.slice():It({},t):t}function Mt(t,e){return e(t),t}function Dt(t){return K(t)?t:[t]}function $t(t){return ct.toPath(t)}function zt(t,e){for(var n=e.length,r=0;r<n;r++){if(null==t)return;t=t[e[r]]}return n?t:void 0}function Ht(t,e,n){var r=zt(t,$t(e));return E(r)?n:r}function qt(t,e){for(var n=(e=$t(e)).length,r=0;r<n;r++){var i=e[r];if(!Y(t,i))return!1;t=t[i]}return!!n}function Vt(t){return t}function Kt(t){return t=Lt({},t),function(e){return ut(e,t)}}function Yt(t){return t=$t(t),function(e){return zt(e,t)}}function Wt(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,s){return t.call(e,n,r,i,s)}}return function(){return t.apply(e,arguments)}}function Gt(t,e,n){return null==t?Vt:D(t)?Wt(t,e,n):N(t)&&!K(t)?Kt(t):Yt(t)}function Jt(t,e){return Gt(t,e,1/0)}function Xt(t,e,n){return ct.iteratee!==Jt?ct.iteratee(t,e):Gt(t,e,n)}function Qt(t,e,n){e=Xt(e,n);for(var r=at(t),i=r.length,s={},o=0;o<i;o++){var a=r[o];s[a]=e(t[a],a,t)}return s}function Zt(){}function te(t){return null==t?Zt:function(e){return Ht(t,e)}}function ee(t,e,n){var r=Array(Math.max(0,t));e=Wt(e,n,1);for(var i=0;i<t;i++)r[i]=e(i);return r}function ne(t,e){return null==e&&(e=t,t=0),t+Math.floor(Math.random()*(e-t+1))}ct.toPath=Dt,ct.iteratee=Jt;const re=Date.now||function(){return(new Date).getTime()};function ie(t){var e=function(e){return t[e]},n="(?:"+at(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(t){return t=null==t?"":""+t,r.test(t)?t.replace(i,e):t}}const se={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},oe=ie(se),ae=ie(St(se)),le=ct.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var ue=/(.)^/,ce={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},de=/\\|'|\r|\n|\u2028|\u2029/g;function he(t){return"\\"+ce[t]}var fe=/^\s*(\w|\$)+\s*$/;function pe(t,e,n){!e&&n&&(e=n),e=Rt({},e,ct.templateSettings);var r=RegExp([(e.escape||ue).source,(e.interpolate||ue).source,(e.evaluate||ue).source].join("|")+"|$","g"),i=0,s="__p+='";t.replace(r,(function(e,n,r,o,a){return s+=t.slice(i,a).replace(de,he),i=a+e.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?s+="'+\n((__t=("+r+"))==null?'':__t)+\n'":o&&(s+="';\n"+o+"\n__p+='"),e})),s+="';\n";var o,a=e.variable;if(a){if(!fe.test(a))throw new Error("variable is not a bare identifier: "+a)}else s="with(obj||{}){\n"+s+"}\n",a="obj";s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{o=new Function(a,"_",s)}catch(t){throw t.source=s,t}var l=function(t){return o.call(this,t,ct)};return l.source="function("+a+"){\n"+s+"}",l}function me(t,e,n){var r=(e=$t(e)).length;if(!r)return D(n)?n.call(t):n;for(var i=0;i<r;i++){var s=null==t?void 0:t[e[i]];void 0===s&&(s=n,i=r),t=D(s)?s.call(t):s}return t}var ge=0;function ve(t){var e=++ge+"";return t?t+e:e}function ye(t){var e=ct(t);return e._chain=!0,e}function be(t,e,n,r,i){if(!(r instanceof e))return t.apply(n,i);var s=Ft(t.prototype),o=t.apply(s,i);return N(o)?o:s}var we=C((function(t,e){var n=we.placeholder,r=function(){for(var i=0,s=e.length,o=Array(s),a=0;a<s;a++)o[a]=e[a]===n?arguments[i++]:e[a];for(;i<arguments.length;)o.push(arguments[i++]);return be(t,r,this,this,o)};return r}));we.placeholder=ct;const Ae=we,_e=C((function(t,e,n){if(!D(t))throw new TypeError("Bind must be called on a function");var r=C((function(i){return be(t,r,e,this,n.concat(i))}));return r})),xe=Z(st);function Ce(t,e,n,r){if(r=r||[],e||0===e){if(e<=0)return r.concat(t)}else e=1/0;for(var i=r.length,s=0,o=st(t);s<o;s++){var a=t[s];if(xe(a)&&(K(a)||G(a)))if(e>1)Ce(a,e-1,n,r),i=r.length;else for(var l=0,u=a.length;l<u;)r[i++]=a[l++];else n||(r[i++]=a)}return r}const Ne=C((function(t,e){var n=(e=Ce(e,!1,!1)).length;if(n<1)throw new Error("bindAll must be passed function names");for(;n--;){var r=e[n];t[r]=_e(t[r],t)}return t}));function ke(t,e){var n=function(r){var i=n.cache,s=""+(e?e.apply(this,arguments):r);return Y(i,s)||(i[s]=t.apply(this,arguments)),i[s]};return n.cache={},n}const Ee=C((function(t,e,n){return setTimeout((function(){return t.apply(null,n)}),e)})),Pe=Ae(Ee,ct,1);function je(t,e,n){var r,i,s,o,a=0;n||(n={});var l=function(){a=!1===n.leading?0:re(),r=null,o=t.apply(i,s),r||(i=s=null)},u=function(){var u=re();a||!1!==n.leading||(a=u);var c=e-(u-a);return i=this,s=arguments,c<=0||c>e?(r&&(clearTimeout(r),r=null),a=u,o=t.apply(i,s),r||(i=s=null)):r||!1===n.trailing||(r=setTimeout(l,c)),o};return u.cancel=function(){clearTimeout(r),a=0,r=i=s=null},u}function Se(t,e,n){var r,i,s,o,a,l=function(){var u=re()-i;e>u?r=setTimeout(l,e-u):(r=null,n||(o=t.apply(a,s)),r||(s=a=null))},u=C((function(u){return a=this,s=u,i=re(),r||(r=setTimeout(l,e),n&&(o=t.apply(a,s))),o}));return u.cancel=function(){clearTimeout(r),r=s=a=null},u}function Te(t,e){return Ae(e,t)}function Oe(t){return function(){return!t.apply(this,arguments)}}function Ie(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}}function Le(t,e){return function(){if(--t<1)return e.apply(this,arguments)}}function Re(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}}const Fe=Ae(Re,2);function Be(t,e,n){e=Xt(e,n);for(var r,i=at(t),s=0,o=i.length;s<o;s++)if(e(t[r=i[s]],r,t))return r}function Ue(t){return function(e,n,r){n=Xt(n,r);for(var i=st(e),s=t>0?0:i-1;s>=0&&s<i;s+=t)if(n(e[s],s,e))return s;return-1}}const Me=Ue(1),De=Ue(-1);function $e(t,e,n,r){for(var i=(n=Xt(n,r,1))(e),s=0,o=st(t);s<o;){var a=Math.floor((s+o)/2);n(t[a])<i?s=a+1:o=a}return s}function ze(t,e,n){return function(r,i,s){var o=0,a=st(r);if("number"==typeof s)t>0?o=s>=0?s:Math.max(s+a,o):a=s>=0?Math.min(s+1,a):s+a+1;else if(n&&s&&a)return r[s=n(r,i)]===i?s:-1;if(i!=i)return(s=e(c.call(r,o,a),X))>=0?s+o:-1;for(s=t>0?o:a-1;s>=0&&s<a;s+=t)if(r[s]===i)return s;return-1}}const He=ze(1,Me,$e),qe=ze(-1,De);function Ve(t,e,n){var r=(xe(t)?Me:Be)(t,e,n);if(void 0!==r&&-1!==r)return t[r]}function Ke(t,e){return Ve(t,Kt(e))}function Ye(t,e,n){var r,i;if(e=Wt(e,n),xe(t))for(r=0,i=t.length;r<i;r++)e(t[r],r,t);else{var s=at(t);for(r=0,i=s.length;r<i;r++)e(t[s[r]],s[r],t)}return t}function We(t,e,n){e=Xt(e,n);for(var r=!xe(t)&&at(t),i=(r||t).length,s=Array(i),o=0;o<i;o++){var a=r?r[o]:o;s[o]=e(t[a],a,t)}return s}function Ge(t){return function(e,n,r,i){var s=arguments.length>=3;return function(e,n,r,i){var s=!xe(e)&&at(e),o=(s||e).length,a=t>0?0:o-1;for(i||(r=e[s?s[a]:a],a+=t);a>=0&&a<o;a+=t){var l=s?s[a]:a;r=n(r,e[l],l,e)}return r}(e,Wt(n,i,4),r,s)}}const Je=Ge(1),Xe=Ge(-1);function Qe(t,e,n){var r=[];return e=Xt(e,n),Ye(t,(function(t,n,i){e(t,n,i)&&r.push(t)})),r}function Ze(t,e,n){return Qe(t,Oe(Xt(e)),n)}function tn(t,e,n){e=Xt(e,n);for(var r=!xe(t)&&at(t),i=(r||t).length,s=0;s<i;s++){var o=r?r[s]:s;if(!e(t[o],o,t))return!1}return!0}function en(t,e,n){e=Xt(e,n);for(var r=!xe(t)&&at(t),i=(r||t).length,s=0;s<i;s++){var o=r?r[s]:s;if(e(t[o],o,t))return!0}return!1}function nn(t,e,n,r){return xe(t)||(t=Pt(t)),("number"!=typeof n||r)&&(n=0),He(t,e,n)>=0}const rn=C((function(t,e,n){var r,i;return D(e)?i=e:(e=$t(e),r=e.slice(0,-1),e=e[e.length-1]),We(t,(function(t){var s=i;if(!s){if(r&&r.length&&(t=zt(t,r)),null==t)return;s=t[e]}return null==s?s:s.apply(t,n)}))}));function sn(t,e){return We(t,Yt(e))}function on(t,e){return Qe(t,Kt(e))}function an(t,e,n){var r,i,s=-1/0,o=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=xe(t)?t:Pt(t)).length;a<l;a++)null!=(r=t[a])&&r>s&&(s=r);else e=Xt(e,n),Ye(t,(function(t,n,r){((i=e(t,n,r))>o||i===-1/0&&s===-1/0)&&(s=t,o=i)}));return s}function ln(t,e,n){var r,i,s=1/0,o=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,l=(t=xe(t)?t:Pt(t)).length;a<l;a++)null!=(r=t[a])&&r<s&&(s=r);else e=Xt(e,n),Ye(t,(function(t,n,r){((i=e(t,n,r))<o||i===1/0&&s===1/0)&&(s=t,o=i)}));return s}var un=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function cn(t){return t?K(t)?c.call(t):T(t)?t.match(un):xe(t)?We(t,Vt):Pt(t):[]}function dn(t,e,n){if(null==e||n)return xe(t)||(t=Pt(t)),t[ne(t.length-1)];var r=cn(t),i=st(r);e=Math.max(Math.min(e,i),0);for(var s=i-1,o=0;o<e;o++){var a=ne(o,s),l=r[o];r[o]=r[a],r[a]=l}return r.slice(0,e)}function hn(t){return dn(t,1/0)}function fn(t,e,n){var r=0;return e=Xt(e,n),sn(We(t,(function(t,n,i){return{value:t,index:r++,criteria:e(t,n,i)}})).sort((function(t,e){var n=t.criteria,r=e.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return t.index-e.index})),"value")}function pn(t,e){return function(n,r,i){var s=e?[[],[]]:{};return r=Xt(r,i),Ye(n,(function(e,i){var o=r(e,i,n);t(s,e,o)})),s}}const mn=pn((function(t,e,n){Y(t,n)?t[n].push(e):t[n]=[e]})),gn=pn((function(t,e,n){t[n]=e})),vn=pn((function(t,e,n){Y(t,n)?t[n]++:t[n]=1})),yn=pn((function(t,e,n){t[n?0:1].push(e)}),!0);function bn(t){return null==t?0:xe(t)?t.length:at(t).length}function wn(t,e,n){return e in n}const An=C((function(t,e){var n={},r=e[0];if(null==t)return n;D(r)?(e.length>1&&(r=Wt(r,e[1])),e=gt(t)):(r=wn,e=Ce(e,!1,!1),t=Object(t));for(var i=0,s=e.length;i<s;i++){var o=e[i],a=t[o];r(a,o,t)&&(n[o]=a)}return n})),_n=C((function(t,e){var n,r=e[0];return D(r)?(r=Oe(r),e.length>1&&(n=e[1])):(e=We(Ce(e,!1,!1),String),r=function(t,n){return!nn(e,n)}),An(t,r,n)}));function xn(t,e,n){return c.call(t,0,Math.max(0,t.length-(null==e||n?1:e)))}function Cn(t,e,n){return null==t||t.length<1?null==e||n?void 0:[]:null==e||n?t[0]:xn(t,t.length-e)}function Nn(t,e,n){return c.call(t,null==e||n?1:e)}function kn(t,e,n){return null==t||t.length<1?null==e||n?void 0:[]:null==e||n?t[t.length-1]:Nn(t,Math.max(0,t.length-e))}function En(t){return Qe(t,Boolean)}function Pn(t,e){return Ce(t,e,!1)}const jn=C((function(t,e){return e=Ce(e,!0,!0),Qe(t,(function(t){return!nn(e,t)}))})),Sn=C((function(t,e){return jn(t,e)}));function Tn(t,e,n,r){P(e)||(r=n,n=e,e=!1),null!=n&&(n=Xt(n,r));for(var i=[],s=[],o=0,a=st(t);o<a;o++){var l=t[o],u=n?n(l,o,t):l;e&&!n?(o&&s===u||i.push(l),s=u):n?nn(s,u)||(s.push(u),i.push(l)):nn(i,l)||i.push(l)}return i}const On=C((function(t){return Tn(Ce(t,!0,!0))}));function In(t){for(var e=[],n=arguments.length,r=0,i=st(t);r<i;r++){var s=t[r];if(!nn(e,s)){var o;for(o=1;o<n&&nn(arguments[o],s);o++);o===n&&e.push(s)}}return e}function Ln(t){for(var e=t&&an(t,st).length||0,n=Array(e),r=0;r<e;r++)n[r]=sn(t,r);return n}const Rn=C(Ln);function Fn(t,e){for(var n={},r=0,i=st(t);r<i;r++)e?n[t[r]]=e[r]:n[t[r][0]]=t[r][1];return n}function Bn(t,e,n){null==e&&(e=t||0,t=0),n||(n=e<t?-1:1);for(var r=Math.max(Math.ceil((e-t)/n),0),i=Array(r),s=0;s<r;s++,t+=n)i[s]=t;return i}function Un(t,e){if(null==e||e<1)return[];for(var n=[],r=0,i=t.length;r<i;)n.push(c.call(t,r,r+=e));return n}function Mn(t,e){return t._chain?ct(e).chain():e}function Dn(t){return Ye(Tt(t),(function(e){var n=ct[e]=t[e];ct.prototype[e]=function(){var t=[this._wrapped];return u.apply(t,arguments),Mn(this,n.apply(ct,t))}})),ct}Ye(["pop","push","reverse","shift","sort","splice","unshift"],(function(t){var e=o[t];ct.prototype[t]=function(){var n=this._wrapped;return null!=n&&(e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0]),Mn(this,n)}})),Ye(["concat","join","slice"],(function(t){var e=o[t];ct.prototype[t]=function(){var t=this._wrapped;return null!=t&&(t=e.apply(t,arguments)),Mn(this,t)}}));const $n=ct;var zn=Dn(r);zn._=zn;const Hn=zn}},o={};function a(t){var e=o[t];if(void 0!==e)return e.exports;var n=o[t]={id:t,loaded:!1,exports:{}};return s[t].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=s,e=[],a.O=(t,n,r,i)=>{if(!n){var s=1/0;for(c=0;c<e.length;c++){n=e[c][0],r=e[c][1],i=e[c][2];for(var o=!0,l=0;l<n.length;l++)(!1&i||s>=i)&&Object.keys(a.O).every((t=>a.O[t](n[l])))?n.splice(l--,1):(o=!1,i<s&&(s=i));if(o){e.splice(c--,1);var u=r();void 0!==u&&(t=u)}}return t}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[n,r,i]},a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>t+"-"+t+".js?v="+{1359:"d217768bf3f39a7359dd",8618:"1e8f15db3b14455fef8f"}[t],a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r={},i="nextcloud:",a.l=(t,e,n,s)=>{if(r[t])r[t].push(e);else{var o,l;if(void 0!==n)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var d=u[c];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==i+n){o=d;break}}o||(l=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,a.nc&&o.setAttribute("nonce",a.nc),o.setAttribute("data-webpack",i+n),o.src=t),r[t]=[e];var h=(e,n)=>{o.onerror=o.onload=null,clearTimeout(f);var i=r[t];if(delete r[t],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach((t=>t(n))),e)return e(n)},f=setTimeout(h.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=h.bind(null,o.onerror),o.onload=h.bind(null,o.onload),l&&document.head.appendChild(o)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),a.j=1418,(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),(()=>{a.b=document.baseURI||self.location.href;var t={1418:0};a.f.j=(e,n)=>{var r=a.o(t,e)?t[e]:void 0;if(0!==r)if(r)n.push(r[2]);else{var i=new Promise(((n,i)=>r=t[e]=[n,i]));n.push(r[2]=i);var s=a.p+a.u(e),o=new Error;a.l(s,(n=>{if(a.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var i=n&&("load"===n.type?"missing":n.type),s=n&&n.target&&n.target.src;o.message="Loading chunk "+e+" failed.\n("+i+": "+s+")",o.name="ChunkLoadError",o.type=i,o.request=s,r[1](o)}}),"chunk-"+e,e)}},a.O.j=e=>0===t[e];var e=(e,n)=>{var r,i,s=n[0],o=n[1],l=n[2],u=0;if(s.some((e=>0!==t[e]))){for(r in o)a.o(o,r)&&(a.m[r]=o[r]);if(l)var c=l(a)}for(e&&e(n);u<s.length;u++)i=s[u],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0;return a.O(c)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),a.nc=void 0;var l=a.O(void 0,[4208],(()=>a(52138)));l=a.O(l)})(); +//# sourceMappingURL=core-login.js.map?v=d89572e36fb9de7fb18f
\ No newline at end of file diff --git a/dist/core-login.js.map b/dist/core-login.js.map index 3e8e49faeb7..79bce58645b 100644 --- a/dist/core-login.js.map +++ b/dist/core-login.js.map @@ -1 +1 @@ -{"version":3,"file":"core-login.js?v=993629d5c274aa365410","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/query-string.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n.js","webpack:///nextcloud/core/src/OC/routing.js","webpack:///nextcloud/core/src/OC/msg.js","webpack:///nextcloud/core/src/OC/password-confirmation.js","webpack:///nextcloud/core/src/OC/plugins.js","webpack:///nextcloud/core/src/OC/theme.js","webpack:///nextcloud/core/src/OC/util-history.js","webpack:///nextcloud/core/src/OC/util.js","webpack:///nextcloud/core/src/OC/debug.js","webpack:///nextcloud/core/src/OC/webroot.js","webpack:///nextcloud/core/src/OC/index.js","webpack:///nextcloud/core/src/OC/capabilities.js","webpack:///nextcloud/core/src/OC/host.js","webpack:///nextcloud/core/src/OC/get_set.js","webpack:///nextcloud/core/src/OC/navigation.js","webpack://nextcloud/./core/src/views/Login.vue?ae59","webpack:///nextcloud/node_modules/decode-uri-component/index.js","webpack:///nextcloud/node_modules/split-on-first/index.js","webpack:///nextcloud/node_modules/query-string/node_modules/filter-obj/index.js","webpack:///nextcloud/node_modules/query-string/base.js","webpack:///nextcloud/node_modules/query-string/index.js","webpack://nextcloud/./core/src/components/login/LoginForm.vue?4366","webpack:///nextcloud/core/src/components/login/LoginButton.vue","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=script&lang=js","webpack://nextcloud/./core/src/components/login/LoginButton.vue?858b","webpack://nextcloud/./core/src/components/login/LoginButton.vue?14f0","webpack://nextcloud/./core/src/components/login/LoginButton.vue?82aa","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=script&lang=js","webpack:///nextcloud/core/src/components/login/LoginForm.vue","webpack://nextcloud/./core/src/components/login/LoginForm.vue?c01d","webpack://nextcloud/./core/src/components/login/LoginForm.vue?a678","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?16ec","webpack:///nextcloud/node_modules/vue-material-design-icons/Information.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/Information.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/Information.vue?8a14","webpack:///nextcloud/node_modules/vue-material-design-icons/Information.vue?vue&type=template&id=70e6f3ef","webpack:///nextcloud/node_modules/vue-material-design-icons/LockOpen.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/LockOpen.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/LockOpen.vue?104d","webpack:///nextcloud/node_modules/vue-material-design-icons/LockOpen.vue?vue&type=template&id=1b7ea4e7","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=script&lang=js","webpack:///nextcloud/core/src/services/WebAuthnAuthenticationService.js","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?993a","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?09eb","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?7cf3","webpack:///nextcloud/core/src/components/login/ResetPassword.vue","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=script&lang=js","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?2553","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?9d75","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=script&lang=js","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?1d67","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?30ca","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?1c8f","webpack:///nextcloud/core/src/views/Login.vue","webpack:///nextcloud/core/src/views/Login.vue?vue&type=script&lang=js","webpack://nextcloud/./core/src/views/Login.vue?2449","webpack://nextcloud/./core/src/views/Login.vue?3468","webpack:///nextcloud/core/src/mixins/Nextcloud.js","webpack:///nextcloud/core/src/login.js","webpack:///nextcloud/node_modules/backbone/backbone.js","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/views/Login.vue?vue&type=style&index=0&id=c13eb420&prod&lang=scss","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css","webpack:///nextcloud/node_modules/davclient.js/lib/client.js","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/node_modules/underscore/modules/_setup.js","webpack:///nextcloud/node_modules/underscore/modules/restArguments.js","webpack:///nextcloud/node_modules/underscore/modules/isObject.js","webpack:///nextcloud/node_modules/underscore/modules/isNull.js","webpack:///nextcloud/node_modules/underscore/modules/isUndefined.js","webpack:///nextcloud/node_modules/underscore/modules/isBoolean.js","webpack:///nextcloud/node_modules/underscore/modules/isElement.js","webpack:///nextcloud/node_modules/underscore/modules/_tagTester.js","webpack:///nextcloud/node_modules/underscore/modules/isString.js","webpack:///nextcloud/node_modules/underscore/modules/isNumber.js","webpack:///nextcloud/node_modules/underscore/modules/isDate.js","webpack:///nextcloud/node_modules/underscore/modules/isRegExp.js","webpack:///nextcloud/node_modules/underscore/modules/isError.js","webpack:///nextcloud/node_modules/underscore/modules/isSymbol.js","webpack:///nextcloud/node_modules/underscore/modules/isArrayBuffer.js","webpack:///nextcloud/node_modules/underscore/modules/isFunction.js","webpack:///nextcloud/node_modules/underscore/modules/_hasObjectTag.js","webpack:///nextcloud/node_modules/underscore/modules/_stringTagBug.js","webpack:///nextcloud/node_modules/underscore/modules/isDataView.js","webpack:///nextcloud/node_modules/underscore/modules/isArray.js","webpack:///nextcloud/node_modules/underscore/modules/_has.js","webpack:///nextcloud/node_modules/underscore/modules/isArguments.js","webpack:///nextcloud/node_modules/underscore/modules/isFinite.js","webpack:///nextcloud/node_modules/underscore/modules/isNaN.js","webpack:///nextcloud/node_modules/underscore/modules/constant.js","webpack:///nextcloud/node_modules/underscore/modules/_createSizePropertyCheck.js","webpack:///nextcloud/node_modules/underscore/modules/_shallowProperty.js","webpack:///nextcloud/node_modules/underscore/modules/_getByteLength.js","webpack:///nextcloud/node_modules/underscore/modules/_isBufferLike.js","webpack:///nextcloud/node_modules/underscore/modules/isTypedArray.js","webpack:///nextcloud/node_modules/underscore/modules/_getLength.js","webpack:///nextcloud/node_modules/underscore/modules/_collectNonEnumProps.js","webpack:///nextcloud/node_modules/underscore/modules/keys.js","webpack:///nextcloud/node_modules/underscore/modules/isEmpty.js","webpack:///nextcloud/node_modules/underscore/modules/isMatch.js","webpack:///nextcloud/node_modules/underscore/modules/underscore.js","webpack:///nextcloud/node_modules/underscore/modules/_toBufferView.js","webpack:///nextcloud/node_modules/underscore/modules/isEqual.js","webpack:///nextcloud/node_modules/underscore/modules/allKeys.js","webpack:///nextcloud/node_modules/underscore/modules/_methodFingerprint.js","webpack:///nextcloud/node_modules/underscore/modules/isMap.js","webpack:///nextcloud/node_modules/underscore/modules/isWeakMap.js","webpack:///nextcloud/node_modules/underscore/modules/isSet.js","webpack:///nextcloud/node_modules/underscore/modules/isWeakSet.js","webpack:///nextcloud/node_modules/underscore/modules/values.js","webpack:///nextcloud/node_modules/underscore/modules/pairs.js","webpack:///nextcloud/node_modules/underscore/modules/invert.js","webpack:///nextcloud/node_modules/underscore/modules/functions.js","webpack:///nextcloud/node_modules/underscore/modules/_createAssigner.js","webpack:///nextcloud/node_modules/underscore/modules/extend.js","webpack:///nextcloud/node_modules/underscore/modules/extendOwn.js","webpack:///nextcloud/node_modules/underscore/modules/defaults.js","webpack:///nextcloud/node_modules/underscore/modules/_baseCreate.js","webpack:///nextcloud/node_modules/underscore/modules/create.js","webpack:///nextcloud/node_modules/underscore/modules/clone.js","webpack:///nextcloud/node_modules/underscore/modules/tap.js","webpack:///nextcloud/node_modules/underscore/modules/toPath.js","webpack:///nextcloud/node_modules/underscore/modules/_toPath.js","webpack:///nextcloud/node_modules/underscore/modules/_deepGet.js","webpack:///nextcloud/node_modules/underscore/modules/get.js","webpack:///nextcloud/node_modules/underscore/modules/has.js","webpack:///nextcloud/node_modules/underscore/modules/identity.js","webpack:///nextcloud/node_modules/underscore/modules/matcher.js","webpack:///nextcloud/node_modules/underscore/modules/property.js","webpack:///nextcloud/node_modules/underscore/modules/_optimizeCb.js","webpack:///nextcloud/node_modules/underscore/modules/_baseIteratee.js","webpack:///nextcloud/node_modules/underscore/modules/iteratee.js","webpack:///nextcloud/node_modules/underscore/modules/_cb.js","webpack:///nextcloud/node_modules/underscore/modules/mapObject.js","webpack:///nextcloud/node_modules/underscore/modules/noop.js","webpack:///nextcloud/node_modules/underscore/modules/propertyOf.js","webpack:///nextcloud/node_modules/underscore/modules/times.js","webpack:///nextcloud/node_modules/underscore/modules/random.js","webpack:///nextcloud/node_modules/underscore/modules/now.js","webpack:///nextcloud/node_modules/underscore/modules/_createEscaper.js","webpack:///nextcloud/node_modules/underscore/modules/_escapeMap.js","webpack:///nextcloud/node_modules/underscore/modules/escape.js","webpack:///nextcloud/node_modules/underscore/modules/unescape.js","webpack:///nextcloud/node_modules/underscore/modules/_unescapeMap.js","webpack:///nextcloud/node_modules/underscore/modules/templateSettings.js","webpack:///nextcloud/node_modules/underscore/modules/template.js","webpack:///nextcloud/node_modules/underscore/modules/result.js","webpack:///nextcloud/node_modules/underscore/modules/uniqueId.js","webpack:///nextcloud/node_modules/underscore/modules/chain.js","webpack:///nextcloud/node_modules/underscore/modules/_executeBound.js","webpack:///nextcloud/node_modules/underscore/modules/partial.js","webpack:///nextcloud/node_modules/underscore/modules/bind.js","webpack:///nextcloud/node_modules/underscore/modules/_isArrayLike.js","webpack:///nextcloud/node_modules/underscore/modules/_flatten.js","webpack:///nextcloud/node_modules/underscore/modules/bindAll.js","webpack:///nextcloud/node_modules/underscore/modules/memoize.js","webpack:///nextcloud/node_modules/underscore/modules/delay.js","webpack:///nextcloud/node_modules/underscore/modules/defer.js","webpack:///nextcloud/node_modules/underscore/modules/throttle.js","webpack:///nextcloud/node_modules/underscore/modules/debounce.js","webpack:///nextcloud/node_modules/underscore/modules/wrap.js","webpack:///nextcloud/node_modules/underscore/modules/negate.js","webpack:///nextcloud/node_modules/underscore/modules/compose.js","webpack:///nextcloud/node_modules/underscore/modules/after.js","webpack:///nextcloud/node_modules/underscore/modules/before.js","webpack:///nextcloud/node_modules/underscore/modules/once.js","webpack:///nextcloud/node_modules/underscore/modules/findKey.js","webpack:///nextcloud/node_modules/underscore/modules/_createPredicateIndexFinder.js","webpack:///nextcloud/node_modules/underscore/modules/findIndex.js","webpack:///nextcloud/node_modules/underscore/modules/findLastIndex.js","webpack:///nextcloud/node_modules/underscore/modules/sortedIndex.js","webpack:///nextcloud/node_modules/underscore/modules/_createIndexFinder.js","webpack:///nextcloud/node_modules/underscore/modules/indexOf.js","webpack:///nextcloud/node_modules/underscore/modules/lastIndexOf.js","webpack:///nextcloud/node_modules/underscore/modules/find.js","webpack:///nextcloud/node_modules/underscore/modules/findWhere.js","webpack:///nextcloud/node_modules/underscore/modules/each.js","webpack:///nextcloud/node_modules/underscore/modules/map.js","webpack:///nextcloud/node_modules/underscore/modules/_createReduce.js","webpack:///nextcloud/node_modules/underscore/modules/reduce.js","webpack:///nextcloud/node_modules/underscore/modules/reduceRight.js","webpack:///nextcloud/node_modules/underscore/modules/filter.js","webpack:///nextcloud/node_modules/underscore/modules/reject.js","webpack:///nextcloud/node_modules/underscore/modules/every.js","webpack:///nextcloud/node_modules/underscore/modules/some.js","webpack:///nextcloud/node_modules/underscore/modules/contains.js","webpack:///nextcloud/node_modules/underscore/modules/invoke.js","webpack:///nextcloud/node_modules/underscore/modules/pluck.js","webpack:///nextcloud/node_modules/underscore/modules/where.js","webpack:///nextcloud/node_modules/underscore/modules/max.js","webpack:///nextcloud/node_modules/underscore/modules/min.js","webpack:///nextcloud/node_modules/underscore/modules/toArray.js","webpack:///nextcloud/node_modules/underscore/modules/sample.js","webpack:///nextcloud/node_modules/underscore/modules/shuffle.js","webpack:///nextcloud/node_modules/underscore/modules/sortBy.js","webpack:///nextcloud/node_modules/underscore/modules/_group.js","webpack:///nextcloud/node_modules/underscore/modules/groupBy.js","webpack:///nextcloud/node_modules/underscore/modules/indexBy.js","webpack:///nextcloud/node_modules/underscore/modules/countBy.js","webpack:///nextcloud/node_modules/underscore/modules/partition.js","webpack:///nextcloud/node_modules/underscore/modules/size.js","webpack:///nextcloud/node_modules/underscore/modules/_keyInObj.js","webpack:///nextcloud/node_modules/underscore/modules/pick.js","webpack:///nextcloud/node_modules/underscore/modules/omit.js","webpack:///nextcloud/node_modules/underscore/modules/initial.js","webpack:///nextcloud/node_modules/underscore/modules/first.js","webpack:///nextcloud/node_modules/underscore/modules/rest.js","webpack:///nextcloud/node_modules/underscore/modules/last.js","webpack:///nextcloud/node_modules/underscore/modules/compact.js","webpack:///nextcloud/node_modules/underscore/modules/flatten.js","webpack:///nextcloud/node_modules/underscore/modules/difference.js","webpack:///nextcloud/node_modules/underscore/modules/without.js","webpack:///nextcloud/node_modules/underscore/modules/uniq.js","webpack:///nextcloud/node_modules/underscore/modules/union.js","webpack:///nextcloud/node_modules/underscore/modules/intersection.js","webpack:///nextcloud/node_modules/underscore/modules/unzip.js","webpack:///nextcloud/node_modules/underscore/modules/zip.js","webpack:///nextcloud/node_modules/underscore/modules/object.js","webpack:///nextcloud/node_modules/underscore/modules/range.js","webpack:///nextcloud/node_modules/underscore/modules/chunk.js","webpack:///nextcloud/node_modules/underscore/modules/_chainResult.js","webpack:///nextcloud/node_modules/underscore/modules/mixin.js","webpack:///nextcloud/node_modules/underscore/modules/underscore-array-methods.js","webpack:///nextcloud/node_modules/underscore/modules/index-default.js","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/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/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 = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\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\tscript.timeout = 120;\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 * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&')\n\t\t\t\t.split('<').join('<')\n\t\t\t\t.split('>').join('>')\n\t\t\t\t.split('\"').join('"')\n\t\t\t\t.split('\\'').join(''')\n\t\t}\n\n\t\toptions = options || {}\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(escapeHTML(text), options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowUpdate(text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast()\n\t\t}\n\t\tthis.updatableNotification = showMessage(text, { timeout: TOAST_PERMANENT_TIMEOUT })\n\t\tthis.updatableNotification.toastElement.toastify = this.updatableNotification\n\t\treturn $(this.updatableNotification.toastElement)\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {Array} [options] options array\n\t * @param {number} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @return {JQuery} the toast element\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowTemporary(text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || TOAST_DEFAULT_TIMEOUT\n\t\tconst toast = showMessage(text, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t *\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tisHidden() {\n\t\treturn !$('#content').find('.toastify').length\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index.js'\nimport Notification from './notification.js'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, { trailing: false })\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function() {\n\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t}\n\t\t\t\t\ttimer++\n\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Bernhard Posselt 2014\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nlet dynamicSlideToggleEnabled = false\n\nconst Apps = {\n\tenableDynamicSlideToggle() {\n\t\tdynamicSlideToggleEnabled = true\n\t},\n}\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.removeClass('disappear').show()\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.hide().addClass('disappear')\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tlet buttons = $('[data-apps-slide-toggle]')\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings')\n\t}\n\n\t$(document).click(function(event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]')\n\t\t}\n\n\t\tbuttons.each(function(index, button) {\n\n\t\t\tconst areaSelector = $(button).data('apps-slide-toggle')\n\t\t\tconst area = $(areaSelector)\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction hideArea() {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('hide'))\n\t\t\t\t})\n\t\t\t\tarea.removeClass('opened')\n\t\t\t\t$(button).removeClass('opened')\n\t\t\t\t$(button).attr('aria-expanded', 'false')\n\t\t\t}\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction showArea() {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('show'))\n\t\t\t\t})\n\t\t\t\tarea.addClass('opened')\n\t\t\t\t$(button).addClass('opened')\n\t\t\t\t$(button).attr('aria-expanded', 'true')\n\t\t\t\tconst input = $(areaSelector + ' [autofocus]')\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea()\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tconst closest = $(event.target).closest(areaSelector)\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t})\n}\n\nexport default Apps\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport OC from '../OC/index.js'\n\n/**\n * @param {string} method 'post' or 'delete'\n * @param {string} endpoint endpoint\n * @param {object} [options] destructuring object\n * @param {object} [options.data] option data\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n */\nfunction call(method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options))\n\t\treturn\n\t}\n\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/apps') + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error,\n\t})\n}\n\n/**\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @since 11.0.0\n */\nexport function getApps(options) {\n\tcall('get', '', options)\n}\n\n/**\n * @param {string} app app id\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getKeys(app, options) {\n\tcall('get', '/' + app, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string | Function} defaultValue default value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getValue(app, key, defaultValue, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tdefaultValue,\n\t}\n\n\tcall('get', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string} value value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function setValue(app, key, value, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tvalue,\n\t}\n\n\tcall('post', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function deleteKey(app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options)\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\n import { getValue, setValue, getApps, getKeys, deleteKey } from '../OCP/appconfig.js'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function(app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function(app, key, value) {\n\t\tsetValue(app, key, value)\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function(callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function(app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function(app, key) {\n\t\tdeleteKey(app, key)\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/**\n * Copyright (c) 2015\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport { dav } from 'davclient.js'\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n}\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError() {\n\tthrow new Error('A \"url\" property or function must be specified')\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult(result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function(subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties)\n\t\t})\n\t}\n\tvar props = {\n\t\thref: result.href\n\t}\n\n\t_.each(result.propStat, function(propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key]\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key]\n\t\t}\n\t})\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href)\n\t}\n\n\treturn props\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @returns {string} id\n */\nfunction parseIdFromLocation(url) {\n\tvar queryPos = url.indexOf('?')\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos)\n\t}\n\n\tvar parts = url.split('/')\n\tvar result\n\tdo {\n\t\tresult = parts[parts.length - 1]\n\t\tparts.pop()\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0)\n\n\treturn result\n}\n\nfunction isSuccessStatus(status) {\n\treturn status >= 200 && status <= 299\n}\n\nfunction convertModelAttributesToDavProperties(attrs, davProperties) {\n\tvar props = {}\n\tvar key\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key]\n\t\tvar value = attrs[key]\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key)\n\t\t\tchangedProp = key\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value\n\t\t}\n\t\tprops[changedProp] = value\n\t}\n\treturn props\n}\n\nfunction callPropFind(client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function(response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping)\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift()\n\t\t\t\t}\n\n\t\t\t\toptions.success(results)\n\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response)\n\t\t}\n\t})\n}\n\nfunction callPropPatch(client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function(result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON())\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result)\n\t\t}\n\t})\n\n}\n\nfunction callMkCol(client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers)\n\t})\n}\n\nfunction callMethod(client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json'\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON()\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location')\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader)\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping))\n\t\t\t} else {\n\t\t\t\toptions.success(result.body)\n\t\t\t}\n\t\t}\n\t})\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t})\n\tclient.resolveUrl = function() {\n\t\treturn options.url\n\t}\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers)\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers)\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers)\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers)\n\t} else {\n\t\treturn callMethod(client, options, model, headers)\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = { type: methodMap[method] || method }\n\tvar isCollection = (model instanceof Backbone.Collection)\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL'\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT'\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError()\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options))\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model)\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties)\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1\n\t\t\t} else {\n\t\t\t\toptions.depth = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error\n\toptions.error = function(xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus\n\t\toptions.errorThrown = errorThrown\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown)\n\t\t}\n\t}\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model)\n\tmodel.trigger('request', model, xhr, options)\n\treturn xhr\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport VendorBackbone from 'backbone'\nimport { davCall, davSync } from './backbone-webdav.js'\n\nconst Backbone = VendorBackbone.noConflict()\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n})\n\nexport default Backbone\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Parses a URL query string into a JS map\n *\n * @param {string} queryString query string in the format param1=1234¶m2=abcde¶m3=xyz\n * @return {Object<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {Object<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst config = window._oc_config || {}\n\nexport default config\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\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\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport IconMove from '@mdi/svg/svg/folder-move.svg?raw'\nimport IconCopy from '@mdi/svg/svg/folder-multiple.svg?raw'\n\nimport OC from './index.js'\nimport { FilePickerType, getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { basename } from 'path'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_MOVE: 2,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_COPY: 3,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\n\t/**\n\t * Legacy wrapper to the new Vue based filepicker from `@nextcloud/dialogs`\n\t *\n\t * Prefer to use the Vue filepicker directly instead.\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {Function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetype] mimetype to filter by - directories will always be included\n\t * @param {boolean} [_modal] do not use\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t * @param {boolean} [options.allowDirectoryChooser] Allow to select directories\n\t * @deprecated since 27.1.0 use the filepicker from `@nextcloud/dialogs` instead\n\t */\n\tfilepicker(title, callback, multiselect = false, mimetype = undefined, _modal = undefined, type = FilePickerType.Choose, path = undefined, options = undefined) {\n\n\t\t/**\n\t\t * Create legacy callback wrapper to support old filepicker syntax\n\t\t * @param fn The original callback\n\t\t * @param type The file picker type which was used to pick the file(s)\n\t\t */\n\t\tconst legacyCallback = (fn, type) => {\n\t\t\tconst getPath = (node) => {\n\t\t\t\tconst root = node?.root || ''\n\t\t\t\tlet path = node?.path || ''\n\t\t\t\t// TODO: Fix this in @nextcloud/files\n\t\t\t\tif (path.startsWith(root)) {\n\t\t\t\t\tpath = path.slice(root.length) || '/'\n\t\t\t\t}\n\t\t\t\treturn path\n\t\t\t}\n\n\t\t\tif (multiselect) {\n\t\t\t\treturn (nodes) => fn(nodes.map(getPath), type)\n\t\t\t} else {\n\t\t\t\treturn (nodes) => fn(getPath(nodes[0]), type)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Coverting a Node into a legacy file info to support the OC.dialogs.filepicker filter function\n\t\t * @param node The node to convert\n\t\t */\n\t\tconst nodeToLegacyFile = (node) => ({\n\t\t\tid: node.fileid || null,\n\t\t\tpath: node.path,\n\t\t\tmimetype: node.mime || null,\n\t\t\tmtime: node.mtime?.getTime() || null,\n\t\t\tpermissions: node.permissions,\n\t\t\tname: node.attributes?.displayName || node.basename,\n\t\t\tetag: node.attributes?.etag || null,\n\t\t\thasPreview: node.attributes?.hasPreview || null,\n\t\t\tmountType: node.attributes?.mountType || null,\n\t\t\tquotaAvailableBytes: node.attributes?.quotaAvailableBytes || null,\n\t\t\ticon: null,\n\t\t\tsharePermissions: null,\n\t\t})\n\n\t\tconst builder = getFilePickerBuilder(title)\n\n\t\t// Setup buttons\n\t\tif (type === this.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t(options.buttons || []).forEach((button) => {\n\t\t\t\tbuilder.addButton({\n\t\t\t\t\tcallback: legacyCallback(callback, button.type),\n\t\t\t\t\tlabel: button.text,\n\t\t\t\t\ttype: button.defaultButton ? 'primary' : 'secondary',\n\t\t\t\t})\n\t\t\t})\n\t\t} else {\n\t\t\tbuilder.setButtonFactory((nodes, path) => {\n\t\t\t\tconst buttons = []\n\t\t\t\tconst node = nodes?.[0]?.attributes?.displayName || nodes?.[0]?.basename\n\t\t\t\tconst target = node || basename(path)\n\n\t\t\t\tif (type === FilePickerType.Choose) {\n\t\t\t\t\tbuttons.push({\n\t\t\t\t\t\tcallback: legacyCallback(callback, FilePickerType.Choose),\n\t\t\t\t\t\tlabel: node && !this.multiSelect ? t('core', 'Choose {file}', { file: node }) : t('core', 'Choose'),\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === FilePickerType.CopyMove || type === FilePickerType.Copy) {\n\t\t\t\t\tbuttons.push({\n\t\t\t\t\t\tcallback: legacyCallback(callback, FilePickerType.Copy),\n\t\t\t\t\t\tlabel: target ? t('core', 'Copy to {target}', { target }) : t('core', 'Copy'),\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\ticon: IconCopy,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === FilePickerType.Move || type === FilePickerType.CopyMove) {\n\t\t\t\t\tbuttons.push({\n\t\t\t\t\t\tcallback: legacyCallback(callback, FilePickerType.Move),\n\t\t\t\t\t\tlabel: target ? t('core', 'Move to {target}', { target }) : t('core', 'Move'),\n\t\t\t\t\t\ttype: type === FilePickerType.Move ? 'primary' : 'secondary',\n\t\t\t\t\t\ticon: IconMove,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn buttons\n\t\t\t})\n\t\t}\n\n\t\tif (mimetype) {\n\t\t\tbuilder.setMimeTypeFilter(typeof mimetype === 'string' ? [mimetype] : (mimetype || []))\n\t\t}\n\t\tif (typeof options?.filter === 'function') {\n\t\t\tbuilder.setFilter((node) => options.filter(nodeToLegacyFile(node)))\n\t\t}\n\t\tbuilder.allowDirectories(options?.allowDirectoryChooser === true || mimetype?.includes('httpd/unix-directory') || false)\n\t\t\t.setMultiSelect(multiselect)\n\t\t\t.startAt(path)\n\t\t\t.build()\n\t\t\t.pick()\n\t},\n\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\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\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\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}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken.js'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants.js'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Handlebars from 'handlebars'\nimport {\n\tloadTranslations,\n\ttranslate,\n\ttranslatePlural,\n\tregister,\n\tunregister,\n} from '@nextcloud/l10n'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n * @deprecated 26.0.0 use https://www.npmjs.com/package/@nextcloud/l10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @deprecated 26.0.0 use `loadTranslations` from https://www.npmjs.com/package/@nextcloud/l10n\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload: loadTranslations,\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @deprecated 26.0.0 use `register` from https://www.npmjs.com/package/@nextcloud/l10\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister,\n\n\t/**\n\t * @private\n\t * @deprecated 26.0.0 use `unregister` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\t_unregister: unregister,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @deprecated 26.0.0 use `translate` from https://www.npmjs.com/package/@nextcloud/l10n\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @param {boolean} [options.sanitize=true] enable/disable sanitization (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate,\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @deprecated 26.0.0 use `translatePlural` from https://www.npmjs.com/package/@nextcloud/l10n\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural,\n}\n\nexport default L10n\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn translate(app, text)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t */\n\tstartSaving(selector) {\n\t\tthis.startAction(selector, t('core', 'Saving …'))\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving(selector, response) {\n\t\tthis.finishedAction(selector, response)\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction(selector, response) {\n\t\tif (response.status === 'success') {\n\t\t\tthis.finishedSuccess(selector, response.data.message)\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message)\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show()\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { confirmPassword, isPasswordConfirmationRequired } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\n\trequiresPasswordConfirmation() {\n\t\treturn isPasswordConfirmationRequired()\n\t},\n\n\t/**\n\t * @param {Function} callback success callback function\n\t * @param {object} options options currently not used by confirmPassword\n\t * @param {Function} rejectCallback error callback function\n\t */\n\trequirePasswordConfirmation(callback, options, rejectCallback) {\n\t\tconfirmPassword().then(callback, rejectCallback)\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\n\t/**\n\t * @type {Array.<OC.Plugin>}\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const theme = window._theme || {}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport OC from './index.js'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState(params, url, replace) {\n\t\tlet strParams\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params)\n\t\t}\n\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tconst isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tconst patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]')\n\t\t\t\tfor (let i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i]\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.fill = pattern.style.fill\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke\n\t\t\t\t\tpattern.removeAttribute('filter')\n\t\t\t\t\tpattern.setAttribute('filter', 'url(#invert)')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url)\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url)\n\t\t\t}\n\t\t} else {\n\t\t\t// use URL hash for IE8\n\t\t\twindow.location.hash = '?' + strParams\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used, using the params as query string\n\t */\n\tpushState(params, url) {\n\t\tthis._pushState(params, url, false)\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState(params, url) {\n\t\tthis._pushState(params, url, true)\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param {Function} handler handler\n\t */\n\taddOnPopStateHandler(handler) {\n\t\tthis._handlers.push(handler)\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t *\n\t * @return {string}\n\t */\n\t_parseHashQuery() {\n\t\tconst hash = window.location.hash\n\t\tconst pos = hash.indexOf('?')\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1)\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1)\n\t\t}\n\t\treturn ''\n\t},\n\n\t_decodeQuery(query) {\n\t\treturn query.replace(/\\+/g, ' ')\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return {object} map of parameters\n\t */\n\tparseUrlQuery() {\n\t\tconst query = this._parseHashQuery()\n\t\tlet params\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query))\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)))\n\t\treturn params || {}\n\t},\n\n\t_onPopState(e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false\n\t\t\treturn\n\t\t}\n\t\tlet params\n\t\tif (!this._handlers.length) {\n\t\t\treturn\n\t\t}\n\t\tparams = (e && e.state)\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params)\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {}\n\t\t}\n\t\tfor (let i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params)\n\t\t}\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport moment from 'moment'\n\nimport History from './util-history.js'\nimport OC from './index.js'\nimport { formatFileSize as humanFileSize } from '@nextcloud/files'\n\n/**\n * @param {any} t -\n */\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tconst tz = []\n\tlet x = 0\n\tlet y = -1\n\tlet n = 0\n\tlet c\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x)\n\t\t// only include the dot in strings\n\t\tconst m = ((!n && c === '.') || (c >= '0' && c <= '9'))\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++\n\t\t\ttz[y] = ''\n\t\t\tn = m\n\t\t}\n\t\ttz[y] += c\n\t\tx++\n\t}\n\treturn tz\n}\n\n/**\n * Utility functions\n *\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t/**\n\t * @deprecated use https://nextcloud.github.io/nextcloud-files/functions/formatFileSize.html\n\t */\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t *\n\t * @param {string} string file size in human-readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize(string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null\n\t\t}\n\n\t\tconst s = string.toLowerCase().trim()\n\t\tlet bytes = null\n\n\t\tconst bytesArray = {\n\t\t\tb: 1,\n\t\t\tk: 1024,\n\t\t\tkb: 1024,\n\t\t\tmb: 1024 * 1024,\n\t\t\tm: 1024 * 1024,\n\t\t\tgb: 1024 * 1024 * 1024,\n\t\t\tg: 1024 * 1024 * 1024,\n\t\t\ttb: 1024 * 1024 * 1024 * 1024,\n\t\t\tt: 1024 * 1024 * 1024 * 1024,\n\t\t\tpb: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\tp: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t}\n\n\t\tconst matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i)\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s)\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]]\n\t\t}\n\n\t\tbytes = Math.round(bytes)\n\t\treturn bytes\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @param {string} format date format, see momentjs docs\n\t * @return {string} timestamp formatted as requested\n\t */\n\tformatDate(timestamp, format) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tOC.debug && console.warn('OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tformat = format || 'LLL'\n\t\treturn moment(timestamp).format(format)\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @return {string} human readable difference from now\n\t */\n\trelativeModifiedDate(timestamp) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tOC.debug && console.warn('OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tconst diff = moment().diff(moment(timestamp))\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago')\n\t\t}\n\t\treturn moment(timestamp).fromNow()\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {number} width of scrollbar\n\t */\n\tgetScrollBarWidth() {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth\n\t\t}\n\n\t\tconst inner = document.createElement('p')\n\t\tinner.style.width = '100%'\n\t\tinner.style.height = '200px'\n\n\t\tconst outer = document.createElement('div')\n\t\touter.style.position = 'absolute'\n\t\touter.style.top = '0px'\n\t\touter.style.left = '0px'\n\t\touter.style.visibility = 'hidden'\n\t\touter.style.width = '200px'\n\t\touter.style.height = '150px'\n\t\touter.style.overflow = 'hidden'\n\t\touter.appendChild(inner)\n\n\t\tdocument.body.appendChild(outer)\n\t\tconst w1 = inner.offsetWidth\n\t\touter.style.overflow = 'scroll'\n\t\tlet w2 = inner.offsetWidth\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth\n\t\t}\n\n\t\tdocument.body.removeChild(outer)\n\n\t\tthis._scrollBarWidth = (w1 - w2)\n\n\t\treturn this._scrollBarWidth\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime(date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate())\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t *\n\t * @param {string} a first string to compare\n\t * @param {string} b second string to compare\n\t * @return {number} -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare(a, b) {\n\t\tlet x\n\t\tconst aa = chunkify(a)\n\t\tconst bb = chunkify(b)\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tconst aNum = Number(aa[x]); const bNum = Number(bb[x])\n\t\t\t\t// note: == is correct here\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t *\n\t * @param {Function} callback function to call on success\n\t * @param {number} interval in milliseconds\n\t */\n\twaitFor(callback, interval) {\n\t\tconst internalCallback = function() {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval)\n\t\t\t}\n\t\t}\n\n\t\tinternalCallback()\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t *\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue(name, value) {\n\t\tconst cookies = document.cookie.split(';')\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tconst cookie = cookies[i].split('=')\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst base = window._oc_debug\n\nexport const debug = base\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tconst pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error.js'\nimport Apps from './apps.js'\nimport { AppConfig, appConfig } from './appconfig.js'\nimport appswebroots from './appswebroots.js'\nimport Backbone from './backbone.js'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from '@nextcloud/paths'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string.js'\nimport Config from './config.js'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants.js'\nimport { currentUser, getCurrentUser } from './currentuser.js'\nimport Dialogs from './dialogs.js'\nimport EventSource from './eventsource.js'\nimport { get, set } from './get_set.js'\nimport { getCapabilities } from './capabilities.js'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host.js'\nimport {\n\tgetToken as getRequestToken,\n} from './requesttoken.js'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu.js'\nimport { isUserAdmin } from './admin.js'\nimport L10N from './l10n.js'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\n} from '@nextcloud/l10n'\n\nimport {\n\tgenerateUrl,\n\tgenerateFilePath,\n\tgenerateOcsUrl,\n\tgenerateRemoteUrl,\n\tgetRootUrl,\n\timagePath,\n\tlinkTo,\n} from '@nextcloud/router'\n\nimport {\n\tlinkToRemoteBase,\n} from './routing.js'\nimport msg from './msg.js'\nimport Notification from './notification.js'\nimport PasswordConfirmation from './password-confirmation.js'\nimport Plugins from './plugins.js'\nimport { theme } from './theme.js'\nimport Util from './util.js'\nimport { debug } from './debug.js'\nimport { redirect, reload } from './navigation.js'\nimport webroot from './webroot.js'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t *\n\t * @param {string} file to check\n\t * @return {boolean}\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappswebroots,\n\tBackbone,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type {string}\n\t * @deprecated use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t * @deprecated 19.0.0 use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t *\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 20.0.0 use @nextcloud/capabilities instead\n\t */\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tbasename,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tencodePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tdirname,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tisSamePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * @deprecated 20.0.0 use `getCanonicalLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetCanonicalLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLanguage` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLanguage,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\t/**\n\t * @deprecated 28.0.0 use methods from '@nextcloud/password-confirmation'\n\t */\n\tPasswordConfirmation,\n\tPlugins,\n\ttheme,\n\tUtil,\n\tdebug,\n\t/**\n\t * @deprecated 19.0.0 use `generateFilePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tfilePath: generateFilePath,\n\t/**\n\t * @deprecated 19.0.0 use `generateUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgenerateUrl,\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#get\n\t */\n\tget: get(window),\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#set\n\t */\n\tset: set(window),\n\t/**\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgetRootPath: getRootUrl,\n\t/**\n\t * @deprecated 19.0.0 use `imagePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\t/**\n\t * @deprecated 19.0.0 use `linkTo` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkTo,\n\t/**\n\t * @param {string} service service name\n\t * @param {number} version OCS API version\n\t * @return {string} OCS API base path\n\t * @deprecated 19.0.0 use `generateOcsUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToOCS: (service, version) => {\n\t\treturn generateOcsUrl(service, {}, {\n\t\t\tocsVersion: version || 1,\n\t\t}) + '/'\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `generateRemoteUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToRemote: generateRemoteUrl,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type {string}\n\t *\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribe('csrf-token-update', e => {\n\tOC.requestToken = e.token\n\n\t// Logging might help debug (Sentry) issues\n\tconsole.info('OC.requestToken changed', e.token)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCapabilities as realGetCapabilities } from '@nextcloud/capabilities'\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0.0\n */\nexport const getCapabilities = () => {\n\tOC.debug && console.warn('OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities')\n\treturn realGetCapabilities()\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {number} port number\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n *\n * @param {string} context context\n * @return {Function} setter\n * @deprecated 19.0.0 use https://lodash.com/docs#set\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n\treturn value\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box login-box\"},[(!_vm.hideLoginForm || _vm.directLogin)?[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(!_vm.passwordlessLogin && !_vm.resetPassword && _vm.resetPasswordTarget === '')?_c('div',[_c('LoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"direct-login\":_vm.directLogin,\"messages\":_vm.messages,\"errors\":_vm.errors,\"throttle-delay\":_vm.throttleDelay,\"auto-complete-allowed\":_vm.autoCompleteAllowed,\"email-states\":_vm.emailStates},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),(_vm.canResetPassword && _vm.resetPasswordLink !== '')?_c('a',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):(_vm.canResetPassword && !_vm.resetPassword)?_c('a',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink},on:{\"click\":function($event){$event.preventDefault();_vm.resetPassword = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.hasPasswordless)?[(_vm.countAlternativeLogins)?_c('div',{staticClass:\"alternative-logins\"},[(_vm.hasPasswordless)?_c('a',{staticClass:\"button\",class:{ 'single-alt-login-option': _vm.countAlternativeLogins },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\\t\\t\")]):_vm._e()]):_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\\t\")])]:_vm._e()],2):(!_vm.loading && _vm.passwordlessLogin)?_c('div',{key:\"reset\",staticClass:\"login-additional login-passwordless\"},[_c('PasswordLessLoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"auto-complete-allowed\":_vm.autoCompleteAllowed,\"is-https\":_vm.isHttps,\"is-localhost\":_vm.isLocalhost,\"has-public-key-credential\":_vm.hasPublicKeyCredential},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('core', 'Back to login form'),\"wide\":true},on:{\"click\":function($event){_vm.passwordlessLogin = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back'))+\"\\n\\t\\t\\t\\t\")])],1):(!_vm.loading && _vm.canResetPassword)?_c('div',{key:\"reset\",staticClass:\"login-additional\"},[_c('div',{staticClass:\"lost-password-container\"},[(_vm.resetPassword)?_c('ResetPassword',{attrs:{\"username\":_vm.user,\"reset-password-link\":_vm.resetPasswordLink},on:{\"update:username\":function($event){_vm.user=$event},\"abort\":function($event){_vm.resetPassword = false}}}):_vm._e()],1)]):(_vm.resetPasswordTarget !== '')?_c('div',[_c('UpdatePassword',{attrs:{\"username\":_vm.user,\"reset-password-target\":_vm.resetPasswordTarget},on:{\"update:username\":function($event){_vm.user=$event},\"done\":_vm.passwordResetFinished}})],1):_vm._e()])]:[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('NcNoteCard',{attrs:{\"type\":\"warning\",\"title\":_vm.t('core', 'Login form is disabled.')}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\\t\")])],1)],_vm._v(\" \"),_c('div',{staticClass:\"alternative-logins\",attrs:{\"id\":\"alternative-logins\"}},_vm._l((_vm.alternativeLogins),function(alternativeLogin,index){return _c('NcButton',{key:index,class:[alternativeLogin.class],attrs:{\"type\":\"secondary\",\"wide\":true,\"role\":\"link\",\"href\":alternativeLogin.href}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(alternativeLogin.name)+\"\\n\\t\\t\")])}),1)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","const token = '%[a-f0-9]{2}';\nconst singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nconst multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tconst left = components.slice(0, split);\n\tconst right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch {\n\t\tlet tokens = input.match(singleMatcher) || [];\n\n\t\tfor (let i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tconst replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD',\n\t};\n\n\tlet match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch {\n\t\t\tconst result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tconst entries = Object.keys(replaceMap);\n\n\tfor (const key of entries) {\n\t\t// Replace all decoded components\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nexport default function decodeUriComponent(encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n}\n","export default function splitOnFirst(string, separator) {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (string === '' || separator === '') {\n\t\treturn [];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n}\n","export function includeKeys(object, predicate) {\n\tconst result = {};\n\n\tif (Array.isArray(predicate)) {\n\t\tfor (const key of predicate) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor?.enumerable) {\n\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// `Reflect.ownKeys()` is required to retrieve symbol properties\n\t\tfor (const key of Reflect.ownKeys(object)) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor.enumerable) {\n\t\t\t\tconst value = object[key];\n\t\t\t\tif (predicate(key, value, object)) {\n\t\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function excludeKeys(object, predicate) {\n\tif (Array.isArray(predicate)) {\n\t\tconst set = new Set(predicate);\n\t\treturn includeKeys(object, key => !set.has(key));\n\t}\n\n\treturn includeKeys(object, (key, value, object) => !predicate(key, value, object));\n}\n","import decodeComponent from 'decode-uri-component';\nimport splitOnFirst from 'split-on-first';\nimport {includeKeys} from 'filter-obj';\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\n// eslint-disable-next-line unicorn/prefer-code-point\nconst strictUriEncode = string => encodeURIComponent(string).replaceAll(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result, [encode(key, options), '[', index, ']'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), '[]'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[]=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), ':list='].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), ':list=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSeparator = options.arrayFormat === 'bracket-separator'\n\t\t\t\t? '[]='\n\t\t\t\t: '=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSeparator, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\tencode(key, options),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : (value === null ? value : decode(value, options));\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null\n\t\t\t\t\t? []\n\t\t\t\t\t: value.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], ...arrayValue];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...[accumulator[key]].flat(), value];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nexport function extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nexport function parse(query, options) {\n\toptions = {\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false,\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst returnValue = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn returnValue;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn returnValue;\n\t}\n\n\tfor (const parameter of query.split('&')) {\n\t\tif (parameter === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parameter_ = options.decode ? parameter.replaceAll('+', ' ') : parameter;\n\n\t\tlet [key, value] = splitOnFirst(parameter_, '=');\n\n\t\tif (key === undefined) {\n\t\t\tkey = parameter_;\n\t\t}\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : (['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options));\n\t\tformatter(decode(key, options), value, returnValue);\n\t}\n\n\tfor (const [key, value] of Object.entries(returnValue)) {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const [key2, value2] of Object.entries(value)) {\n\t\t\t\tvalue[key2] = parseValue(value2, options);\n\t\t\t}\n\t\t} else {\n\t\t\treturnValue[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn returnValue;\n\t}\n\n\t// TODO: Remove the use of `reduce`.\n\t// eslint-disable-next-line unicorn/no-array-reduce\n\treturn (options.sort === true ? Object.keys(returnValue).sort() : Object.keys(returnValue).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = returnValue[key];\n\t\tresult[key] = Boolean(value) && typeof value === 'object' && !Array.isArray(value) ? keysSorter(value) : value;\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexport function stringify(object, options) {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key]))\n\t\t|| (options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const [key, value] of Object.entries(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = value;\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n}\n\nexport function parseUrl(url, options) {\n\toptions = {\n\t\tdecode: true,\n\t\t...options,\n\t};\n\n\tlet [url_, hash] = splitOnFirst(url, '#');\n\n\tif (url_ === undefined) {\n\t\turl_ = url;\n\t}\n\n\treturn {\n\t\turl: url_?.split('?')?.[0] ?? '',\n\t\tquery: parse(extract(url), options),\n\t\t...(options && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}),\n\t};\n}\n\nexport function stringifyUrl(object, options) {\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true,\n\t\t...options,\n\t};\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = extract(object.url);\n\n\tconst query = {\n\t\t...parse(queryFromUrl, {sort: false}),\n\t\t...object.query,\n\t};\n\n\tlet queryString = stringify(query, options);\n\tqueryString &&= `?${queryString}`;\n\n\tlet hash = getHash(object.url);\n\tif (typeof object.fragmentIdentifier === 'string') {\n\t\tconst urlObjectForFragmentEncode = new URL(url);\n\t\turlObjectForFragmentEncode.hash = object.fragmentIdentifier;\n\t\thash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n}\n\nexport function pick(input, filter, options) {\n\toptions = {\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false,\n\t\t...options,\n\t};\n\n\tconst {url, query, fragmentIdentifier} = parseUrl(input, options);\n\n\treturn stringifyUrl({\n\t\turl,\n\t\tquery: includeKeys(query, filter),\n\t\tfragmentIdentifier,\n\t}, options);\n}\n\nexport function exclude(input, filter, options) {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn pick(input, exclusionFilter, options);\n}\n","import * as queryString from './base.js';\n\nexport default queryString;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{ref:\"loginForm\",staticClass:\"login-form\",attrs:{\"method\":\"post\",\"name\":\"login\",\"action\":_vm.loginActionUrl},on:{\"submit\":_vm.submit}},[_c('fieldset',{staticClass:\"login-form__fieldset\",attrs:{\"data-login-form\":\"\"}},[(_vm.apacheAuthFailed)?_c('NcNoteCard',{attrs:{\"title\":_vm.t('core', 'Server side authentication failed!'),\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.csrfCheckFailed)?_c('NcNoteCard',{attrs:{\"heading\":_vm.t('core', 'Temporary error'),\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please try again.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.messages.length > 0)?_c('NcNoteCard',_vm._l((_vm.messages),function(message,index){return _c('div',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(message)),_c('br')])}),0):_vm._e(),_vm._v(\" \"),(_vm.internalException)?_c('NcNoteCard',{class:_vm.t('core', 'An internal error occurred.'),attrs:{\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please try again or contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"hidden\",attrs:{\"id\":\"message\"}},[_c('img',{staticClass:\"float-spinner\",attrs:{\"alt\":\"\",\"src\":_vm.loadingIcon}}),_vm._v(\" \"),_c('span',{attrs:{\"id\":\"messageText\"}}),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})]),_vm._v(\" \"),_c('h2',{staticClass:\"login-form__headline\",attrs:{\"data-login-form-headline\":\"\"},domProps:{\"innerHTML\":_vm._s(_vm.headline)}}),_vm._v(\" \"),_c('NcTextField',{ref:\"user\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"user\",\"label\":_vm.loginText,\"name\":\"user\",\"value\":_vm.user,\"autocapitalize\":\"none\",\"spellchecking\":false,\"autocomplete\":_vm.autoCompleteAllowed ? 'username' : 'off',\"required\":\"\",\"data-login-form-input-user\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('NcPasswordField',{ref:\"password\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"password\",\"name\":\"password\",\"value\":_vm.password,\"spellchecking\":false,\"autocapitalize\":\"none\",\"autocomplete\":_vm.autoCompleteAllowed ? 'current-password' : 'off',\"label\":_vm.t('core', 'Password'),\"helper-text\":_vm.errorLabel,\"error\":_vm.isError,\"data-login-form-input-password\":\"\",\"required\":\"\"},on:{\"update:value\":function($event){_vm.password=$event}}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"data-login-form-submit\":\"\",\"loading\":_vm.loading}}),_vm._v(\" \"),(_vm.redirectUrl)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"redirect_url\"},domProps:{\"value\":_vm.redirectUrl}}):_vm._e(),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone\"},domProps:{\"value\":_vm.timezone}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone_offset\"},domProps:{\"value\":_vm.timezoneOffset}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"requesttoken\"},domProps:{\"value\":_vm.OC.requestToken}}),_vm._v(\" \"),(_vm.directLogin)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"direct\",\"value\":\"1\"}}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<NcButton type=\"primary\"\n\t\tnative-type=\"submit\"\n\t\t:wide=\"true\"\n\t\t@click=\"$emit('click')\">\n\t\t{{ !loading ? value : valueLoading }}\n\t\t<template #icon>\n\t\t\t<div v-if=\"loading\" class=\"submit-wrapper__icon icon-loading-small-dark\" />\n\t\t\t<ArrowRight v-else class=\"submit-wrapper__icon\" />\n\t\t</template>\n\t</NcButton>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tname: 'LoginButton',\n\tcomponents: {\n\t\tArrowRight,\n\t\tNcButton,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Log in'),\n\t\t},\n\t\tvalueLoading: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Logging in …'),\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.button-vue {\n\tmargin-top: .5rem;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginButton.vue?vue&type=template&id=3fa8511b&scoped=true\"\nimport script from \"./LoginButton.vue?vue&type=script&lang=js\"\nexport * from \"./LoginButton.vue?vue&type=script&lang=js\"\nimport style0 from \"./LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3fa8511b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcButton',{attrs:{\"type\":\"primary\",\"native-type\":\"submit\",\"wide\":true},on:{\"click\":function($event){return _vm.$emit('click')}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('div',{staticClass:\"submit-wrapper__icon icon-loading-small-dark\"}):_c('ArrowRight',{staticClass:\"submit-wrapper__icon\"})]},proxy:true}])},[_vm._v(\"\\n\\t\"+_vm._s(!_vm.loading ? _vm.value : _vm.valueLoading)+\"\\n\\t\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<form ref=\"loginForm\"\n\t\tclass=\"login-form\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t:action=\"loginActionUrl\"\n\t\t@submit=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\" data-login-form>\n\t\t\t<NcNoteCard v-if=\"apacheAuthFailed\"\n\t\t\t\t:title=\"t('core', 'Server side authentication failed!')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"csrfCheckFailed\"\n\t\t\t\t:heading=\"t('core', 'Temporary error')\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Please try again.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"messages.length > 0\">\n\t\t\t\t<div v-for=\"(message, index) in messages\"\n\t\t\t\t\t:key=\"index\">\n\t\t\t\t\t{{ message }}<br>\n\t\t\t\t</div>\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"internalException\"\n\t\t\t\t:class=\"t('core', 'An internal error occurred.')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please try again or contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<div id=\"message\"\n\t\t\t\tclass=\"hidden\">\n\t\t\t\t<img class=\"float-spinner\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\t:src=\"loadingIcon\">\n\t\t\t\t<span id=\"messageText\" />\n\t\t\t\t<!-- the following div ensures that the spinner is always inside the #message div -->\n\t\t\t\t<div style=\"clear: both;\" />\n\t\t\t</div>\n\t\t\t<h2 class=\"login-form__headline\" data-login-form-headline v-html=\"headline\" />\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\tref=\"user\"\n\t\t\t\t:label=\"loginText\"\n\t\t\t\tname=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'username' : 'off'\"\n\t\t\t\trequired\n\t\t\t\tdata-login-form-input-user\n\t\t\t\t@change=\"updateUsername\" />\n\n\t\t\t<NcPasswordField id=\"password\"\n\t\t\t\tref=\"password\"\n\t\t\t\tname=\"password\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\t:value.sync=\"password\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'current-password' : 'off'\"\n\t\t\t\t:label=\"t('core', 'Password')\"\n\t\t\t\t:helper-text=\"errorLabel\"\n\t\t\t\t:error=\"isError\"\n\t\t\t\tdata-login-form-input-password\n\t\t\t\trequired />\n\n\t\t\t<LoginButton data-login-form-submit :loading=\"loading\" />\n\n\t\t\t<input v-if=\"redirectUrl\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"redirect_url\"\n\t\t\t\t:value=\"redirectUrl\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone\"\n\t\t\t\t:value=\"timezone\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone_offset\"\n\t\t\t\t:value=\"timezoneOffset\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"requesttoken\"\n\t\t\t\t:value=\"OC.requestToken\">\n\t\t\t<input v-if=\"directLogin\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"direct\"\n\t\t\t\tvalue=\"1\">\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport { generateUrl, imagePath } from '@nextcloud/router'\n\nimport NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'LoginForm',\n\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcPasswordField,\n\t\tNcTextField,\n\t\tNcNoteCard,\n\t},\n\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\terrors: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tmessages: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tthrottleDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tdirectLogin: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\temailStates: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn []\n\t\t\t}\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\ttimezone: (new Intl.DateTimeFormat())?.resolvedOptions()?.timeZone,\n\t\t\ttimezoneOffset: (-new Date().getTimezoneOffset() / 60),\n\t\t\theadline: t('core', 'Log in to {productName}', { productName: OC.theme.name }),\n\t\t\tuser: '',\n\t\t\tpassword: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisError() {\n\t\t\treturn this.invalidPassword || this.userDisabled\n\t\t\t\t|| this.throttleDelay > 5000\n\t\t},\n\t\terrorLabel() {\n\t\t\tif (this.invalidPassword) {\n\t\t\t\treturn t('core', 'Wrong login or password.')\n\t\t\t}\n\t\t\tif (this.userDisabled) {\n\t\t\t\treturn t('core', 'This account is disabled')\n\t\t\t}\n\t\t\tif (this.throttleDelay > 5000) {\n\t\t\t\treturn t('core', 'We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds.')\n\t\t\t}\n\t\t\treturn undefined\n\t\t},\n\t\tapacheAuthFailed() {\n\t\t\treturn this.errors.indexOf('apacheAuthFailed') !== -1\n\t\t},\n\t\tcsrfCheckFailed() {\n\t\t\treturn this.errors.indexOf('csrfCheckFailed') !== -1\n\t\t},\n\t\tinternalException() {\n\t\t\treturn this.errors.indexOf('internalexception') !== -1\n\t\t},\n\t\tinvalidPassword() {\n\t\t\treturn this.errors.indexOf('invalidpassword') !== -1\n\t\t},\n\t\tuserDisabled() {\n\t\t\treturn this.errors.indexOf('userdisabled') !== -1\n\t\t},\n\t\tloadingIcon() {\n\t\t\treturn imagePath('core', 'loading-dark.gif')\n\t\t},\n\t\tloginActionUrl() {\n\t\t\treturn generateUrl('login')\n\t\t},\n\t\temailEnabled() {\n\t\t\treturn this.emailStates ? this.emailStates.every((state) => state === '1') : 1\n\t\t},\n\t\tloginText() {\n\t\t\tif (this.emailEnabled) {\n\t\t\t\treturn t('core', 'Login with username or email')\n\t\t\t}\n\t\t\treturn t('core', 'Login with username')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (this.username === '') {\n\t\t\tthis.$refs.user.$refs.inputField.$refs.input.focus()\n\t\t} else {\n\t\t\tthis.user = this.username\n\t\t\tthis.$refs.password.$refs.inputField.$refs.input.focus()\n\t\t}\n\t},\n\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.$emit('submit')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t\toverflow-wrap: anywhere;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=8c18127a&scoped=true\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js\"\nexport * from \"./LoginForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8c18127a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return ((_vm.isHttps || _vm.isLocalhost) && _vm.hasPublicKeyCredential)?_c('form',{ref:\"loginForm\",attrs:{\"method\":\"post\",\"name\":\"login\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Log in with a device')))]),_vm._v(\" \"),_c('fieldset',[_c('NcTextField',{attrs:{\"required\":\"\",\"value\":_vm.user,\"autocomplete\":_vm.autoCompleteAllowed ? 'on' : 'off',\"error\":!_vm.validCredentials,\"label\":_vm.t('core', 'Login or email'),\"placeholder\":_vm.t('core', 'Login or email'),\"helper-text\":!_vm.validCredentials ? _vm.t('core', 'Your account is not setup for passwordless login.') : ''},on:{\"update:value\":_vm.changeUsername}}),_vm._v(\" \"),(_vm.validCredentials)?_c('LoginButton',{attrs:{\"loading\":_vm.loading},on:{\"click\":_vm.authenticate}}):_vm._e()],1)]):(!_vm.hasPublicKeyCredential)?_c('div',{staticClass:\"update\"},[_c('InformationIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Browser not supported')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is not supported in your browser.'))+\"\\n\\t\")])],1):(!_vm.isHttps && !_vm.isLocalhost)?_c('div',{staticClass:\"update\"},[_c('LockOpenIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Your connection is not secure')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is only available over a secure connection.'))+\"\\n\\t\")])],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon information-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"InformationIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Information.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Information.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Information.vue?vue&type=template&id=70e6f3ef\"\nimport script from \"./Information.vue?vue&type=script&lang=js\"\nexport * from \"./Information.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon information-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./LockOpen.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./LockOpen.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon lock-open-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LockOpenIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import { render, staticRenderFns } from \"./LockOpen.vue?vue&type=template&id=1b7ea4e7\"\nimport script from \"./LockOpen.vue?vue&type=script&lang=js\"\nexport * from \"./LockOpen.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon lock-open-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<form v-if=\"(isHttps || isLocalhost) && hasPublicKeyCredential\"\n\t\tref=\"loginForm\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t@submit.prevent=\"submit\">\n\t\t<h2>{{ t('core', 'Log in with a device') }}</h2>\n\t\t<fieldset>\n\t\t\t<NcTextField required\n\t\t\t\t:value=\"user\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'on' : 'off'\"\n\t\t\t\t:error=\"!validCredentials\"\n\t\t\t\t:label=\"t('core', 'Login or email')\"\n\t\t\t\t:placeholder=\"t('core', 'Login or email')\"\n\t\t\t\t:helper-text=\"!validCredentials ? t('core', 'Your account is not setup for passwordless login.') : ''\"\n\t\t\t\t@update:value=\"changeUsername\" />\n\n\t\t\t<LoginButton v-if=\"validCredentials\"\n\t\t\t\t:loading=\"loading\"\n\t\t\t\t@click=\"authenticate\" />\n\t\t</fieldset>\n\t</form>\n\t<div v-else-if=\"!hasPublicKeyCredential\" class=\"update\">\n\t\t<InformationIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Browser not supported') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is not supported in your browser.') }}\n\t\t</p>\n\t</div>\n\t<div v-else-if=\"!isHttps && !isLocalhost\" class=\"update\">\n\t\t<LockOpenIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Your connection is not secure') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is only available over a secure connection.') }}\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport {\n\tstartAuthentication,\n\tfinishAuthentication,\n} from '../../services/WebAuthnAuthenticationService.js'\nimport LoginButton from './LoginButton.vue'\nimport InformationIcon from 'vue-material-design-icons/Information.vue'\nimport LockOpenIcon from 'vue-material-design-icons/LockOpen.vue'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\n\nclass NoValidCredentials extends Error {\n\n}\n\nexport default {\n\tname: 'PasswordLessLoginForm',\n\tcomponents: {\n\t\tLoginButton,\n\t\tInformationIcon,\n\t\tLockOpenIcon,\n\t\tNcTextField,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisHttps: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisLocalhost: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thasPublicKeyCredential: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tuser: this.username,\n\t\t\tloading: false,\n\t\t\tvalidCredentials: true,\n\t\t}\n\t},\n\tmethods: {\n\t\tauthenticate() {\n\t\t\t// check required fields\n\t\t\tif (!this.$refs.loginForm.checkValidity()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconsole.debug('passwordless login initiated')\n\n\t\t\tthis.getAuthenticationData(this.user)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.then(this.sign)\n\t\t\t\t.then(this.completeAuthentication)\n\t\t\t\t.catch(error => {\n\t\t\t\t\tif (error instanceof NoValidCredentials) {\n\t\t\t\t\t\tthis.validCredentials = false\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconsole.debug(error)\n\t\t\t\t})\n\t\t},\n\t\tchangeUsername(username) {\n\t\t\tthis.user = username\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tgetAuthenticationData(uid) {\n\t\t\tconst base64urlDecode = function(input) {\n\t\t\t\t// Replace non-url compatible chars with base64 standard chars\n\t\t\t\tinput = input\n\t\t\t\t\t.replace(/-/g, '+')\n\t\t\t\t\t.replace(/_/g, '/')\n\n\t\t\t\t// Pad out with standard base64 required padding characters\n\t\t\t\tconst pad = input.length % 4\n\t\t\t\tif (pad) {\n\t\t\t\t\tif (pad === 1) {\n\t\t\t\t\t\tthrow new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding')\n\t\t\t\t\t}\n\t\t\t\t\tinput += new Array(5 - pad).join('=')\n\t\t\t\t}\n\n\t\t\t\treturn window.atob(input)\n\t\t\t}\n\n\t\t\treturn startAuthentication(uid)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug('Obtained PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\n\t\t\t\t\tif (!Object.prototype.hasOwnProperty.call(publicKey, 'allowCredentials')) {\n\t\t\t\t\t\tconsole.debug('No credentials found.')\n\t\t\t\t\t\tthrow new NoValidCredentials()\n\t\t\t\t\t}\n\n\t\t\t\t\tpublicKey.challenge = Uint8Array.from(base64urlDecode(publicKey.challenge), c => c.charCodeAt(0))\n\t\t\t\t\tpublicKey.allowCredentials = publicKey.allowCredentials.map(function(data) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\tid: Uint8Array.from(base64urlDecode(data.id), c => c.charCodeAt(0)),\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tconsole.debug('Converted PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('Error while obtaining data')\n\t\t\t\t\tthrow error\n\t\t\t\t})\n\t\t},\n\t\tsign(publicKey) {\n\t\t\tconst arrayToBase64String = function(a) {\n\t\t\t\treturn window.btoa(String.fromCharCode(...a))\n\t\t\t}\n\n\t\t\tconst arrayToString = function(a) {\n\t\t\t\treturn String.fromCharCode(...a)\n\t\t\t}\n\n\t\t\treturn navigator.credentials.get({ publicKey })\n\t\t\t\t.then(data => {\n\t\t\t\t\tconsole.debug(data)\n\t\t\t\t\tconsole.debug(new Uint8Array(data.rawId))\n\t\t\t\t\tconsole.debug(arrayToBase64String(new Uint8Array(data.rawId)))\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: data.id,\n\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\trawId: arrayToBase64String(new Uint8Array(data.rawId)),\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tauthenticatorData: arrayToBase64String(new Uint8Array(data.response.authenticatorData)),\n\t\t\t\t\t\t\tclientDataJSON: arrayToBase64String(new Uint8Array(data.response.clientDataJSON)),\n\t\t\t\t\t\t\tsignature: arrayToBase64String(new Uint8Array(data.response.signature)),\n\t\t\t\t\t\t\tuserHandle: data.response.userHandle ? arrayToString(new Uint8Array(data.response.userHandle)) : null,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(challenge => {\n\t\t\t\t\tconsole.debug(challenge)\n\t\t\t\t\treturn challenge\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tcompleteAuthentication(challenge) {\n\t\t\tconsole.debug('TIME TO COMPLETE')\n\n\t\t\tconst redirectUrl = this.redirectUrl\n\n\t\t\treturn finishAuthentication(JSON.stringify(challenge))\n\t\t\t\t.then(({ defaultRedirectUrl }) => {\n\t\t\t\t\tconsole.debug('Logged in redirecting')\n\t\t\t\t\t// Redirect url might be false so || should be used instead of ??.\n\t\t\t\t\twindow.location.href = redirectUrl || defaultRedirectUrl\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR WHILE SUBMITTING CHALLENGE!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tsubmit() {\n\t\t\t// noop\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\tfieldset {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 0.5rem;\n\n\t\t:deep(label) {\n\t\t\ttext-align: initial;\n\t\t}\n\t}\n\n\t.update {\n\t\tmargin: 0 auto;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=script&lang=js\"","/**\n * @copyright 2020, Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * @param {any} loginName -\n */\nexport function startAuthentication(loginName) {\n\tconst url = generateUrl('/login/webauthn/start')\n\n\treturn Axios.post(url, { loginName })\n\t\t.then(resp => resp.data)\n}\n\n/**\n * @param {any} data -\n */\nexport function finishAuthentication(data) {\n\tconst url = generateUrl('/login/webauthn/finish')\n\n\treturn Axios.post(url, { data })\n\t\t.then(resp => resp.data)\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PasswordLessLoginForm.vue?vue&type=template&id=1b2e37de&scoped=true\"\nimport script from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js\"\nexport * from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b2e37de\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{staticClass:\"login-form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',{staticClass:\"login-form__fieldset\"},[_c('NcTextField',{attrs:{\"id\":\"user\",\"value\":_vm.user,\"name\":\"user\",\"autocapitalize\":\"off\",\"label\":_vm.t('core', 'Login or email'),\"required\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"value\":_vm.t('core', 'Reset password')}}),_vm._v(\" \"),(_vm.message === 'send-success')?_c('NcNoteCard',{attrs:{\"type\":\"success\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or Login, check your spam/junk folders or ask your local administration for help.'))+\"\\n\\t\\t\")]):(_vm.message === 'send-error')?_c('NcNoteCard',{attrs:{\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Couldn\\'t send reset email. Please contact your administrator.'))+\"\\n\\t\\t\")]):(_vm.message === 'reset-error')?_c('NcNoteCard',{attrs:{\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Password cannot be changed. Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('a',{staticClass:\"login-form__link\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('abort')}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back to login'))+\"\\n\\t\\t\")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<form class=\"login-form\" @submit.prevent=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\">\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\tname=\"user\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t:label=\"t('core', 'Login or email')\"\n\t\t\t\trequired\n\t\t\t\t@change=\"updateUsername\" />\n\t\t\t<LoginButton :value=\"t('core', 'Reset password')\" />\n\n\t\t\t<NcNoteCard v-if=\"message === 'send-success'\"\n\t\t\t\ttype=\"success\">\n\t\t\t\t{{ t('core', 'If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or Login, check your spam/junk folders or ask your local administration for help.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'send-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'reset-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\n\t\t\t<a class=\"login-form__link\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent=\"$emit('abort')\">\n\t\t\t\t{{ t('core', 'Back to login') }}\n\t\t\t</a>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport LoginButton from './LoginButton.vue'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nexport default {\n\tname: 'ResetPassword',\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcNoteCard,\n\t\tNcTextField,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordLink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\t\t\tconst url = generateUrl('/lostpassword/email')\n\n\t\t\tconst data = {\n\t\t\t\tuser: this.user,\n\t\t\t}\n\n\t\t\treturn axios.post(url, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(data => {\n\t\t\t\t\tif (data.status !== 'success') {\n\t\t\t\t\t\tthrow new Error(`got status ${data.status}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tconsole.error('could not send reset email request', e)\n\n\t\t\t\t\tthis.error = true\n\t\t\t\t\tthis.message = 'send-error'\n\t\t\t\t})\n\t\t\t\t.then(() => { this.loading = false })\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ResetPassword.vue?vue&type=template&id=2507998a&scoped=true\"\nimport script from \"./ResetPassword.vue?vue&type=script&lang=js\"\nexport * from \"./ResetPassword.vue?vue&type=script&lang=js\"\nimport style0 from \"./ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2507998a\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for=\"password\" class=\"infield\">{{ t('core', 'New password') }}</label>\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder=\"t('core', 'New password')\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"encrypted\" class=\"update\">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\n\t\t\t\t</p>\n\t\t\t\t<input id=\"encrypted-continue\"\n\t\t\t\t\tv-model=\"proceed\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t<label for=\"encrypted-continue\">\n\t\t\t\t\t{{ t('core', 'I know what I\\'m doing') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\n\n\t\t\t<p v-if=\"error && message\" :class=\"{warning: error}\">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from '@nextcloud/axios'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === 'success') {\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t\tthis.$emit('update:username', this.user)\n\t\t\t\t\tthis.$emit('done')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdatePassword.vue?vue&type=template&id=b9d4933a&scoped=true\"\nimport script from \"./UpdatePassword.vue?vue&type=script&lang=js\"\nexport * from \"./UpdatePassword.vue?vue&type=script&lang=js\"\nimport style0 from \"./UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b9d4933a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',[_c('label',{staticClass:\"infield\",attrs:{\"for\":\"password\"}},[_vm._v(_vm._s(_vm.t('core', 'New password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"id\":\"password\",\"type\":\"password\",\"name\":\"password\",\"autocomplete\":\"new-password\",\"autocapitalize\":\"none\",\"spellcheck\":\"false\",\"required\":\"\",\"placeholder\":_vm.t('core', 'New password')},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing)return;_vm.password=$event.target.value}}})]),_vm._v(\" \"),(_vm.encrypted)?_c('div',{staticClass:\"update\"},[_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.proceed),expression:\"proceed\"}],staticClass:\"checkbox\",attrs:{\"id\":\"encrypted-continue\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.proceed)?_vm._i(_vm.proceed,null)>-1:(_vm.proceed)},on:{\"change\":function($event){var $$a=_vm.proceed,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.proceed=$$a.concat([$$v]))}else{$$i>-1&&(_vm.proceed=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.proceed=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"encrypted-continue\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'I know what I\\'m doing'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('LoginButton',{attrs:{\"loading\":_vm.loading,\"value\":_vm.t('core', 'Reset password'),\"value-loading\":_vm.t('core', 'Resetting password')}}),_vm._v(\" \"),(_vm.error && _vm.message)?_c('p',{class:{warning: _vm.error}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\\t\")]):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div class=\"guest-box login-box\">\n\t\t<template v-if=\"!hideLoginForm || directLogin\">\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\">\n\t\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t:email-states=\"emailStates\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a v-else\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\tclass=\"login-additional login-passwordless\">\n\t\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t\t\t:aria-label=\"t('core', 'Back to login form')\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\t@click=\"passwordlessLogin = false\">\n\t\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\t\tkey=\"reset\"\n\t\t\t\t\tclass=\"login-additional\">\n\t\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</template>\n\t\t<template v-else>\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<NcNoteCard type=\"warning\" :title=\"t('core', 'Login form is disabled.')\">\n\t\t\t\t\t{{ t('core', 'Please contact your administrator.') }}\n\t\t\t\t</NcNoteCard>\n\t\t\t</transition>\n\t\t</template>\n\n\t\t<div id=\"alternative-logins\" class=\"alternative-logins\">\n\t\t\t<NcButton v-for=\"(alternativeLogin, index) in alternativeLogins\"\n\t\t\t\t:key=\"index\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:wide=\"true\"\n\t\t\t\t:class=\"[alternativeLogin.class]\"\n\t\t\t\trole=\"link\"\n\t\t\t\t:href=\"alternativeLogin.href\">\n\t\t\t\t{{ alternativeLogin.name }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport queryString from 'query-string'\n\nimport LoginForm from '../components/login/LoginForm.vue'\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\nimport ResetPassword from '../components/login/ResetPassword.vue'\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nconst query = queryString.parse(location.search)\nif (query.clear === '1') {\n\ttry {\n\t\twindow.localStorage.clear()\n\t\twindow.sessionStorage.clear()\n\t\tconsole.debug('Browser storage cleared')\n\t} catch (e) {\n\t\tconsole.error('Could not clear browser storage', e)\n\t}\n}\n\nexport default {\n\tname: 'Login',\n\n\tcomponents: {\n\t\tLoginForm,\n\t\tPasswordLessLoginForm,\n\t\tResetPassword,\n\t\tUpdatePassword,\n\t\tNcButton,\n\t\tNcNoteCard,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tuser: loadState('core', 'loginUsername', ''),\n\t\t\tpasswordlessLogin: false,\n\t\t\tresetPassword: false,\n\n\t\t\t// Initial data\n\t\t\terrors: loadState('core', 'loginErrors', []),\n\t\t\tmessages: loadState('core', 'loginMessages', []),\n\t\t\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\n\t\t\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\n\t\t\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\n\t\t\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\n\t\t\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\n\t\t\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\n\t\t\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\n\t\t\tdirectLogin: query.direct === '1',\n\t\t\thasPasswordless: loadState('core', 'webauthn-available', false),\n\t\t\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\n\t\t\talternativeLogins: loadState('core', 'alternativeLogins', []),\n\t\t\tisHttps: window.location.protocol === 'https:',\n\t\t\tisLocalhost: window.location.hostname === 'localhost',\n\t\t\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\n\t\t\thideLoginForm: loadState('core', 'hideLoginForm', false),\n\t\t\temailStates: loadState('core', 'emailStates', []),\n\t\t}\n\t},\n\n\tmethods: {\n\t\tpasswordResetFinished() {\n\t\t\tthis.resetPasswordTarget = ''\n\t\t\tthis.directLogin = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\t// Same size as dashboard panels\n\twidth: 320px;\n\tbox-sizing: border-box;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\n\n.fade-enter-active, .fade-leave-active {\n\ttransition: opacity .3s;\n}\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\topacity: 0;\n}\n\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n\n.login-passwordless {\n\t.button-vue {\n\t\tmargin-top: 0.5rem;\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=c13eb420&prod&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=c13eb420&prod&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=c13eb420\"\nimport script from \"./Login.vue?vue&type=script&lang=js\"\nexport * from \"./Login.vue?vue&type=script&lang=js\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&id=c13eb420&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport L10n from '../OC/l10n.js'\nimport OC from '../OC/index.js'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tOC,\n\t\t}\n\t},\n\tmethods: {\n\t\tt: L10n.translate.bind(L10n),\n\t\tn: L10n.translatePlural.bind(L10n),\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index.js' // TODO: Not needed but L10n breaks if removed\nimport LoginView from './views/Login.vue'\nimport Nextcloud from './mixins/Nextcloud.js'\n\nVue.mixin(Nextcloud)\n\nconst View = Vue.extend(LoginView)\nnew View().$mount('#login')\n","// Backbone.js 1.6.0\n\n// (c) 2010-2024 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.6.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n\n // Just _.defaults would work fine, but the additional _.extends\n // is in there for historical reasons. See #3843.\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) {\n var prevId = this.id;\n this.id = this.get(this.idAttribute);\n this.trigger('changeId', this, prevId, options);\n }\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj, obj.idAttribute)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) {\n m.off('error', collection._forwardPristineError, collection);\n collection.add(m, callbackOpts);\n }\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n // In case of wait:true, our collection is not listening to any\n // of the model's events yet, so it will not forward the error\n // event. In this special case, we need to listen for it\n // separately and handle the event just once.\n // (The reason we don't need to do this for the sync event is\n // in the success handler above: we add the model first, which\n // causes the collection to listen, and then invoke the callback\n // that triggers the event.)\n if (wait) {\n model.once('error', this._forwardPristineError, this);\n }\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs, idAttribute) {\n return attrs[idAttribute || this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n\n var model;\n if (this.model.prototype) {\n model = new this.model(attrs, options);\n } else {\n // ES class methods didn't have prototype\n model = this.model(attrs, options);\n }\n\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n if (models.length > 0 && !options.silent) delete options.index;\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'changeId') {\n var prevId = this.modelId(model.previousAttributes(), model.idAttribute);\n var id = this.modelId(model.attributes, model.idAttribute);\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n this.trigger.apply(this, arguments);\n },\n\n // Internal callback method used in `create`. It serves as a\n // stand-in for the `_onModelEvent` method, which is not yet bound\n // during the `wait` period of the `create` call. We still want to\n // forward any `'error'` event at the end of the `wait` period,\n // hence a customized callback.\n _forwardPristineError: function(model, collection, options) {\n // Prevent double forward if the model was already in the\n // collection before the call to `create`.\n if (this.has(model)) return;\n this._onModelEvent('error', model, collection, options);\n }\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes, model.idAttribute);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._trailingSlash = this.options.trailingSlash;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) {\n if (!this.matchRoot()) return this.notfound();\n return false;\n }\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return this.notfound();\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n }) || this.notfound();\n },\n\n // When no route could be matched, this method is called internally to\n // trigger the `'notfound'` event. It returns `false` so that it can be used\n // in tail position.\n notfound: function() {\n this.trigger('notfound');\n return false;\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Strip trailing slash on the root unless _trailingSlash is true\n var rootPath = this.root;\n if (!this._trailingSlash && (fragment === '' || fragment.charAt(0) === '?')) {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n // Provide useful information when things go wrong. This method is not meant\n // to be used directly; it merely provides the necessary introspection for the\n // external `debugInfo` function.\n Backbone._debug = function() {\n return {root: root, _: _};\n };\n\n return Backbone;\n});\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.button-vue[data-v-3fa8511b]{margin-top:.5rem}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginButton.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,gBAAA\",\"sourcesContent\":[\"\\n.button-vue {\\n\\tmargin-top: .5rem;\\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, `.login-form[data-v-8c18127a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-8c18127a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-8c18127a]{text-align:center;overflow-wrap:anywhere}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__headline {\\n\\t\\ttext-align: center;\\n\\t\\toverflow-wrap: anywhere;\\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, `fieldset[data-v-1b2e37de]{display:flex;flex-direction:column;gap:.5rem}fieldset[data-v-1b2e37de] label{text-align:initial}.update[data-v-1b2e37de]{margin:0 auto}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/PasswordLessLoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,0BACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,gCACC,kBAAA,CAIF,yBACC,aAAA\",\"sourcesContent\":[\"\\nfieldset {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 0.5rem;\\n\\n\\t:deep(label) {\\n\\t\\ttext-align: initial;\\n\\t}\\n}\\n\\n.update {\\n\\tmargin: 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.login-form[data-v-2507998a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-2507998a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-2507998a]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/ResetPassword.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tfont-weight: normal !important;\\n\\t\\tpadding-bottom: 1rem;\\n\\t\\tcursor: pointer;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tpadding: .5rem 1rem 1rem 1rem;\\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, `body{font-size:var(--default-font-size)}.login-box{width:320px;box-sizing:border-box}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}.login-passwordless .button-vue{margin-top:.5rem}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Login.vue\"],\"names\":[],\"mappings\":\"AACA,KACC,kCAAA,CAGD,WAEC,WAAA,CACA,qBAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAIF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA,CAKD,gCACC,gBAAA\",\"sourcesContent\":[\"\\nbody {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\n.login-box {\\n\\t// Same size as dashboard panels\\n\\twidth: 320px;\\n\\tbox-sizing: border-box;\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tpadding: 1rem;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: normal !important;\\n\\t}\\n}\\n\\n.fade-enter-active, .fade-leave-active {\\n\\ttransition: opacity .3s;\\n}\\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\\n\\topacity: 0;\\n}\\n\\n.alternative-logins {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 0.75rem;\\n\\n\\t.button-vue {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n}\\n\\n.login-passwordless {\\n\\t.button-vue {\\n\\t\\tmargin-top: 0.5rem;\\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, `\nfieldset[data-v-b9d4933a] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-b9d4933a] {\n\tmargin-top: 20px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/UpdatePassword.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<form @submit.prevent=\\\"submit\\\">\\n\\t\\t<fieldset>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<label for=\\\"password\\\" class=\\\"infield\\\">{{ t('core', 'New password') }}</label>\\n\\t\\t\\t\\t<input id=\\\"password\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tspellcheck=\\\"false\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('core', 'New password')\\\">\\n\\t\\t\\t</p>\\n\\n\\t\\t\\t<div v-if=\\\"encrypted\\\" class=\\\"update\\\">\\n\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\\n\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t<input id=\\\"encrypted-continue\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"proceed\\\"\\n\\t\\t\\t\\t\\ttype=\\\"checkbox\\\"\\n\\t\\t\\t\\t\\tclass=\\\"checkbox\\\">\\n\\t\\t\\t\\t<label for=\\\"encrypted-continue\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'I know what I\\\\'m doing') }}\\n\\t\\t\\t\\t</label>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<LoginButton :loading=\\\"loading\\\"\\n\\t\\t\\t\\t:value=\\\"t('core', 'Reset password')\\\"\\n\\t\\t\\t\\t:value-loading=\\\"t('core', 'Resetting password')\\\" />\\n\\n\\t\\t\\t<p v-if=\\\"error && message\\\" :class=\\\"{warning: error}\\\">\\n\\t\\t\\t\\t{{ message }}\\n\\t\\t\\t</p>\\n\\t\\t</fieldset>\\n\\t</form>\\n</template>\\n\\n<script>\\nimport Axios from '@nextcloud/axios'\\nimport LoginButton from './LoginButton.vue'\\n\\nexport default {\\n\\tname: 'UpdatePassword',\\n\\tcomponents: {\\n\\t\\tLoginButton,\\n\\t},\\n\\tprops: {\\n\\t\\tusername: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tresetPasswordTarget: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\terror: false,\\n\\t\\t\\tloading: false,\\n\\t\\t\\tmessage: undefined,\\n\\t\\t\\tuser: this.username,\\n\\t\\t\\tpassword: '',\\n\\t\\t\\tencrypted: false,\\n\\t\\t\\tproceed: false,\\n\\t\\t}\\n\\t},\\n\\twatch: {\\n\\t\\tusername(value) {\\n\\t\\t\\tthis.user = value\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tasync submit() {\\n\\t\\t\\tthis.loading = true\\n\\t\\t\\tthis.error = false\\n\\t\\t\\tthis.message = ''\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst { data } = await Axios.post(this.resetPasswordTarget, {\\n\\t\\t\\t\\t\\tpassword: this.password,\\n\\t\\t\\t\\t\\tproceed: this.proceed,\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tif (data && data.status === 'success') {\\n\\t\\t\\t\\t\\tthis.message = 'send-success'\\n\\t\\t\\t\\t\\tthis.$emit('update:username', this.user)\\n\\t\\t\\t\\t\\tthis.$emit('done')\\n\\t\\t\\t\\t} else if (data && data.encryption) {\\n\\t\\t\\t\\t\\tthis.encrypted = true\\n\\t\\t\\t\\t} else if (data && data.msg) {\\n\\t\\t\\t\\t\\tthrow new Error(data.msg)\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tthrow new Error()\\n\\t\\t\\t\\t}\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tthis.error = true\\n\\t\\t\\t\\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\tthis.loading = false\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\tfieldset {\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\tinput[type=submit] {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/*\n * vim: expandtab shiftwidth=4 softtabstop=4\n */\n\n/* global dav */\nif (typeof dav === 'undefined') { dav = {}; };\n\ndav._XML_CHAR_MAP = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": '''\n};\n\ndav._escapeXml = function(s) {\n return s.replace(/[<>&\"']/g, function (ch) {\n return dav._XML_CHAR_MAP[ch];\n });\n};\n\ndav.Client = function(options) {\n var i;\n for(i in options) {\n this[i] = options[i];\n }\n\n};\n\ndav.Client.prototype = {\n\n baseUrl : null,\n\n userName : null,\n\n password : null,\n\n\n xmlNamespaces : {\n 'DAV:' : 'd'\n },\n\n /**\n * Generates a propFind request.\n *\n * @param {string} url Url to do the propfind request on\n * @param {Array} properties List of properties to retrieve.\n * @param {string} depth \"0\", \"1\" or \"infinity\"\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propFind : function(url, properties, depth, headers) {\n\n if(typeof depth === \"undefined\") {\n depth = '0';\n }\n\n // depth header must be a string, in case a number was passed in\n depth = '' + depth;\n\n headers = headers || {};\n\n headers['Depth'] = depth;\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propfind ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(properties[ii]);\n if (this.xmlNamespaces[property.namespace]) {\n body+=' <' + this.xmlNamespaces[property.namespace] + ':' + property.name + ' />\\n';\n } else {\n body+=' <x:' + property.name + ' xmlns:x=\"' + property.namespace + '\" />\\n';\n }\n\n }\n body+=' </d:prop>\\n';\n body+='</d:propfind>';\n\n return this.request('PROPFIND', url, headers, body).then(\n function(result) {\n\n if (depth === '0') {\n return {\n status: result.status,\n body: result.body[0],\n xhr: result.xhr\n };\n } else {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }\n\n }.bind(this)\n );\n\n },\n\n /**\n * Renders a \"d:set\" block for the given properties.\n *\n * @param {Object.<String,String>} properties\n * @return {String} XML \"<d:set>\" block\n */\n _renderPropSet: function(properties) {\n var body = ' <d:set>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(ii);\n var propName;\n var propValue = properties[ii];\n if (this.xmlNamespaces[property.namespace]) {\n propName = this.xmlNamespaces[property.namespace] + ':' + property.name;\n } else {\n propName = 'x:' + property.name + ' xmlns:x=\"' + property.namespace + '\"';\n }\n\n // FIXME: hard-coded for now until we allow properties to\n // specify whether to be escaped or not\n if (propName !== 'd:resourcetype') {\n propValue = dav._escapeXml(propValue);\n }\n body += ' <' + propName + '>' + propValue + '</' + propName + '>\\n';\n }\n body +=' </d:prop>\\n';\n body +=' </d:set>\\n';\n return body;\n },\n\n /**\n * Generates a propPatch request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} properties List of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propPatch : function(url, properties, headers) {\n headers = headers || {};\n\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propertyupdate ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body += '</d:propertyupdate>';\n\n return this.request('PROPPATCH', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Generates a MKCOL request.\n * If attributes are given, it will use an extended MKCOL request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} [properties] list of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n mkcol : function(url, properties, headers) {\n var body = '';\n headers = headers || {};\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n if (properties) {\n body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:mkcol';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body +='</d:mkcol>';\n }\n\n return this.request('MKCOL', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Performs a HTTP request, and returns a Promise\n *\n * @param {string} method HTTP method\n * @param {string} url Relative or absolute url\n * @param {Object} headers HTTP headers as an object.\n * @param {string} body HTTP request body.\n * @param {string} responseType HTTP request response type.\n * @param {Object} options\n * @param {Function} options.onProgress progress callback\n * @return {Promise}\n */\n request : function(method, url, headers, body, responseType, options) {\n\n var self = this;\n var xhr = this.xhrProvider();\n headers = headers || {};\n responseType = responseType || \"\";\n \n if (this.userName) {\n headers['Authorization'] = 'Basic ' + btoa(this.userName + ':' + this.password);\n // xhr.open(method, this.resolveUrl(url), true, this.userName, this.password);\n }\n xhr.open(method, this.resolveUrl(url), true);\n var ii;\n for(ii in headers) {\n xhr.setRequestHeader(ii, headers[ii]);\n }\n xhr.responseType = responseType;\n\n if (options && typeof(options.onProgress) === 'function') {\n if (method === 'PUT' || method === 'POST') {\n xhr.upload.addEventListener('progress', function (e) {\n options.onProgress(e)\n }, false)\n }\n else {\n xhr.addEventListener('progress', function (e) {\n options.onProgress(e)\n }, false)\n }\n }\n\n // Work around for edge\n if (body === undefined) {\n xhr.send();\n } else {\n xhr.send(body);\n }\n\n return new Promise(function(fulfill, reject) {\n\n xhr.onreadystatechange = function() {\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n var resultBody = xhr.response;\n if (xhr.status === 207) {\n resultBody = self.parseMultiStatus(xhr.response);\n }\n\n fulfill({\n body: resultBody,\n status: xhr.status,\n xhr: xhr\n });\n\n };\n\n xhr.ontimeout = function() {\n\n reject(new Error('Timeout exceeded'));\n\n };\n\n });\n\n },\n\n /**\n * Returns an XMLHttpRequest object.\n *\n * This is in its own method, so it can be easily overridden.\n *\n * @return {XMLHttpRequest}\n */\n xhrProvider : function() {\n\n return new XMLHttpRequest();\n\n },\n\n /**\n * Parses a property node.\n *\n * Either returns a string if the node only contains text, or returns an\n * array of non-text subnodes.\n *\n * @param {Object} propNode node to parse\n * @return {string|Array} text content as string or array of subnodes, excluding text nodes\n */\n _parsePropNode: function(propNode) {\n var content = null;\n if (propNode.childNodes && propNode.childNodes.length > 0) {\n var subNodes = [];\n // filter out text nodes\n for (var j = 0; j < propNode.childNodes.length; j++) {\n var node = propNode.childNodes[j];\n if (node.nodeType === 1) {\n subNodes.push(node);\n }\n }\n if (subNodes.length) {\n content = subNodes;\n }\n }\n\n return content || propNode.textContent || propNode.text || '';\n },\n\n /**\n * Parses a multi-status response body.\n *\n * @param {string} xmlBody\n * @param {Array}\n */\n parseMultiStatus : function(xmlBody) {\n\n var parser = new DOMParser();\n var doc = parser.parseFromString(xmlBody, \"application/xml\");\n\n var resolver = function(foo) {\n var ii;\n for(ii in this.xmlNamespaces) {\n if (this.xmlNamespaces[ii] === foo) {\n return ii;\n }\n }\n }.bind(this);\n\n var responseIterator = doc.evaluate('/d:multistatus/d:response', doc, resolver, XPathResult.ANY_TYPE, null);\n\n var result = [];\n var responseNode = responseIterator.iterateNext();\n\n while(responseNode) {\n\n var response = {\n href : null,\n propStat : []\n };\n\n response.href = doc.evaluate('string(d:href)', responseNode, resolver, XPathResult.ANY_TYPE, null).stringValue;\n\n var propStatIterator = doc.evaluate('d:propstat', responseNode, resolver, XPathResult.ANY_TYPE, null);\n var propStatNode = propStatIterator.iterateNext();\n\n while(propStatNode) {\n var propStat = {\n status : doc.evaluate('string(d:status)', propStatNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n properties : {},\n };\n\n var propIterator = doc.evaluate('d:prop/*', propStatNode, resolver, XPathResult.ANY_TYPE, null);\n\n var propNode = propIterator.iterateNext();\n while(propNode) {\n var content = this._parsePropNode(propNode);\n propStat.properties['{' + propNode.namespaceURI + '}' + propNode.localName] = content;\n propNode = propIterator.iterateNext();\n\n }\n response.propStat.push(propStat);\n propStatNode = propStatIterator.iterateNext();\n\n\n }\n\n result.push(response);\n responseNode = responseIterator.iterateNext();\n\n }\n\n return result;\n\n },\n\n /**\n * Takes a relative url, and maps it to an absolute url, using the baseUrl\n *\n * @param {string} url\n * @return {string}\n */\n resolveUrl : function(url) {\n\n // Note: this is rudamentary.. not sure yet if it handles every case.\n if (/^https?:\\/\\//i.test(url)) {\n // absolute\n return url;\n }\n\n var baseParts = this.parseUrl(this.baseUrl);\n if (url.charAt('/')) {\n // Url starts with a slash\n return baseParts.root + url;\n }\n\n // Url does not start with a slash, we need grab the base url right up until the last slash.\n var newUrl = baseParts.root + '/';\n if (baseParts.path.lastIndexOf('/')!==-1) {\n newUrl = newUrl = baseParts.path.subString(0, baseParts.path.lastIndexOf('/')) + '/';\n }\n newUrl+=url;\n return url;\n\n },\n\n /**\n * Parses a url and returns its individual components.\n *\n * @param {String} url\n * @return {Object}\n */\n parseUrl : function(url) {\n\n var parts = url.match(/^(?:([A-Za-z]+):)?(\\/{0,3})([0-9.\\-A-Za-z]+)(?::(\\d+))?(?:\\/([^?#]*))?(?:\\?([^#]*))?(?:#(.*))?$/);\n var result = {\n url : parts[0],\n scheme : parts[1],\n host : parts[3],\n port : parts[4],\n path : parts[5],\n query : parts[6],\n fragment : parts[7],\n };\n result.root =\n result.scheme + '://' +\n result.host +\n (result.port ? ':' + result.port : '');\n\n return result;\n\n },\n\n parseClarkNotation : function(propertyName) {\n\n var result = propertyName.match(/^{([^}]+)}(.*)$/);\n if (!result) {\n return;\n }\n\n return {\n name : result[2],\n namespace : result[1]\n };\n\n }\n\n};\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports.Client = dav.Client;\n}\n","var map = {\n\t\"./af\": 25177,\n\t\"./af.js\": 25177,\n\t\"./ar\": 61509,\n\t\"./ar-dz\": 41488,\n\t\"./ar-dz.js\": 41488,\n\t\"./ar-kw\": 58676,\n\t\"./ar-kw.js\": 58676,\n\t\"./ar-ly\": 42353,\n\t\"./ar-ly.js\": 42353,\n\t\"./ar-ma\": 24496,\n\t\"./ar-ma.js\": 24496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 60301,\n\t\"./ar-sa.js\": 60301,\n\t\"./ar-tn\": 89756,\n\t\"./ar-tn.js\": 89756,\n\t\"./ar.js\": 61509,\n\t\"./az\": 95533,\n\t\"./az.js\": 95533,\n\t\"./be\": 28959,\n\t\"./be.js\": 28959,\n\t\"./bg\": 47777,\n\t\"./bg.js\": 47777,\n\t\"./bm\": 54903,\n\t\"./bm.js\": 54903,\n\t\"./bn\": 61290,\n\t\"./bn-bd\": 17357,\n\t\"./bn-bd.js\": 17357,\n\t\"./bn.js\": 61290,\n\t\"./bo\": 31545,\n\t\"./bo.js\": 31545,\n\t\"./br\": 11470,\n\t\"./br.js\": 11470,\n\t\"./bs\": 44429,\n\t\"./bs.js\": 44429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 56464,\n\t\"./cs.js\": 56464,\n\t\"./cv\": 73635,\n\t\"./cv.js\": 73635,\n\t\"./cy\": 64226,\n\t\"./cy.js\": 64226,\n\t\"./da\": 93601,\n\t\"./da.js\": 93601,\n\t\"./de\": 77853,\n\t\"./de-at\": 26111,\n\t\"./de-at.js\": 26111,\n\t\"./de-ch\": 54697,\n\t\"./de-ch.js\": 54697,\n\t\"./de.js\": 77853,\n\t\"./dv\": 60708,\n\t\"./dv.js\": 60708,\n\t\"./el\": 54691,\n\t\"./el.js\": 54691,\n\t\"./en-au\": 53872,\n\t\"./en-au.js\": 53872,\n\t\"./en-ca\": 28298,\n\t\"./en-ca.js\": 28298,\n\t\"./en-gb\": 56195,\n\t\"./en-gb.js\": 56195,\n\t\"./en-ie\": 66584,\n\t\"./en-ie.js\": 66584,\n\t\"./en-il\": 65543,\n\t\"./en-il.js\": 65543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 79402,\n\t\"./en-nz.js\": 79402,\n\t\"./en-sg\": 43004,\n\t\"./en-sg.js\": 43004,\n\t\"./eo\": 32934,\n\t\"./eo.js\": 32934,\n\t\"./es\": 97650,\n\t\"./es-do\": 20838,\n\t\"./es-do.js\": 20838,\n\t\"./es-mx\": 17730,\n\t\"./es-mx.js\": 17730,\n\t\"./es-us\": 56575,\n\t\"./es-us.js\": 56575,\n\t\"./es.js\": 97650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 90527,\n\t\"./fi.js\": 90527,\n\t\"./fil\": 95995,\n\t\"./fil.js\": 95995,\n\t\"./fo\": 52477,\n\t\"./fo.js\": 52477,\n\t\"./fr\": 85498,\n\t\"./fr-ca\": 26435,\n\t\"./fr-ca.js\": 26435,\n\t\"./fr-ch\": 37892,\n\t\"./fr-ch.js\": 37892,\n\t\"./fr.js\": 85498,\n\t\"./fy\": 37071,\n\t\"./fy.js\": 37071,\n\t\"./ga\": 41734,\n\t\"./ga.js\": 41734,\n\t\"./gd\": 70217,\n\t\"./gd.js\": 70217,\n\t\"./gl\": 77329,\n\t\"./gl.js\": 77329,\n\t\"./gom-deva\": 32124,\n\t\"./gom-deva.js\": 32124,\n\t\"./gom-latn\": 93383,\n\t\"./gom-latn.js\": 93383,\n\t\"./gu\": 95050,\n\t\"./gu.js\": 95050,\n\t\"./he\": 11713,\n\t\"./he.js\": 11713,\n\t\"./hi\": 43861,\n\t\"./hi.js\": 43861,\n\t\"./hr\": 26308,\n\t\"./hr.js\": 26308,\n\t\"./hu\": 90609,\n\t\"./hu.js\": 90609,\n\t\"./hy-am\": 17160,\n\t\"./hy-am.js\": 17160,\n\t\"./id\": 74063,\n\t\"./id.js\": 74063,\n\t\"./is\": 89374,\n\t\"./is.js\": 89374,\n\t\"./it\": 88383,\n\t\"./it-ch\": 21827,\n\t\"./it-ch.js\": 21827,\n\t\"./it.js\": 88383,\n\t\"./ja\": 23827,\n\t\"./ja.js\": 23827,\n\t\"./jv\": 89722,\n\t\"./jv.js\": 89722,\n\t\"./ka\": 41794,\n\t\"./ka.js\": 41794,\n\t\"./kk\": 27088,\n\t\"./kk.js\": 27088,\n\t\"./km\": 96870,\n\t\"./km.js\": 96870,\n\t\"./kn\": 84451,\n\t\"./kn.js\": 84451,\n\t\"./ko\": 63164,\n\t\"./ko.js\": 63164,\n\t\"./ku\": 98174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 98174,\n\t\"./ky\": 78474,\n\t\"./ky.js\": 78474,\n\t\"./lb\": 79680,\n\t\"./lb.js\": 79680,\n\t\"./lo\": 15867,\n\t\"./lo.js\": 15867,\n\t\"./lt\": 45766,\n\t\"./lt.js\": 45766,\n\t\"./lv\": 69532,\n\t\"./lv.js\": 69532,\n\t\"./me\": 58076,\n\t\"./me.js\": 58076,\n\t\"./mi\": 41848,\n\t\"./mi.js\": 41848,\n\t\"./mk\": 30306,\n\t\"./mk.js\": 30306,\n\t\"./ml\": 73739,\n\t\"./ml.js\": 73739,\n\t\"./mn\": 99053,\n\t\"./mn.js\": 99053,\n\t\"./mr\": 86169,\n\t\"./mr.js\": 86169,\n\t\"./ms\": 73386,\n\t\"./ms-my\": 92297,\n\t\"./ms-my.js\": 92297,\n\t\"./ms.js\": 73386,\n\t\"./mt\": 77075,\n\t\"./mt.js\": 77075,\n\t\"./my\": 72264,\n\t\"./my.js\": 72264,\n\t\"./nb\": 22274,\n\t\"./nb.js\": 22274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 92572,\n\t\"./nl-be\": 43784,\n\t\"./nl-be.js\": 43784,\n\t\"./nl.js\": 92572,\n\t\"./nn\": 54566,\n\t\"./nn.js\": 54566,\n\t\"./oc-lnc\": 69330,\n\t\"./oc-lnc.js\": 69330,\n\t\"./pa-in\": 29849,\n\t\"./pa-in.js\": 29849,\n\t\"./pl\": 94418,\n\t\"./pl.js\": 94418,\n\t\"./pt\": 79834,\n\t\"./pt-br\": 48303,\n\t\"./pt-br.js\": 48303,\n\t\"./pt.js\": 79834,\n\t\"./ro\": 24457,\n\t\"./ro.js\": 24457,\n\t\"./ru\": 82271,\n\t\"./ru.js\": 82271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 33478,\n\t\"./se.js\": 33478,\n\t\"./si\": 17538,\n\t\"./si.js\": 17538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 46637,\n\t\"./sl.js\": 46637,\n\t\"./sq\": 86794,\n\t\"./sq.js\": 86794,\n\t\"./sr\": 45719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 45719,\n\t\"./ss\": 56000,\n\t\"./ss.js\": 56000,\n\t\"./sv\": 41011,\n\t\"./sv.js\": 41011,\n\t\"./sw\": 40748,\n\t\"./sw.js\": 40748,\n\t\"./ta\": 11025,\n\t\"./ta.js\": 11025,\n\t\"./te\": 11885,\n\t\"./te.js\": 11885,\n\t\"./tet\": 28861,\n\t\"./tet.js\": 28861,\n\t\"./tg\": 86571,\n\t\"./tg.js\": 86571,\n\t\"./th\": 55802,\n\t\"./th.js\": 55802,\n\t\"./tk\": 59527,\n\t\"./tk.js\": 59527,\n\t\"./tl-ph\": 29231,\n\t\"./tl-ph.js\": 29231,\n\t\"./tlh\": 31052,\n\t\"./tlh.js\": 31052,\n\t\"./tr\": 85096,\n\t\"./tr.js\": 85096,\n\t\"./tzl\": 79846,\n\t\"./tzl.js\": 79846,\n\t\"./tzm\": 81765,\n\t\"./tzm-latn\": 97711,\n\t\"./tzm-latn.js\": 97711,\n\t\"./tzm.js\": 81765,\n\t\"./ug-cn\": 48414,\n\t\"./ug-cn.js\": 48414,\n\t\"./uk\": 16618,\n\t\"./uk.js\": 16618,\n\t\"./ur\": 57777,\n\t\"./ur.js\": 57777,\n\t\"./uz\": 57609,\n\t\"./uz-latn\": 72475,\n\t\"./uz-latn.js\": 72475,\n\t\"./uz.js\": 57609,\n\t\"./vi\": 21135,\n\t\"./vi.js\": 21135,\n\t\"./x-pseudo\": 64051,\n\t\"./x-pseudo.js\": 64051,\n\t\"./yo\": 82218,\n\t\"./yo.js\": 82218,\n\t\"./zh-cn\": 52648,\n\t\"./zh-cn.js\": 52648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 31541,\n\t\"./zh-mo.js\": 31541,\n\t\"./zh-tw\": 50304,\n\t\"./zh-tw.js\": 50304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35358;","import { getCurrentUser as A, onRequestTokenUpdate as ue, getRequestToken as de } from \"@nextcloud/auth\";\nimport { getLoggerBuilder as q } from \"@nextcloud/logger\";\nimport { getCanonicalLocale as ae } from \"@nextcloud/l10n\";\nimport { join as le, basename as fe, extname as ce, dirname as I } from \"path\";\nimport { encodePath as he } from \"@nextcloud/paths\";\nimport { generateRemoteUrl as pe } from \"@nextcloud/router\";\nimport { createClient as ge, getPatcher as we } from \"webdav\";\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst me = (e) => e === null ? q().setApp(\"files\").build() : q().setApp(\"files\").setUid(e.uid).build(), m = me(A());\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ne {\n _entries = [];\n registerEntry(t) {\n this.validateEntry(t), this._entries.push(t);\n }\n unregisterEntry(t) {\n const r = typeof t == \"string\" ? this.getEntryIndex(t) : this.getEntryIndex(t.id);\n if (r === -1) {\n m.warn(\"Entry not found, nothing removed\", { entry: t, entries: this.getEntries() });\n return;\n }\n this._entries.splice(r, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(t) {\n return t ? this._entries.filter((r) => typeof r.enabled == \"function\" ? r.enabled(t) : !0) : this._entries;\n }\n getEntryIndex(t) {\n return this._entries.findIndex((r) => r.id === t);\n }\n validateEntry(t) {\n if (!t.id || !t.displayName || !(t.iconSvgInline || t.iconClass) || !t.handler)\n throw new Error(\"Invalid entry\");\n if (typeof t.id != \"string\" || typeof t.displayName != \"string\")\n throw new Error(\"Invalid id or displayName property\");\n if (t.iconClass && typeof t.iconClass != \"string\" || t.iconSvgInline && typeof t.iconSvgInline != \"string\")\n throw new Error(\"Invalid icon provided\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (typeof t.handler != \"function\")\n throw new Error(\"Invalid handler property\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order property\");\n if (this.getEntryIndex(t.id) !== -1)\n throw new Error(\"Duplicate entry\");\n }\n}\nconst F = function() {\n return typeof window._nc_newfilemenu > \"u\" && (window._nc_newfilemenu = new Ne(), m.debug(\"NewFileMenu initialized\")), window._nc_newfilemenu;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst C = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"], P = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction Yt(e, t = !1, r = !1, s = !1) {\n r = r && !s, typeof e == \"string\" && (e = Number(e));\n let n = e > 0 ? Math.floor(Math.log(e) / Math.log(s ? 1e3 : 1024)) : 0;\n n = Math.min((r ? P.length : C.length) - 1, n);\n const i = r ? P[n] : C[n];\n let d = (e / Math.pow(s ? 1e3 : 1024, n)).toFixed(1);\n return t === !0 && n === 0 ? (d !== \"0.0\" ? \"< 1 \" : \"0 \") + (r ? P[1] : C[1]) : (n < 2 ? d = parseFloat(d).toFixed(0) : d = parseFloat(d).toLocaleString(ae()), d + \" \" + i);\n}\nfunction Jt(e, t = !1) {\n try {\n e = `${e}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch {\n return null;\n }\n const r = e.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (r === null || r[1] === \".\" || r[1] === \"\")\n return null;\n const s = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n }, n = `${r[1]}`, i = r[4] === \"i\" || t ? 1024 : 1e3;\n return Math.round(Number.parseFloat(n) * i ** s[r[3]]);\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Z = /* @__PURE__ */ ((e) => (e.DEFAULT = \"default\", e.HIDDEN = \"hidden\", e))(Z || {});\nclass Qt {\n _action;\n constructor(t) {\n this.validateAction(t), this._action = t;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(t) {\n if (!t.id || typeof t.id != \"string\")\n throw new Error(\"Invalid id\");\n if (!t.displayName || typeof t.displayName != \"function\")\n throw new Error(\"Invalid displayName function\");\n if (\"title\" in t && typeof t.title != \"function\")\n throw new Error(\"Invalid title function\");\n if (!t.iconSvgInline || typeof t.iconSvgInline != \"function\")\n throw new Error(\"Invalid iconSvgInline function\");\n if (!t.exec || typeof t.exec != \"function\")\n throw new Error(\"Invalid exec function\");\n if (\"enabled\" in t && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled function\");\n if (\"execBatch\" in t && typeof t.execBatch != \"function\")\n throw new Error(\"Invalid execBatch function\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order\");\n if (\"parent\" in t && typeof t.parent != \"string\")\n throw new Error(\"Invalid parent\");\n if (t.default && !Object.values(Z).includes(t.default))\n throw new Error(\"Invalid default\");\n if (\"inline\" in t && typeof t.inline != \"function\")\n throw new Error(\"Invalid inline function\");\n if (\"renderInline\" in t && typeof t.renderInline != \"function\")\n throw new Error(\"Invalid renderInline function\");\n }\n}\nconst Dt = function(e) {\n if (typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions.find((t) => t.id === e.id)) {\n m.error(`FileAction ${e.id} already registered`, { action: e });\n return;\n }\n window._nc_fileactions.push(e);\n}, er = function() {\n return typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass tr {\n _header;\n constructor(t) {\n this.validateHeader(t), this._header = t;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(t) {\n if (!t.id || !t.render || !t.updated)\n throw new Error(\"Invalid header: id, render and updated are required\");\n if (typeof t.id != \"string\")\n throw new Error(\"Invalid id property\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (t.render && typeof t.render != \"function\")\n throw new Error(\"Invalid render property\");\n if (t.updated && typeof t.updated != \"function\")\n throw new Error(\"Invalid updated property\");\n }\n}\nconst rr = function(e) {\n if (typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader.find((t) => t.id === e.id)) {\n m.error(`Header ${e.id} already registered`, { header: e });\n return;\n }\n window._nc_filelistheader.push(e);\n}, nr = function() {\n return typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar N = /* @__PURE__ */ ((e) => (e[e.NONE = 0] = \"NONE\", e[e.CREATE = 4] = \"CREATE\", e[e.READ = 1] = \"READ\", e[e.UPDATE = 2] = \"UPDATE\", e[e.DELETE = 8] = \"DELETE\", e[e.SHARE = 16] = \"SHARE\", e[e.ALL = 31] = \"ALL\", e))(N || {});\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst j = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"nc:share-attributes\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:share-types\",\n \"oc:size\",\n \"ocs:share-permissions\"\n], Y = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n}, ir = function(e, t = { nc: \"http://nextcloud.org/ns\" }) {\n typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j], window._nc_dav_namespaces = { ...Y });\n const r = { ...window._nc_dav_namespaces, ...t };\n if (window._nc_dav_properties.find((n) => n === e))\n return m.error(`${e} already registered`, { prop: e }), !1;\n if (e.startsWith(\"<\") || e.split(\":\").length !== 2)\n return m.error(`${e} is not valid. See example: 'oc:fileid'`, { prop: e }), !1;\n const s = e.split(\":\")[0];\n return r[s] ? (window._nc_dav_properties.push(e), window._nc_dav_namespaces = r, !0) : (m.error(`${e} namespace unknown`, { prop: e, namespaces: r }), !1);\n}, V = function() {\n return typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j]), window._nc_dav_properties.map((e) => `<${e} />`).join(\" \");\n}, L = function() {\n return typeof window._nc_dav_namespaces > \"u\" && (window._nc_dav_namespaces = { ...Y }), Object.keys(window._nc_dav_namespaces).map((e) => `xmlns:${e}=\"${window._nc_dav_namespaces?.[e]}\"`).join(\" \");\n}, sr = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<d:propfind ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`;\n}, Ee = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<oc:filter-files ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`;\n}, or = function(e) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<d:searchrequest ${L()}\n\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${A()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${e}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst be = function(e = \"\") {\n let t = N.NONE;\n return e && ((e.includes(\"C\") || e.includes(\"K\")) && (t |= N.CREATE), e.includes(\"G\") && (t |= N.READ), (e.includes(\"W\") || e.includes(\"N\") || e.includes(\"V\")) && (t |= N.UPDATE), e.includes(\"D\") && (t |= N.DELETE), e.includes(\"R\") && (t |= N.SHARE)), t;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar R = /* @__PURE__ */ ((e) => (e.Folder = \"folder\", e.File = \"file\", e))(R || {});\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst J = function(e, t) {\n return e.match(t) !== null;\n}, X = (e, t) => {\n if (e.id && typeof e.id != \"number\")\n throw new Error(\"Invalid id type of value\");\n if (!e.source)\n throw new Error(\"Missing mandatory source\");\n try {\n new URL(e.source);\n } catch {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!e.source.startsWith(\"http\"))\n throw new Error(\"Invalid source format, only http(s) is supported\");\n if (e.mtime && !(e.mtime instanceof Date))\n throw new Error(\"Invalid mtime type\");\n if (e.crtime && !(e.crtime instanceof Date))\n throw new Error(\"Invalid crtime type\");\n if (!e.mime || typeof e.mime != \"string\" || !e.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi))\n throw new Error(\"Missing or invalid mandatory mime\");\n if (\"size\" in e && typeof e.size != \"number\" && e.size !== void 0)\n throw new Error(\"Invalid size type\");\n if (\"permissions\" in e && e.permissions !== void 0 && !(typeof e.permissions == \"number\" && e.permissions >= N.NONE && e.permissions <= N.ALL))\n throw new Error(\"Invalid permissions\");\n if (e.owner && e.owner !== null && typeof e.owner != \"string\")\n throw new Error(\"Invalid owner type\");\n if (e.attributes && typeof e.attributes != \"object\")\n throw new Error(\"Invalid attributes type\");\n if (e.root && typeof e.root != \"string\")\n throw new Error(\"Invalid root type\");\n if (e.root && !e.root.startsWith(\"/\"))\n throw new Error(\"Root must start with a leading slash\");\n if (e.root && !e.source.includes(e.root))\n throw new Error(\"Root must be part of the source\");\n if (e.root && J(e.source, t)) {\n const r = e.source.match(t)[0];\n if (!e.source.includes(le(r, e.root)))\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n if (e.status && !Object.values(Q).includes(e.status))\n throw new Error(\"Status must be a valid NodeStatus\");\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Q = /* @__PURE__ */ ((e) => (e.NEW = \"new\", e.FAILED = \"failed\", e.LOADING = \"loading\", e.LOCKED = \"locked\", e))(Q || {});\nclass D {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n constructor(t, r) {\n X(t, r || this._knownDavService), this._data = t;\n const s = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set: (n, i, d) => (this.updateMtime(), Reflect.set(n, i, d)),\n deleteProperty: (n, i) => (this.updateMtime(), Reflect.deleteProperty(n, i))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n this._attributes = new Proxy(t.attributes || {}, s), delete this._data.attributes, r && (this._knownDavService = r);\n }\n /**\n * Get the source url to this object\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin: t } = new URL(this.source);\n return t + he(this.source.slice(t.length));\n }\n /**\n * Get this object name\n */\n get basename() {\n return fe(this.source);\n }\n /**\n * Get this object's extension\n */\n get extension() {\n return ce(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n */\n get dirname() {\n if (this.root) {\n let r = this.source;\n this.isDavRessource && (r = r.split(this._knownDavService).pop());\n const s = r.indexOf(this.root), n = this.root.replace(/\\/$/, \"\");\n return I(r.slice(s + n.length) || \"/\");\n }\n const t = new URL(this.source);\n return I(t.pathname);\n }\n /**\n * Get the file mime\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Get the file creation time\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Get the file attribute\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n return this.owner === null && !this.isDavRessource ? N.READ : this._data.permissions !== void 0 ? this._data.permissions : N.NONE;\n }\n /**\n * Get the file owner\n */\n get owner() {\n return this.isDavRessource ? this._data.owner : null;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return J(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n */\n get root() {\n return this._data.root ? this._data.root.replace(/^(.+)\\/$/, \"$1\") : this.isDavRessource && I(this.source).split(this._knownDavService).pop() || null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let t = this.source;\n this.isDavRessource && (t = t.split(this._knownDavService).pop());\n const r = t.indexOf(this.root), s = this.root.replace(/\\/$/, \"\");\n return t.slice(r + s.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * Will look for the fileid in attributes if undefined.\n */\n get fileid() {\n return this._data?.id || this.attributes?.fileid;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(t) {\n this._data.status = t;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(t) {\n X({ ...this._data, source: t }, this._knownDavService), this._data.source = t, this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(t) {\n if (t.includes(\"/\"))\n throw new Error(\"Invalid basename\");\n this.move(I(this.source) + \"/\" + t);\n }\n /**\n * Update the mtime if exists.\n */\n updateMtime() {\n this._data.mtime && (this._data.mtime = /* @__PURE__ */ new Date());\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass ye extends D {\n get type() {\n return R.File;\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass _e extends D {\n constructor(t) {\n super({\n ...t,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return R.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst ee = `/files/${A()?.uid}`, te = pe(\"dav\"), ur = function(e = te, t = {}) {\n const r = ge(e, { headers: t });\n function s(i) {\n r.setHeaders({\n ...t,\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: i ?? \"\"\n });\n }\n return ue(s), s(de()), we().patch(\"fetch\", (i, d) => {\n const u = d.headers;\n return u?.method && (d.method = u.method, delete u.method), fetch(i, d);\n }), r;\n}, dr = async (e, t = \"/\", r = ee) => (await e.getDirectoryContents(`${r}${t}`, {\n details: !0,\n data: Ee(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: !0\n})).data.filter((n) => n.filename !== t).map((n) => ve(n, r)), ve = function(e, t = ee, r = te) {\n const s = e.props, n = be(s?.permissions), i = s?.[\"owner-id\"] || A()?.uid, d = {\n id: s?.fileid || 0,\n source: `${r}${e.filename}`,\n mtime: new Date(Date.parse(e.lastmod)),\n mime: e.mime,\n size: s?.size || Number.parseInt(s.getcontentlength || \"0\"),\n permissions: n,\n owner: i,\n root: t,\n attributes: {\n ...e,\n ...s,\n hasPreview: s?.[\"has-preview\"]\n }\n };\n return delete d.attributes?.props, e.type === \"file\" ? new ye(d) : new _e(d);\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Te {\n _views = [];\n _currentView = null;\n register(t) {\n if (this._views.find((r) => r.id === t.id))\n throw new Error(`View id ${t.id} is already registered`);\n this._views.push(t);\n }\n remove(t) {\n const r = this._views.findIndex((s) => s.id === t);\n r !== -1 && this._views.splice(r, 1);\n }\n get views() {\n return this._views;\n }\n setActive(t) {\n this._currentView = t;\n }\n get active() {\n return this._currentView;\n }\n}\nconst ar = function() {\n return typeof window._nc_navigation > \"u\" && (window._nc_navigation = new Te(), m.debug(\"Navigation service initialized\")), window._nc_navigation;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ie {\n _column;\n constructor(t) {\n Ae(t), this._column = t;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst Ae = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"A column id is required\");\n if (!e.title || typeof e.title != \"string\")\n throw new Error(\"A column title is required\");\n if (!e.render || typeof e.render != \"function\")\n throw new Error(\"A render function is required\");\n if (e.sort && typeof e.sort != \"function\")\n throw new Error(\"Column sortFunction must be a function\");\n if (e.summary && typeof e.summary != \"function\")\n throw new Error(\"Column summary must be a function\");\n return !0;\n};\nvar S = {}, O = {};\n(function(e) {\n const t = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\", r = t + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\", s = \"[\" + t + \"][\" + r + \"]*\", n = new RegExp(\"^\" + s + \"$\"), i = function(u, o) {\n const a = [];\n let l = o.exec(u);\n for (; l; ) {\n const f = [];\n f.startIndex = o.lastIndex - l[0].length;\n const c = l.length;\n for (let g = 0; g < c; g++)\n f.push(l[g]);\n a.push(f), l = o.exec(u);\n }\n return a;\n }, d = function(u) {\n const o = n.exec(u);\n return !(o === null || typeof o > \"u\");\n };\n e.isExist = function(u) {\n return typeof u < \"u\";\n }, e.isEmptyObject = function(u) {\n return Object.keys(u).length === 0;\n }, e.merge = function(u, o, a) {\n if (o) {\n const l = Object.keys(o), f = l.length;\n for (let c = 0; c < f; c++)\n a === \"strict\" ? u[l[c]] = [o[l[c]]] : u[l[c]] = o[l[c]];\n }\n }, e.getValue = function(u) {\n return e.isExist(u) ? u : \"\";\n }, e.isName = d, e.getAllMatches = i, e.nameRegexp = s;\n})(O);\nconst M = O, Oe = {\n allowBooleanAttributes: !1,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nS.validate = function(e, t) {\n t = Object.assign({}, Oe, t);\n const r = [];\n let s = !1, n = !1;\n e[0] === \"\\uFEFF\" && (e = e.substr(1));\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\" && e[i + 1] === \"?\") {\n if (i += 2, i = G(e, i), i.err)\n return i;\n } else if (e[i] === \"<\") {\n let d = i;\n if (i++, e[i] === \"!\") {\n i = z(e, i);\n continue;\n } else {\n let u = !1;\n e[i] === \"/\" && (u = !0, i++);\n let o = \"\";\n for (; i < e.length && e[i] !== \">\" && e[i] !== \" \" && e[i] !== \"\t\" && e[i] !== `\n` && e[i] !== \"\\r\"; i++)\n o += e[i];\n if (o = o.trim(), o[o.length - 1] === \"/\" && (o = o.substring(0, o.length - 1), i--), !Re(o)) {\n let f;\n return o.trim().length === 0 ? f = \"Invalid space after '<'.\" : f = \"Tag '\" + o + \"' is an invalid name.\", p(\"InvalidTag\", f, w(e, i));\n }\n const a = xe(e, i);\n if (a === !1)\n return p(\"InvalidAttr\", \"Attributes for '\" + o + \"' have open quote.\", w(e, i));\n let l = a.value;\n if (i = a.index, l[l.length - 1] === \"/\") {\n const f = i - l.length;\n l = l.substring(0, l.length - 1);\n const c = H(l, t);\n if (c === !0)\n s = !0;\n else\n return p(c.err.code, c.err.msg, w(e, f + c.err.line));\n } else if (u)\n if (a.tagClosed) {\n if (l.trim().length > 0)\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' can't have attributes or invalid starting.\", w(e, d));\n {\n const f = r.pop();\n if (o !== f.tagName) {\n let c = w(e, f.tagStartPos);\n return p(\n \"InvalidTag\",\n \"Expected closing tag '\" + f.tagName + \"' (opened in line \" + c.line + \", col \" + c.col + \") instead of closing tag '\" + o + \"'.\",\n w(e, d)\n );\n }\n r.length == 0 && (n = !0);\n }\n } else\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' doesn't have proper closing.\", w(e, i));\n else {\n const f = H(l, t);\n if (f !== !0)\n return p(f.err.code, f.err.msg, w(e, i - l.length + f.err.line));\n if (n === !0)\n return p(\"InvalidXml\", \"Multiple possible root nodes found.\", w(e, i));\n t.unpairedTags.indexOf(o) !== -1 || r.push({ tagName: o, tagStartPos: d }), s = !0;\n }\n for (i++; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"!\") {\n i++, i = z(e, i);\n continue;\n } else if (e[i + 1] === \"?\") {\n if (i = G(e, ++i), i.err)\n return i;\n } else\n break;\n else if (e[i] === \"&\") {\n const f = Ve(e, i);\n if (f == -1)\n return p(\"InvalidChar\", \"char '&' is not expected.\", w(e, i));\n i = f;\n } else if (n === !0 && !U(e[i]))\n return p(\"InvalidXml\", \"Extra text at the end\", w(e, i));\n e[i] === \"<\" && i--;\n }\n } else {\n if (U(e[i]))\n continue;\n return p(\"InvalidChar\", \"char '\" + e[i] + \"' is not expected.\", w(e, i));\n }\n if (s) {\n if (r.length == 1)\n return p(\"InvalidTag\", \"Unclosed tag '\" + r[0].tagName + \"'.\", w(e, r[0].tagStartPos));\n if (r.length > 0)\n return p(\"InvalidXml\", \"Invalid '\" + JSON.stringify(r.map((i) => i.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n } else\n return p(\"InvalidXml\", \"Start tag expected.\", 1);\n return !0;\n};\nfunction U(e) {\n return e === \" \" || e === \"\t\" || e === `\n` || e === \"\\r\";\n}\nfunction G(e, t) {\n const r = t;\n for (; t < e.length; t++)\n if (e[t] == \"?\" || e[t] == \" \") {\n const s = e.substr(r, t - r);\n if (t > 5 && s === \"xml\")\n return p(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", w(e, t));\n if (e[t] == \"?\" && e[t + 1] == \">\") {\n t++;\n break;\n } else\n continue;\n }\n return t;\n}\nfunction z(e, t) {\n if (e.length > t + 5 && e[t + 1] === \"-\" && e[t + 2] === \"-\") {\n for (t += 3; t < e.length; t++)\n if (e[t] === \"-\" && e[t + 1] === \"-\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n } else if (e.length > t + 8 && e[t + 1] === \"D\" && e[t + 2] === \"O\" && e[t + 3] === \"C\" && e[t + 4] === \"T\" && e[t + 5] === \"Y\" && e[t + 6] === \"P\" && e[t + 7] === \"E\") {\n let r = 1;\n for (t += 8; t < e.length; t++)\n if (e[t] === \"<\")\n r++;\n else if (e[t] === \">\" && (r--, r === 0))\n break;\n } else if (e.length > t + 9 && e[t + 1] === \"[\" && e[t + 2] === \"C\" && e[t + 3] === \"D\" && e[t + 4] === \"A\" && e[t + 5] === \"T\" && e[t + 6] === \"A\" && e[t + 7] === \"[\") {\n for (t += 8; t < e.length; t++)\n if (e[t] === \"]\" && e[t + 1] === \"]\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n }\n return t;\n}\nconst Ce = '\"', Pe = \"'\";\nfunction xe(e, t) {\n let r = \"\", s = \"\", n = !1;\n for (; t < e.length; t++) {\n if (e[t] === Ce || e[t] === Pe)\n s === \"\" ? s = e[t] : s !== e[t] || (s = \"\");\n else if (e[t] === \">\" && s === \"\") {\n n = !0;\n break;\n }\n r += e[t];\n }\n return s !== \"\" ? !1 : {\n value: r,\n index: t,\n tagClosed: n\n };\n}\nconst $e = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction H(e, t) {\n const r = M.getAllMatches(e, $e), s = {};\n for (let n = 0; n < r.length; n++) {\n if (r[n][1].length === 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' has no space in starting.\", v(r[n]));\n if (r[n][3] !== void 0 && r[n][4] === void 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' is without value.\", v(r[n]));\n if (r[n][3] === void 0 && !t.allowBooleanAttributes)\n return p(\"InvalidAttr\", \"boolean attribute '\" + r[n][2] + \"' is not allowed.\", v(r[n]));\n const i = r[n][2];\n if (!Le(i))\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is an invalid name.\", v(r[n]));\n if (!s.hasOwnProperty(i))\n s[i] = 1;\n else\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is repeated.\", v(r[n]));\n }\n return !0;\n}\nfunction Fe(e, t) {\n let r = /\\d/;\n for (e[t] === \"x\" && (t++, r = /[\\da-fA-F]/); t < e.length; t++) {\n if (e[t] === \";\")\n return t;\n if (!e[t].match(r))\n break;\n }\n return -1;\n}\nfunction Ve(e, t) {\n if (t++, e[t] === \";\")\n return -1;\n if (e[t] === \"#\")\n return t++, Fe(e, t);\n let r = 0;\n for (; t < e.length; t++, r++)\n if (!(e[t].match(/\\w/) && r < 20)) {\n if (e[t] === \";\")\n break;\n return -1;\n }\n return t;\n}\nfunction p(e, t, r) {\n return {\n err: {\n code: e,\n msg: t,\n line: r.line || r,\n col: r.col\n }\n };\n}\nfunction Le(e) {\n return M.isName(e);\n}\nfunction Re(e) {\n return M.isName(e);\n}\nfunction w(e, t) {\n const r = e.substring(0, t).split(/\\r?\\n/);\n return {\n line: r.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: r[r.length - 1].length + 1\n };\n}\nfunction v(e) {\n return e.startIndex + e[1].length;\n}\nvar k = {};\nconst re = {\n preserveOrder: !1,\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n removeNSPrefix: !1,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: !1,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: !0,\n parseAttributeValue: !1,\n trimValues: !0,\n //Trim string values of tag and attributes\n cdataPropName: !1,\n numberParseOptions: {\n hex: !0,\n leadingZeros: !0,\n eNotation: !0\n },\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: !1,\n isArray: () => !1,\n commentPropName: !1,\n unpairedTags: [],\n processEntities: !0,\n htmlEntities: !1,\n ignoreDeclaration: !1,\n ignorePiTags: !1,\n transformTagName: !1,\n transformAttributeName: !1,\n updateTag: function(e, t, r) {\n return e;\n }\n // skipEmptyListItem: false\n}, Se = function(e) {\n return Object.assign({}, re, e);\n};\nk.buildOptions = Se;\nk.defaultOptions = re;\nclass Me {\n constructor(t) {\n this.tagname = t, this.child = [], this[\":@\"] = {};\n }\n add(t, r) {\n t === \"__proto__\" && (t = \"#__proto__\"), this.child.push({ [t]: r });\n }\n addChild(t) {\n t.tagname === \"__proto__\" && (t.tagname = \"#__proto__\"), t[\":@\"] && Object.keys(t[\":@\"]).length > 0 ? this.child.push({ [t.tagname]: t.child, \":@\": t[\":@\"] }) : this.child.push({ [t.tagname]: t.child });\n }\n}\nvar ke = Me;\nconst Be = O;\nfunction qe(e, t) {\n const r = {};\n if (e[t + 3] === \"O\" && e[t + 4] === \"C\" && e[t + 5] === \"T\" && e[t + 6] === \"Y\" && e[t + 7] === \"P\" && e[t + 8] === \"E\") {\n t = t + 9;\n let s = 1, n = !1, i = !1, d = \"\";\n for (; t < e.length; t++)\n if (e[t] === \"<\" && !i) {\n if (n && Ge(e, t))\n t += 7, [entityName, val, t] = Xe(e, t + 1), val.indexOf(\"&\") === -1 && (r[We(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n });\n else if (n && ze(e, t))\n t += 8;\n else if (n && He(e, t))\n t += 8;\n else if (n && Ke(e, t))\n t += 9;\n else if (Ue)\n i = !0;\n else\n throw new Error(\"Invalid DOCTYPE\");\n s++, d = \"\";\n } else if (e[t] === \">\") {\n if (i ? e[t - 1] === \"-\" && e[t - 2] === \"-\" && (i = !1, s--) : s--, s === 0)\n break;\n } else\n e[t] === \"[\" ? n = !0 : d += e[t];\n if (s !== 0)\n throw new Error(\"Unclosed DOCTYPE\");\n } else\n throw new Error(\"Invalid Tag instead of DOCTYPE\");\n return { entities: r, i: t };\n}\nfunction Xe(e, t) {\n let r = \"\";\n for (; t < e.length && e[t] !== \"'\" && e[t] !== '\"'; t++)\n r += e[t];\n if (r = r.trim(), r.indexOf(\" \") !== -1)\n throw new Error(\"External entites are not supported\");\n const s = e[t++];\n let n = \"\";\n for (; t < e.length && e[t] !== s; t++)\n n += e[t];\n return [r, n, t];\n}\nfunction Ue(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"-\" && e[t + 3] === \"-\";\n}\nfunction Ge(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"N\" && e[t + 4] === \"T\" && e[t + 5] === \"I\" && e[t + 6] === \"T\" && e[t + 7] === \"Y\";\n}\nfunction ze(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"L\" && e[t + 4] === \"E\" && e[t + 5] === \"M\" && e[t + 6] === \"E\" && e[t + 7] === \"N\" && e[t + 8] === \"T\";\n}\nfunction He(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"A\" && e[t + 3] === \"T\" && e[t + 4] === \"T\" && e[t + 5] === \"L\" && e[t + 6] === \"I\" && e[t + 7] === \"S\" && e[t + 8] === \"T\";\n}\nfunction Ke(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"N\" && e[t + 3] === \"O\" && e[t + 4] === \"T\" && e[t + 5] === \"A\" && e[t + 6] === \"T\" && e[t + 7] === \"I\" && e[t + 8] === \"O\" && e[t + 9] === \"N\";\n}\nfunction We(e) {\n if (Be.isName(e))\n return e;\n throw new Error(`Invalid entity name ${e}`);\n}\nvar Ze = qe;\nconst je = /^[-+]?0x[a-fA-F0-9]+$/, Ye = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n!Number.parseInt && window.parseInt && (Number.parseInt = window.parseInt);\n!Number.parseFloat && window.parseFloat && (Number.parseFloat = window.parseFloat);\nconst Je = {\n hex: !0,\n leadingZeros: !0,\n decimalPoint: \".\",\n eNotation: !0\n //skipLike: /regex/\n};\nfunction Qe(e, t = {}) {\n if (t = Object.assign({}, Je, t), !e || typeof e != \"string\")\n return e;\n let r = e.trim();\n if (t.skipLike !== void 0 && t.skipLike.test(r))\n return e;\n if (t.hex && je.test(r))\n return Number.parseInt(r, 16);\n {\n const s = Ye.exec(r);\n if (s) {\n const n = s[1], i = s[2];\n let d = De(s[3]);\n const u = s[4] || s[6];\n if (!t.leadingZeros && i.length > 0 && n && r[2] !== \".\")\n return e;\n if (!t.leadingZeros && i.length > 0 && !n && r[1] !== \".\")\n return e;\n {\n const o = Number(r), a = \"\" + o;\n return a.search(/[eE]/) !== -1 || u ? t.eNotation ? o : e : r.indexOf(\".\") !== -1 ? a === \"0\" && d === \"\" || a === d || n && a === \"-\" + d ? o : e : i ? d === a || n + d === a ? o : e : r === a || r === n + a ? o : e;\n }\n } else\n return e;\n }\n}\nfunction De(e) {\n return e && e.indexOf(\".\") !== -1 && (e = e.replace(/0+$/, \"\"), e === \".\" ? e = \"0\" : e[0] === \".\" ? e = \"0\" + e : e[e.length - 1] === \".\" && (e = e.substr(0, e.length - 1))), e;\n}\nvar et = Qe;\nconst B = O, T = ke, tt = Ze, rt = et;\n\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g, B.nameRegexp);\nlet nt = class {\n constructor(t) {\n this.options = t, this.currentNode = null, this.tagsNodeStack = [], this.docTypeEntities = {}, this.lastEntities = {\n apos: { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n gt: { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n lt: { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n quot: { regex: /&(quot|#34|#x22);/g, val: '\"' }\n }, this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" }, this.htmlEntities = {\n space: { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n cent: { regex: /&(cent|#162);/g, val: \"¢\" },\n pound: { regex: /&(pound|#163);/g, val: \"£\" },\n yen: { regex: /&(yen|#165);/g, val: \"¥\" },\n euro: { regex: /&(euro|#8364);/g, val: \"€\" },\n copyright: { regex: /&(copy|#169);/g, val: \"©\" },\n reg: { regex: /&(reg|#174);/g, val: \"®\" },\n inr: { regex: /&(inr|#8377);/g, val: \"₹\" }\n }, this.addExternalEntities = it, this.parseXml = at, this.parseTextData = st, this.resolveNameSpace = ot, this.buildAttributesMap = dt, this.isItStopNode = ht, this.replaceEntitiesValue = ft, this.readStopNodeData = gt, this.saveTextToParentTag = ct, this.addChild = lt;\n }\n};\nfunction it(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n this.lastEntities[s] = {\n regex: new RegExp(\"&\" + s + \";\", \"g\"),\n val: e[s]\n };\n }\n}\nfunction st(e, t, r, s, n, i, d) {\n if (e !== void 0 && (this.options.trimValues && !s && (e = e.trim()), e.length > 0)) {\n d || (e = this.replaceEntitiesValue(e));\n const u = this.options.tagValueProcessor(t, e, r, n, i);\n return u == null ? e : typeof u != typeof e || u !== e ? u : this.options.trimValues ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e.trim() === e ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e;\n }\n}\nfunction ot(e) {\n if (this.options.removeNSPrefix) {\n const t = e.split(\":\"), r = e.charAt(0) === \"/\" ? \"/\" : \"\";\n if (t[0] === \"xmlns\")\n return \"\";\n t.length === 2 && (e = r + t[1]);\n }\n return e;\n}\nconst ut = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction dt(e, t, r) {\n if (!this.options.ignoreAttributes && typeof e == \"string\") {\n const s = B.getAllMatches(e, ut), n = s.length, i = {};\n for (let d = 0; d < n; d++) {\n const u = this.resolveNameSpace(s[d][1]);\n let o = s[d][4], a = this.options.attributeNamePrefix + u;\n if (u.length)\n if (this.options.transformAttributeName && (a = this.options.transformAttributeName(a)), a === \"__proto__\" && (a = \"#__proto__\"), o !== void 0) {\n this.options.trimValues && (o = o.trim()), o = this.replaceEntitiesValue(o);\n const l = this.options.attributeValueProcessor(u, o, t);\n l == null ? i[a] = o : typeof l != typeof o || l !== o ? i[a] = l : i[a] = $(\n o,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n } else\n this.options.allowBooleanAttributes && (i[a] = !0);\n }\n if (!Object.keys(i).length)\n return;\n if (this.options.attributesGroupName) {\n const d = {};\n return d[this.options.attributesGroupName] = i, d;\n }\n return i;\n }\n}\nconst at = function(e) {\n e = e.replace(/\\r\\n?/g, `\n`);\n const t = new T(\"!xml\");\n let r = t, s = \"\", n = \"\";\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"/\") {\n const u = y(e, \">\", i, \"Closing Tag is not closed.\");\n let o = e.substring(i + 2, u).trim();\n if (this.options.removeNSPrefix) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1));\n }\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && (s = this.saveTextToParentTag(s, r, n));\n const a = n.substring(n.lastIndexOf(\".\") + 1);\n if (o && this.options.unpairedTags.indexOf(o) !== -1)\n throw new Error(`Unpaired tag can not be used as closing tag: </${o}>`);\n let l = 0;\n a && this.options.unpairedTags.indexOf(a) !== -1 ? (l = n.lastIndexOf(\".\", n.lastIndexOf(\".\") - 1), this.tagsNodeStack.pop()) : l = n.lastIndexOf(\".\"), n = n.substring(0, l), r = this.tagsNodeStack.pop(), s = \"\", i = u;\n } else if (e[i + 1] === \"?\") {\n let u = x(e, i, !1, \"?>\");\n if (!u)\n throw new Error(\"Pi Tag is not closed.\");\n if (s = this.saveTextToParentTag(s, r, n), !(this.options.ignoreDeclaration && u.tagName === \"?xml\" || this.options.ignorePiTags)) {\n const o = new T(u.tagName);\n o.add(this.options.textNodeName, \"\"), u.tagName !== u.tagExp && u.attrExpPresent && (o[\":@\"] = this.buildAttributesMap(u.tagExp, n, u.tagName)), this.addChild(r, o, n);\n }\n i = u.closeIndex + 1;\n } else if (e.substr(i + 1, 3) === \"!--\") {\n const u = y(e, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const o = e.substring(i + 4, u - 2);\n s = this.saveTextToParentTag(s, r, n), r.add(this.options.commentPropName, [{ [this.options.textNodeName]: o }]);\n }\n i = u;\n } else if (e.substr(i + 1, 2) === \"!D\") {\n const u = tt(e, i);\n this.docTypeEntities = u.entities, i = u.i;\n } else if (e.substr(i + 1, 2) === \"![\") {\n const u = y(e, \"]]>\", i, \"CDATA is not closed.\") - 2, o = e.substring(i + 9, u);\n if (s = this.saveTextToParentTag(s, r, n), this.options.cdataPropName)\n r.add(this.options.cdataPropName, [{ [this.options.textNodeName]: o }]);\n else {\n let a = this.parseTextData(o, r.tagname, n, !0, !1, !0);\n a == null && (a = \"\"), r.add(this.options.textNodeName, a);\n }\n i = u + 2;\n } else {\n let u = x(e, i, this.options.removeNSPrefix), o = u.tagName;\n const a = u.rawTagName;\n let l = u.tagExp, f = u.attrExpPresent, c = u.closeIndex;\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && s && r.tagname !== \"!xml\" && (s = this.saveTextToParentTag(s, r, n, !1));\n const g = r;\n if (g && this.options.unpairedTags.indexOf(g.tagname) !== -1 && (r = this.tagsNodeStack.pop(), n = n.substring(0, n.lastIndexOf(\".\"))), o !== t.tagname && (n += n ? \".\" + o : o), this.isItStopNode(this.options.stopNodes, n, o)) {\n let h = \"\";\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1)\n i = u.closeIndex;\n else if (this.options.unpairedTags.indexOf(o) !== -1)\n i = u.closeIndex;\n else {\n const E = this.readStopNodeData(e, a, c + 1);\n if (!E)\n throw new Error(`Unexpected end of ${a}`);\n i = E.i, h = E.tagContent;\n }\n const _ = new T(o);\n o !== l && f && (_[\":@\"] = this.buildAttributesMap(l, n, o)), h && (h = this.parseTextData(h, o, n, !0, f, !0, !0)), n = n.substr(0, n.lastIndexOf(\".\")), _.add(this.options.textNodeName, h), this.addChild(r, _, n);\n } else {\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1) {\n o[o.length - 1] === \"/\" ? (o = o.substr(0, o.length - 1), n = n.substr(0, n.length - 1), l = o) : l = l.substr(0, l.length - 1), this.options.transformTagName && (o = this.options.transformTagName(o));\n const h = new T(o);\n o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), n = n.substr(0, n.lastIndexOf(\".\"));\n } else {\n const h = new T(o);\n this.tagsNodeStack.push(r), o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), r = h;\n }\n s = \"\", i = c;\n }\n }\n else\n s += e[i];\n return t.child;\n};\nfunction lt(e, t, r) {\n const s = this.options.updateTag(t.tagname, r, t[\":@\"]);\n s === !1 || (typeof s == \"string\" && (t.tagname = s), e.addChild(t));\n}\nconst ft = function(e) {\n if (this.options.processEntities) {\n for (let t in this.docTypeEntities) {\n const r = this.docTypeEntities[t];\n e = e.replace(r.regx, r.val);\n }\n for (let t in this.lastEntities) {\n const r = this.lastEntities[t];\n e = e.replace(r.regex, r.val);\n }\n if (this.options.htmlEntities)\n for (let t in this.htmlEntities) {\n const r = this.htmlEntities[t];\n e = e.replace(r.regex, r.val);\n }\n e = e.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return e;\n};\nfunction ct(e, t, r, s) {\n return e && (s === void 0 && (s = Object.keys(t.child).length === 0), e = this.parseTextData(\n e,\n t.tagname,\n r,\n !1,\n t[\":@\"] ? Object.keys(t[\":@\"]).length !== 0 : !1,\n s\n ), e !== void 0 && e !== \"\" && t.add(this.options.textNodeName, e), e = \"\"), e;\n}\nfunction ht(e, t, r) {\n const s = \"*.\" + r;\n for (const n in e) {\n const i = e[n];\n if (s === i || t === i)\n return !0;\n }\n return !1;\n}\nfunction pt(e, t, r = \">\") {\n let s, n = \"\";\n for (let i = t; i < e.length; i++) {\n let d = e[i];\n if (s)\n d === s && (s = \"\");\n else if (d === '\"' || d === \"'\")\n s = d;\n else if (d === r[0])\n if (r[1]) {\n if (e[i + 1] === r[1])\n return {\n data: n,\n index: i\n };\n } else\n return {\n data: n,\n index: i\n };\n else\n d === \"\t\" && (d = \" \");\n n += d;\n }\n}\nfunction y(e, t, r, s) {\n const n = e.indexOf(t, r);\n if (n === -1)\n throw new Error(s);\n return n + t.length - 1;\n}\nfunction x(e, t, r, s = \">\") {\n const n = pt(e, t + 1, s);\n if (!n)\n return;\n let i = n.data;\n const d = n.index, u = i.search(/\\s/);\n let o = i, a = !0;\n u !== -1 && (o = i.substr(0, u).replace(/\\s\\s*$/, \"\"), i = i.substr(u + 1));\n const l = o;\n if (r) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1), a = o !== n.data.substr(f + 1));\n }\n return {\n tagName: o,\n tagExp: i,\n closeIndex: d,\n attrExpPresent: a,\n rawTagName: l\n };\n}\nfunction gt(e, t, r) {\n const s = r;\n let n = 1;\n for (; r < e.length; r++)\n if (e[r] === \"<\")\n if (e[r + 1] === \"/\") {\n const i = y(e, \">\", r, `${t} is not closed`);\n if (e.substring(r + 2, i).trim() === t && (n--, n === 0))\n return {\n tagContent: e.substring(s, r),\n i\n };\n r = i;\n } else if (e[r + 1] === \"?\")\n r = y(e, \"?>\", r + 1, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 3) === \"!--\")\n r = y(e, \"-->\", r + 3, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 2) === \"![\")\n r = y(e, \"]]>\", r, \"StopNode is not closed.\") - 2;\n else {\n const i = x(e, r, \">\");\n i && ((i && i.tagName) === t && i.tagExp[i.tagExp.length - 1] !== \"/\" && n++, r = i.closeIndex);\n }\n}\nfunction $(e, t, r) {\n if (t && typeof e == \"string\") {\n const s = e.trim();\n return s === \"true\" ? !0 : s === \"false\" ? !1 : rt(e, r);\n } else\n return B.isExist(e) ? e : \"\";\n}\nvar wt = nt, ne = {};\nfunction mt(e, t) {\n return ie(e, t);\n}\nfunction ie(e, t, r) {\n let s;\n const n = {};\n for (let i = 0; i < e.length; i++) {\n const d = e[i], u = Nt(d);\n let o = \"\";\n if (r === void 0 ? o = u : o = r + \".\" + u, u === t.textNodeName)\n s === void 0 ? s = d[u] : s += \"\" + d[u];\n else {\n if (u === void 0)\n continue;\n if (d[u]) {\n let a = ie(d[u], t, o);\n const l = bt(a, t);\n d[\":@\"] ? Et(a, d[\":@\"], o, t) : Object.keys(a).length === 1 && a[t.textNodeName] !== void 0 && !t.alwaysCreateTextNode ? a = a[t.textNodeName] : Object.keys(a).length === 0 && (t.alwaysCreateTextNode ? a[t.textNodeName] = \"\" : a = \"\"), n[u] !== void 0 && n.hasOwnProperty(u) ? (Array.isArray(n[u]) || (n[u] = [n[u]]), n[u].push(a)) : t.isArray(u, o, l) ? n[u] = [a] : n[u] = a;\n }\n }\n }\n return typeof s == \"string\" ? s.length > 0 && (n[t.textNodeName] = s) : s !== void 0 && (n[t.textNodeName] = s), n;\n}\nfunction Nt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (s !== \":@\")\n return s;\n }\n}\nfunction Et(e, t, r, s) {\n if (t) {\n const n = Object.keys(t), i = n.length;\n for (let d = 0; d < i; d++) {\n const u = n[d];\n s.isArray(u, r + \".\" + u, !0, !0) ? e[u] = [t[u]] : e[u] = t[u];\n }\n }\n}\nfunction bt(e, t) {\n const { textNodeName: r } = t, s = Object.keys(e).length;\n return !!(s === 0 || s === 1 && (e[r] || typeof e[r] == \"boolean\" || e[r] === 0));\n}\nne.prettify = mt;\nconst { buildOptions: yt } = k, _t = wt, { prettify: vt } = ne, Tt = S;\nlet It = class {\n constructor(t) {\n this.externalEntities = {}, this.options = yt(t);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(t, r) {\n if (typeof t != \"string\")\n if (t.toString)\n t = t.toString();\n else\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n if (r) {\n r === !0 && (r = {});\n const i = Tt.validate(t, r);\n if (i !== !0)\n throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`);\n }\n const s = new _t(this.options);\n s.addExternalEntities(this.externalEntities);\n const n = s.parseXml(t);\n return this.options.preserveOrder || n === void 0 ? n : vt(n, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(t, r) {\n if (r.indexOf(\"&\") !== -1)\n throw new Error(\"Entity value can't have '&'\");\n if (t.indexOf(\"&\") !== -1 || t.indexOf(\";\") !== -1)\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '
'\");\n if (r === \"&\")\n throw new Error(\"An entity with value '&' is not permitted\");\n this.externalEntities[t] = r;\n }\n};\nvar At = It;\nconst Ot = `\n`;\nfunction Ct(e, t) {\n let r = \"\";\n return t.format && t.indentBy.length > 0 && (r = Ot), se(e, t, \"\", r);\n}\nfunction se(e, t, r, s) {\n let n = \"\", i = !1;\n for (let d = 0; d < e.length; d++) {\n const u = e[d], o = Pt(u);\n if (o === void 0)\n continue;\n let a = \"\";\n if (r.length === 0 ? a = o : a = `${r}.${o}`, o === t.textNodeName) {\n let h = u[o];\n xt(a, t) || (h = t.tagValueProcessor(o, h), h = oe(h, t)), i && (n += s), n += h, i = !1;\n continue;\n } else if (o === t.cdataPropName) {\n i && (n += s), n += `<![CDATA[${u[o][0][t.textNodeName]}]]>`, i = !1;\n continue;\n } else if (o === t.commentPropName) {\n n += s + `<!--${u[o][0][t.textNodeName]}-->`, i = !0;\n continue;\n } else if (o[0] === \"?\") {\n const h = K(u[\":@\"], t), _ = o === \"?xml\" ? \"\" : s;\n let E = u[o][0][t.textNodeName];\n E = E.length !== 0 ? \" \" + E : \"\", n += _ + `<${o}${E}${h}?>`, i = !0;\n continue;\n }\n let l = s;\n l !== \"\" && (l += t.indentBy);\n const f = K(u[\":@\"], t), c = s + `<${o}${f}`, g = se(u[o], t, a, l);\n t.unpairedTags.indexOf(o) !== -1 ? t.suppressUnpairedNode ? n += c + \">\" : n += c + \"/>\" : (!g || g.length === 0) && t.suppressEmptyNode ? n += c + \"/>\" : g && g.endsWith(\">\") ? n += c + `>${g}${s}</${o}>` : (n += c + \">\", g && s !== \"\" && (g.includes(\"/>\") || g.includes(\"</\")) ? n += s + t.indentBy + g + s : n += g, n += `</${o}>`), i = !0;\n }\n return n;\n}\nfunction Pt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (e.hasOwnProperty(s) && s !== \":@\")\n return s;\n }\n}\nfunction K(e, t) {\n let r = \"\";\n if (e && !t.ignoreAttributes)\n for (let s in e) {\n if (!e.hasOwnProperty(s))\n continue;\n let n = t.attributeValueProcessor(s, e[s]);\n n = oe(n, t), n === !0 && t.suppressBooleanAttributes ? r += ` ${s.substr(t.attributeNamePrefix.length)}` : r += ` ${s.substr(t.attributeNamePrefix.length)}=\"${n}\"`;\n }\n return r;\n}\nfunction xt(e, t) {\n e = e.substr(0, e.length - t.textNodeName.length - 1);\n let r = e.substr(e.lastIndexOf(\".\") + 1);\n for (let s in t.stopNodes)\n if (t.stopNodes[s] === e || t.stopNodes[s] === \"*.\" + r)\n return !0;\n return !1;\n}\nfunction oe(e, t) {\n if (e && e.length > 0 && t.processEntities)\n for (let r = 0; r < t.entities.length; r++) {\n const s = t.entities[r];\n e = e.replace(s.regex, s.val);\n }\n return e;\n}\nvar $t = Ct;\nconst Ft = $t, Vt = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n cdataPropName: !1,\n format: !1,\n indentBy: \" \",\n suppressEmptyNode: !1,\n suppressUnpairedNode: !0,\n suppressBooleanAttributes: !0,\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n preserveOrder: !1,\n commentPropName: !1,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: !0,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: !1\n};\nfunction b(e) {\n this.options = Object.assign({}, Vt, e), this.options.ignoreAttributes || this.options.attributesGroupName ? this.isAttribute = function() {\n return !1;\n } : (this.attrPrefixLen = this.options.attributeNamePrefix.length, this.isAttribute = St), this.processTextOrObjNode = Lt, this.options.format ? (this.indentate = Rt, this.tagEndChar = `>\n`, this.newLine = `\n`) : (this.indentate = function() {\n return \"\";\n }, this.tagEndChar = \">\", this.newLine = \"\");\n}\nb.prototype.build = function(e) {\n return this.options.preserveOrder ? Ft(e, this.options) : (Array.isArray(e) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1 && (e = {\n [this.options.arrayNodeName]: e\n }), this.j2x(e, 0).val);\n};\nb.prototype.j2x = function(e, t) {\n let r = \"\", s = \"\";\n for (let n in e)\n if (Object.prototype.hasOwnProperty.call(e, n))\n if (typeof e[n] > \"u\")\n this.isAttribute(n) && (s += \"\");\n else if (e[n] === null)\n this.isAttribute(n) ? s += \"\" : n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar;\n else if (e[n] instanceof Date)\n s += this.buildTextValNode(e[n], n, \"\", t);\n else if (typeof e[n] != \"object\") {\n const i = this.isAttribute(n);\n if (i)\n r += this.buildAttrPairStr(i, \"\" + e[n]);\n else if (n === this.options.textNodeName) {\n let d = this.options.tagValueProcessor(n, \"\" + e[n]);\n s += this.replaceEntitiesValue(d);\n } else\n s += this.buildTextValNode(e[n], n, \"\", t);\n } else if (Array.isArray(e[n])) {\n const i = e[n].length;\n let d = \"\";\n for (let u = 0; u < i; u++) {\n const o = e[n][u];\n typeof o > \"u\" || (o === null ? n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar : typeof o == \"object\" ? this.options.oneListGroup ? d += this.j2x(o, t + 1).val : d += this.processTextOrObjNode(o, n, t) : d += this.buildTextValNode(o, n, \"\", t));\n }\n this.options.oneListGroup && (d = this.buildObjectNode(d, n, \"\", t)), s += d;\n } else if (this.options.attributesGroupName && n === this.options.attributesGroupName) {\n const i = Object.keys(e[n]), d = i.length;\n for (let u = 0; u < d; u++)\n r += this.buildAttrPairStr(i[u], \"\" + e[n][i[u]]);\n } else\n s += this.processTextOrObjNode(e[n], n, t);\n return { attrStr: r, val: s };\n};\nb.prototype.buildAttrPairStr = function(e, t) {\n return t = this.options.attributeValueProcessor(e, \"\" + t), t = this.replaceEntitiesValue(t), this.options.suppressBooleanAttributes && t === \"true\" ? \" \" + e : \" \" + e + '=\"' + t + '\"';\n};\nfunction Lt(e, t, r) {\n const s = this.j2x(e, r + 1);\n return e[this.options.textNodeName] !== void 0 && Object.keys(e).length === 1 ? this.buildTextValNode(e[this.options.textNodeName], t, s.attrStr, r) : this.buildObjectNode(s.val, t, s.attrStr, r);\n}\nb.prototype.buildObjectNode = function(e, t, r, s) {\n if (e === \"\")\n return t[0] === \"?\" ? this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar : this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar;\n {\n let n = \"</\" + t + this.tagEndChar, i = \"\";\n return t[0] === \"?\" && (i = \"?\", n = \"\"), (r || r === \"\") && e.indexOf(\"<\") === -1 ? this.indentate(s) + \"<\" + t + r + i + \">\" + e + n : this.options.commentPropName !== !1 && t === this.options.commentPropName && i.length === 0 ? this.indentate(s) + `<!--${e}-->` + this.newLine : this.indentate(s) + \"<\" + t + r + i + this.tagEndChar + e + this.indentate(s) + n;\n }\n};\nb.prototype.closeTag = function(e) {\n let t = \"\";\n return this.options.unpairedTags.indexOf(e) !== -1 ? this.options.suppressUnpairedNode || (t = \"/\") : this.options.suppressEmptyNode ? t = \"/\" : t = `></${e}`, t;\n};\nb.prototype.buildTextValNode = function(e, t, r, s) {\n if (this.options.cdataPropName !== !1 && t === this.options.cdataPropName)\n return this.indentate(s) + `<![CDATA[${e}]]>` + this.newLine;\n if (this.options.commentPropName !== !1 && t === this.options.commentPropName)\n return this.indentate(s) + `<!--${e}-->` + this.newLine;\n if (t[0] === \"?\")\n return this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar;\n {\n let n = this.options.tagValueProcessor(t, e);\n return n = this.replaceEntitiesValue(n), n === \"\" ? this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar : this.indentate(s) + \"<\" + t + r + \">\" + n + \"</\" + t + this.tagEndChar;\n }\n};\nb.prototype.replaceEntitiesValue = function(e) {\n if (e && e.length > 0 && this.options.processEntities)\n for (let t = 0; t < this.options.entities.length; t++) {\n const r = this.options.entities[t];\n e = e.replace(r.regex, r.val);\n }\n return e;\n};\nfunction Rt(e) {\n return this.options.indentBy.repeat(e);\n}\nfunction St(e) {\n return e.startsWith(this.options.attributeNamePrefix) && e !== this.options.textNodeName ? e.substr(this.attrPrefixLen) : !1;\n}\nvar Mt = b;\nconst kt = S, Bt = At, qt = Mt;\nvar W = {\n XMLParser: Bt,\n XMLValidator: kt,\n XMLBuilder: qt\n};\nfunction Xt(e) {\n if (typeof e != \"string\")\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof e}\\``);\n if (e = e.trim(), e.length === 0 || W.XMLValidator.validate(e) !== !0)\n return !1;\n let t;\n const r = new W.XMLParser();\n try {\n t = r.parse(e);\n } catch {\n return !1;\n }\n return !(!t || !(\"svg\" in t));\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass cr {\n _view;\n constructor(t) {\n Ut(t), this._view = t;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(t) {\n this._view.icon = t;\n }\n get order() {\n return this._view.order;\n }\n set order(t) {\n this._view.order = t;\n }\n get params() {\n return this._view.params;\n }\n set params(t) {\n this._view.params = t;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(t) {\n this._view.expanded = t;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst Ut = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"View id is required and must be a string\");\n if (!e.name || typeof e.name != \"string\")\n throw new Error(\"View name is required and must be a string\");\n if (e.columns && e.columns.length > 0 && (!e.caption || typeof e.caption != \"string\"))\n throw new Error(\"View caption is required for top-level views and must be a string\");\n if (!e.getContents || typeof e.getContents != \"function\")\n throw new Error(\"View getContents is required and must be a function\");\n if (!e.icon || typeof e.icon != \"string\" || !Xt(e.icon))\n throw new Error(\"View icon is required and must be a valid svg string\");\n if (!(\"order\" in e) || typeof e.order != \"number\")\n throw new Error(\"View order is required and must be a number\");\n if (e.columns && e.columns.forEach((t) => {\n if (!(t instanceof Ie))\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }), e.emptyView && typeof e.emptyView != \"function\")\n throw new Error(\"View emptyView must be a function\");\n if (e.parent && typeof e.parent != \"string\")\n throw new Error(\"View parent must be a string\");\n if (\"sticky\" in e && typeof e.sticky != \"boolean\")\n throw new Error(\"View sticky must be a boolean\");\n if (\"expanded\" in e && typeof e.expanded != \"boolean\")\n throw new Error(\"View expanded must be a boolean\");\n if (e.defaultSortKey && typeof e.defaultSortKey != \"string\")\n throw new Error(\"View defaultSortKey must be a string\");\n return !0;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst hr = function(e) {\n return F().registerEntry(e);\n}, pr = function(e) {\n return F().unregisterEntry(e);\n}, gr = function(e) {\n return F().getEntries(e).sort((r, s) => r.order !== void 0 && s.order !== void 0 && r.order !== s.order ? r.order - s.order : r.displayName.localeCompare(s.displayName, void 0, { numeric: !0, sensitivity: \"base\" }));\n};\nexport {\n Ie as Column,\n Z as DefaultType,\n ye as File,\n Qt as FileAction,\n R as FileType,\n _e as Folder,\n tr as Header,\n Te as Navigation,\n D as Node,\n Q as NodeStatus,\n N as Permission,\n cr as View,\n hr as addNewFileMenuEntry,\n ur as davGetClient,\n sr as davGetDefaultPropfind,\n Ee as davGetFavoritesReport,\n or as davGetRecentSearch,\n be as davParsePermissions,\n te as davRemoteURL,\n ve as davResultToNode,\n ee as davRootPath,\n Y as defaultDavNamespaces,\n j as defaultDavProperties,\n Yt as formatFileSize,\n L as getDavNameSpaces,\n V as getDavProperties,\n dr as getFavoriteNodes,\n er as getFileActions,\n nr as getFileListHeaders,\n ar as getNavigation,\n gr as getNewFileMenuEntries,\n Jt as parseFileSize,\n ir as registerDavProperty,\n Dt as registerFileAction,\n rr as registerFileListHeaders,\n pr as removeNewFileMenuEntry\n};\n","// Current version.\nexport var VERSION = '1.13.6';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\nexport var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\nfunction ie10IsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasStringTagBug ? ie10IsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\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=\" + {\"1359\":\"d217768bf3f39a7359dd\",\"8618\":\"1e8f15db3b14455fef8f\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 1418;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\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(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t1418: 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 = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(92126)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","updatableNotification","getDefaultNotificationFunction","setDefault","callback","this","hide","$row","_","undefined","each","$","toastify","hideToast","console","error","call","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","length","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","PasswordConfirmation","requiresPasswordConfirmation","type","toUpperCase","url","generateOcsUrl","data","success","requirePasswordConfirmation","bind","appConfig","window","oc_appconfig","AppConfig","getValue","app","key","defaultValue","setValue","value","getApps","getKeys","deleteKey","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","Client","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","prototype","textStatus","errorThrown","context","_oc_config","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","append","buttonlist","click","val","ocdialog","defaultButton","closeOnEscape","close","focus","filepicker","multiselect","arguments","mimetype","FilePickerType","Choose","path","legacyCallback","fn","getPath","node","root","startsWith","slice","nodes","map","builder","getFilePickerBuilder","forEach","button","addButton","setButtonFactory","_nodes$","_nodes$2","attributes","basename","target","push","multiSelect","file","CopyMove","Copy","icon","IconCopy","Move","IconMove","setMimeTypeFilter","filter","setFilter","_node$mtime","_node$attributes","_node$attributes2","_node$attributes3","_node$attributes4","_node$attributes5","fileid","mime","mtime","getTime","permissions","etag","hasPreview","mountType","quotaAvailableBytes","sharePermissions","nodeToLegacyFile","allowDirectories","allowDirectoryChooser","includes","setMultiSelect","startAt","build","pick","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","fail","_fileexistsshown","fileexists","original","replacement","controller","self","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","width","height","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","Util","humanFileSize","size","formatDate","lastModified","directory","urlSpec","x","y","c","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","e","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","resolve","readAsArrayBuffer","reject","getCroppedPreview","MimeType","getIconUrl","checkboxId","prop","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","remove","$primaryButton","closest","updatePrimaryButton","checkedCount","on","$checkbox","promise","defer","$messageTemplate","filePath","tmpl","jqXHR","$fileexistsTemplate","manageFromDocument","manageToken","global","emit","token","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","isAdmin","_oc_isadmin","load","loadTranslations","register","_unregister","unregister","translate","translatePlural","Handlebars","startSaving","selector","startAction","stop","finishedSaving","finishedAction","finishedSuccess","finishedError","delay","fadeOut","isPasswordConfirmationRequired","rejectCallback","confirmPassword","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","detach","theme","_theme","_handlers","_pushState","strParams","buildQueryString","history","pushState","location","pathname","navigator","userAgent","toLowerCase","parseInt","patterns","querySelectorAll","pattern","ii","style","fill","stroke","removeAttribute","setAttribute","replaceState","hash","_cancelPop","addOnPopStateHandler","handler","_parseHashQuery","pos","_decodeQuery","query","parseUrlQuery","parseQueryString","search","_onPopState","state","chunkify","tz","charAt","m","History","computerFileSize","string","s","trim","bytes","matches","match","parseFloat","isFinite","b","k","kb","mb","gb","g","tb","pb","p","timestamp","format","TESTING","debug","moment","relativeModifiedDate","diff","fromNow","getScrollBarWidth","_scrollBarWidth","inner","outer","position","top","left","visibility","overflow","appendChild","w1","offsetWidth","w2","clientWidth","removeChild","stripTime","date","Date","getFullYear","getMonth","getDate","naturalSortCompare","a","aa","bb","aNum","Number","bNum","localeCompare","getLanguage","waitFor","interval","internalCallback","setTimeout","isCookieSetToValue","cookies","cookie","_oc_debug","webroot","_oc_webroot","lastIndexOf","coreApps","menuSpeed","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","TAG_FAVORITE","fileIsBlacklisted","Config","blacklist_files_regex","appswebroots","config","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","_reloadCalled","_userIsNavigatingAway","timer","seconds","setInterval","clearInterval","reload","registerXHRForErrorProcessing","loadCallback","readyState","errorCallback","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","event","preventDefault","is","slideToggle","showMenu","unregisterMenu","off","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","queryString","components","part","decodeURIComponent","msg","Plugins","generateFilePath","generateUrl","get","namespaces","tail","set","getRootPath","getRootUrl","imagePath","redirect","targetURL","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","singleMatcher","RegExp","multiMatcher","decodeComponents","right","Array","concat","decode","tokens","splitOnFirst","separator","TypeError","separatorIndex","includeKeys","object","predicate","isArray","descriptor","getOwnPropertyDescriptor","enumerable","defineProperty","Reflect","ownKeys","isNullOrUndefined","strictUriEncode","replaceAll","charCodeAt","encodeFragmentIdentifier","Symbol","validateArrayFormatSeparator","encode","strict","encodedURI","replaceMap","exec","entries","keys","customDecodeURIComponent","keysSorter","sort","removeHash","hashStart","parseValue","parseNumbers","isNaN","parseBooleans","extract","queryStart","arrayFormat","arrayFormatSeparator","formatter","accumulator","isEncodedArray","newValue","item","test","arrayValue","flat","parserForArrayFormat","returnValue","parameter","parameter_","key2","value2","reduce","Boolean","shouldFilter","skipNull","skipEmptyString","index","keyValueSeparator","encoderForArrayFormat","objectCopy","parseUrl","url_","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","getHash","urlObjectForFragmentEncode","exclude","ArrowRight","NcButton","String","default","valueLoading","loading","required","invertedColors","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","_c","_self","$event","$emit","scopedSlots","_u","staticClass","proxy","_v","_s","LoginButton","NcPasswordField","NcTextField","NcNoteCard","username","redirectUrl","errors","messages","throttleDelay","autoCompleteAllowed","directLogin","emailStates","_Intl$DateTimeFormat","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","timezoneOffset","getTimezoneOffset","headline","productName","user","computed","isError","invalidPassword","userDisabled","errorLabel","apacheAuthFailed","csrfCheckFailed","internalException","loadingIcon","loginActionUrl","emailEnabled","every","loginText","mounted","$refs","inputField","methods","updateUsername","submit","ref","_e","_l","class","staticStyle","domProps","shake","emits","fillColor","_b","$attrs","NoValidCredentials","InformationIcon","LockOpenIcon","isHttps","isLocalhost","hasPublicKeyCredential","validCredentials","authenticate","loginForm","checkValidity","getAuthenticationData","publicKey","sign","completeAuthentication","catch","changeUsername","base64urlDecode","pad","atob","loginName","Axios","post","resp","startAuthentication","hasOwnProperty","challenge","Uint8Array","from","allowCredentials","arrayToBase64String","btoa","fromCharCode","credentials","rawId","authenticatorData","clientDataJSON","signature","userHandle","finishAuthentication","_ref","defaultRedirectUrl","resetPasswordLink","watch","axios","resetPasswordTarget","encrypted","proceed","encryption","directives","rawName","expression","composing","_i","$$a","$$el","$$c","checked","$$i","warning","clear","localStorage","sessionStorage","LoginForm","PasswordLessLoginForm","ResetPassword","UpdatePassword","loadState","passwordlessLogin","resetPassword","canResetPassword","resetPasswordUser","direct","hasPasswordless","countAlternativeLogins","alternativeLogins","PublicKeyCredential","hideLoginForm","passwordResetFinished","alternativeLogin","L10n","Vue","mixin","Nextcloud","extend","LoginView","$mount","exports","previousBackbone","VERSION","noConflict","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","iteratee","events","opts","names","_events","onApi","ctx","listening","_listeners","interop","listenTo","obj","_listenId","uniqueId","listeningTo","_listeningTo","Listening","tryCatchOn","handlers","offApi","stopListening","ids","isEmpty","remaining","_callback","cleanup","once","onceMap","listenToOnce","offer","args","triggerApi","objEvents","allEvents","all","triggerEvents","ev","l","a1","a2","a3","listener","unbind","Model","preinitialize","cid","cidPrefix","defaults","initialize","validationError","idAttribute","sync","escape","has","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","prevId","_pending","hasChanged","changedAttributes","old","previous","previousAttributes","fetch","serverAttrs","wrapError","save","wait","validate","isNew","destroy","base","constructor","isValid","models","comparator","_reset","reset","setOptions","add","merge","addOptions","splice","array","at","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","isString","existing","_prepareModel","_addReference","orderChanged","some","_removeReference","previousModels","unshift","_byId","modelId","where","first","findWhere","isFunction","sortBy","pluck","callbackOpts","_forwardPristineError","values","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","ITERATOR_KEYSVALUES","_onModelEvent","$$iterator","iterator","kind","_collection","_kind","_index","next","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","delegate","eventName","undelegate","_createElement","className","_setAttributes","addUnderscoreMethods","Class","attribute","cb","defaultVal","addMethod","instance","isObject","modelMatcher","matcher","collect","foldl","inject","reduceRight","foldr","detect","select","any","include","contains","invoke","toArray","head","take","initial","rest","drop","last","without","difference","shuffle","chain","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","pairs","invert","omit","Base","mappings","functions","memo","dataType","contentType","_method","beforeSend","setRequestHeader","ajax","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","fragment","_extractParameters","execute","navigate","optional","param","checkUrl","routeStripper","rootStripper","pathStripper","started","atRoot","getSearch","matchRoot","decodeFragment","decodeURI","getFragment","_usePushState","_wantsHashChange","start","_trailingSlash","trailingSlash","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","_hasPushState","rootPath","display","tabIndex","iWindow","insertBefore","firstChild","contentWindow","open","attachEvent","_checkUrlInterval","loadUrl","removeEventListener","detachEvent","notfound","decodedFragment","_updateHash","protoProps","staticProps","child","__super__","_debug","factory","___CSS_LOADER_EXPORT___","module","_XML_CHAR_MAP","_escapeXml","ch","userName","namespace","property","parseClarkNotation","_renderPropSet","propName","propValue","mkcol","responseType","xhrProvider","onProgress","upload","send","Promise","fulfill","onreadystatechange","resultBody","parseMultiStatus","ontimeout","XMLHttpRequest","_parsePropNode","propNode","childNodes","subNodes","nodeType","textContent","xmlBody","doc","DOMParser","parseFromString","resolver","foo","responseIterator","evaluate","XPathResult","ANY_TYPE","responseNode","iterateNext","stringValue","propStatIterator","propStatNode","propIterator","namespaceURI","localName","baseParts","subString","scheme","propertyName","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","setApp","setUid","C","P","Yt","r","log","d","pow","toFixed","toLocaleString","N","NONE","CREATE","READ","UPDATE","DELETE","SHARE","ALL","Y","nc","oc","ocs","V","_nc_dav_properties","L","_nc_dav_namespaces","sr","or","R","Folder","File","J","X","crtime","owner","Q","NEW","FAILED","LOADING","LOCKED","D","_data","_attributes","_knownDavService","updateMtime","deleteProperty","Proxy","encodedSource","origin","extension","isDavRessource","move","rename","ye","super","ee","te","ur","setHeaders","requesttoken","u","dr","async","getDirectoryContents","details","includeSelf","filename","ve","be","lastmod","getcontentlength","O","isExist","isEmptyObject","f","isName","getAllMatches","startIndex","lastIndex","nameRegexp","re","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","buildOptions","defaultOptions","ne","ie","Nt","bt","Et","prettify","yt","vt","se","Pt","h","xt","oe","K","E","indentBy","suppressUnpairedNode","suppressEmptyNode","endsWith","suppressBooleanAttributes","entities","regex","Ft","Vt","oneListGroup","isAttribute","attrPrefixLen","St","processTextOrObjNode","Lt","indentate","Rt","tagEndChar","newLine","j2x","buildTextValNode","attrStr","buildObjectNode","repeat","arrayNodeName","buildAttrPairStr","replaceEntitiesValue","closeTag","Function","ArrayProto","ObjProto","SymbolProto","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","nativeKeys","nativeCreate","nativeIsView","isView","_isNaN","_isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","restArguments","func","isNull","isUndefined","isBoolean","isElement","tagTester","tag","nodelist","Int8Array","hasStringTagBug","isIE11","Map","isDataView","getInt8","isArrayBuffer","buffer","isArguments","isSymbol","isNumber","constant","createSizePropertyCheck","getSizeProperty","sizeProperty","shallowProperty","typedArrayPattern","collectNonEnumProps","emulatedSet","nonEnumIdx","proto","isMatch","_keys","_wrapped","toBufferView","bufferSource","byteOffset","valueOf","tagDataView","eq","aStack","bStack","deepEq","areArrays","aCtor","bCtor","allKeys","ie11fingerprint","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","setMethods","createAssigner","keysFunc","baseCreate","Ctor","extendOwn","tap","interceptor","toPath","deepGet","identity","optimizeCb","argCount","baseIteratee","Infinity","mapObject","currentKey","noop","propertyOf","times","accum","random","now","createEscaper","escaper","testRegexp","replaceRegexp","templateSettings","interpolate","noMatch","escapes","escapeChar","bareIdentifier","template","settings","oldSettings","offset","argument","variable","fallback","idCounter","prefix","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","placeholder","bound","callArgs","flatten","output","idx","len","memoize","hasher","cache","address","throttle","later","leading","throttled","_now","clearTimeout","debounce","immediate","passed","debounced","_args","wrap","wrapper","negate","compose","after","before","findKey","createPredicateIndexFinder","dir","sortedIndex","low","high","mid","createIndexFinder","predicateFind","createReduce","reducer","list","fromIndex","guard","contextPath","lastComputed","v","reStrSymbol","rand","temp","criteria","group","behavior","pass","keyInObj","compact","otherArrays","uniq","isSorted","seen","arrays","intersection","argsLength","unzip","range","step","chunk","chainResult","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","chunkIds","priority","notFulfilled","fulfilled","getter","__esModule","definition","chunkId","promises","globalThis","script","needAttach","scripts","charset","onScriptComplete","onerror","doneFns","parentNode","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","baseURI","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"core-login.js?v=d89572e36fb9de7fb18f","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/core/src/OC/notification.js","webpack:///nextcloud/core/src/OC/xhr-error.js","webpack:///nextcloud/core/src/OC/apps.js","webpack:///nextcloud/core/src/OCP/appconfig.js","webpack:///nextcloud/core/src/OC/appconfig.js","webpack:///nextcloud/core/src/OC/appswebroots.js","webpack:///nextcloud/core/src/OC/backbone-webdav.js","webpack:///nextcloud/core/src/OC/backbone.js","webpack:///nextcloud/core/src/OC/query-string.js","webpack:///nextcloud/core/src/OC/config.js","webpack:///nextcloud/core/src/OC/currentuser.js","webpack:///nextcloud/core/src/OC/dialogs.js","webpack:///nextcloud/core/src/OC/requesttoken.js","webpack:///nextcloud/core/src/OC/eventsource.js","webpack:///nextcloud/core/src/OC/menu.js","webpack:///nextcloud/core/src/OC/constants.js","webpack:///nextcloud/core/src/OC/admin.js","webpack:///nextcloud/core/src/OC/l10n.js","webpack:///nextcloud/core/src/OC/routing.js","webpack:///nextcloud/core/src/OC/msg.js","webpack:///nextcloud/core/src/OC/password-confirmation.js","webpack:///nextcloud/core/src/OC/plugins.js","webpack:///nextcloud/core/src/OC/theme.js","webpack:///nextcloud/core/src/OC/util-history.js","webpack:///nextcloud/core/src/OC/util.js","webpack:///nextcloud/core/src/OC/debug.js","webpack:///nextcloud/core/src/OC/webroot.js","webpack:///nextcloud/core/src/OC/index.js","webpack:///nextcloud/core/src/OC/capabilities.js","webpack:///nextcloud/core/src/OC/host.js","webpack:///nextcloud/core/src/OC/get_set.js","webpack:///nextcloud/core/src/OC/navigation.js","webpack://nextcloud/./core/src/views/Login.vue?ae59","webpack:///nextcloud/node_modules/decode-uri-component/index.js","webpack:///nextcloud/node_modules/split-on-first/index.js","webpack:///nextcloud/node_modules/query-string/node_modules/filter-obj/index.js","webpack:///nextcloud/node_modules/query-string/base.js","webpack:///nextcloud/node_modules/query-string/index.js","webpack://nextcloud/./core/src/components/login/LoginForm.vue?4366","webpack:///nextcloud/core/src/components/login/LoginButton.vue","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=script&lang=js","webpack://nextcloud/./core/src/components/login/LoginButton.vue?858b","webpack://nextcloud/./core/src/components/login/LoginButton.vue?14f0","webpack://nextcloud/./core/src/components/login/LoginButton.vue?82aa","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=script&lang=js","webpack:///nextcloud/core/src/components/login/LoginForm.vue","webpack://nextcloud/./core/src/components/login/LoginForm.vue?c01d","webpack://nextcloud/./core/src/components/login/LoginForm.vue?a678","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?16ec","webpack:///nextcloud/node_modules/vue-material-design-icons/Information.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/Information.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/Information.vue?8a14","webpack:///nextcloud/node_modules/vue-material-design-icons/Information.vue?vue&type=template&id=70e6f3ef","webpack:///nextcloud/node_modules/vue-material-design-icons/LockOpen.vue?vue&type=script&lang=js","webpack:///nextcloud/node_modules/vue-material-design-icons/LockOpen.vue","webpack://nextcloud/./node_modules/vue-material-design-icons/LockOpen.vue?104d","webpack:///nextcloud/node_modules/vue-material-design-icons/LockOpen.vue?vue&type=template&id=1b7ea4e7","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=script&lang=js","webpack:///nextcloud/core/src/services/WebAuthnAuthenticationService.js","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?993a","webpack://nextcloud/./core/src/components/login/PasswordLessLoginForm.vue?09eb","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?7cf3","webpack:///nextcloud/core/src/components/login/ResetPassword.vue","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=script&lang=js","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?2553","webpack://nextcloud/./core/src/components/login/ResetPassword.vue?9d75","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=script&lang=js","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?1d67","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?30ca","webpack://nextcloud/./core/src/components/login/UpdatePassword.vue?1c8f","webpack:///nextcloud/core/src/views/Login.vue","webpack:///nextcloud/core/src/views/Login.vue?vue&type=script&lang=js","webpack://nextcloud/./core/src/views/Login.vue?5d7b","webpack://nextcloud/./core/src/views/Login.vue?3468","webpack:///nextcloud/core/src/mixins/Nextcloud.js","webpack:///nextcloud/core/src/login.js","webpack:///nextcloud/node_modules/backbone/backbone.js","webpack:///nextcloud/core/src/components/login/LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/components/login/LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/components/login/PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/components/login/ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true","webpack:///nextcloud/core/src/views/Login.vue?vue&type=style&index=0&id=2e7d9221&prod&lang=scss","webpack:///nextcloud/core/src/components/login/UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css","webpack:///nextcloud/node_modules/davclient.js/lib/client.js","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.mjs","webpack:///nextcloud/node_modules/underscore/modules/_setup.js","webpack:///nextcloud/node_modules/underscore/modules/restArguments.js","webpack:///nextcloud/node_modules/underscore/modules/isObject.js","webpack:///nextcloud/node_modules/underscore/modules/isNull.js","webpack:///nextcloud/node_modules/underscore/modules/isUndefined.js","webpack:///nextcloud/node_modules/underscore/modules/isBoolean.js","webpack:///nextcloud/node_modules/underscore/modules/isElement.js","webpack:///nextcloud/node_modules/underscore/modules/_tagTester.js","webpack:///nextcloud/node_modules/underscore/modules/isString.js","webpack:///nextcloud/node_modules/underscore/modules/isNumber.js","webpack:///nextcloud/node_modules/underscore/modules/isDate.js","webpack:///nextcloud/node_modules/underscore/modules/isRegExp.js","webpack:///nextcloud/node_modules/underscore/modules/isError.js","webpack:///nextcloud/node_modules/underscore/modules/isSymbol.js","webpack:///nextcloud/node_modules/underscore/modules/isArrayBuffer.js","webpack:///nextcloud/node_modules/underscore/modules/isFunction.js","webpack:///nextcloud/node_modules/underscore/modules/_hasObjectTag.js","webpack:///nextcloud/node_modules/underscore/modules/_stringTagBug.js","webpack:///nextcloud/node_modules/underscore/modules/isDataView.js","webpack:///nextcloud/node_modules/underscore/modules/isArray.js","webpack:///nextcloud/node_modules/underscore/modules/_has.js","webpack:///nextcloud/node_modules/underscore/modules/isArguments.js","webpack:///nextcloud/node_modules/underscore/modules/isFinite.js","webpack:///nextcloud/node_modules/underscore/modules/isNaN.js","webpack:///nextcloud/node_modules/underscore/modules/constant.js","webpack:///nextcloud/node_modules/underscore/modules/_createSizePropertyCheck.js","webpack:///nextcloud/node_modules/underscore/modules/_shallowProperty.js","webpack:///nextcloud/node_modules/underscore/modules/_getByteLength.js","webpack:///nextcloud/node_modules/underscore/modules/_isBufferLike.js","webpack:///nextcloud/node_modules/underscore/modules/isTypedArray.js","webpack:///nextcloud/node_modules/underscore/modules/_getLength.js","webpack:///nextcloud/node_modules/underscore/modules/_collectNonEnumProps.js","webpack:///nextcloud/node_modules/underscore/modules/keys.js","webpack:///nextcloud/node_modules/underscore/modules/isEmpty.js","webpack:///nextcloud/node_modules/underscore/modules/isMatch.js","webpack:///nextcloud/node_modules/underscore/modules/underscore.js","webpack:///nextcloud/node_modules/underscore/modules/_toBufferView.js","webpack:///nextcloud/node_modules/underscore/modules/isEqual.js","webpack:///nextcloud/node_modules/underscore/modules/allKeys.js","webpack:///nextcloud/node_modules/underscore/modules/_methodFingerprint.js","webpack:///nextcloud/node_modules/underscore/modules/isMap.js","webpack:///nextcloud/node_modules/underscore/modules/isWeakMap.js","webpack:///nextcloud/node_modules/underscore/modules/isSet.js","webpack:///nextcloud/node_modules/underscore/modules/isWeakSet.js","webpack:///nextcloud/node_modules/underscore/modules/values.js","webpack:///nextcloud/node_modules/underscore/modules/pairs.js","webpack:///nextcloud/node_modules/underscore/modules/invert.js","webpack:///nextcloud/node_modules/underscore/modules/functions.js","webpack:///nextcloud/node_modules/underscore/modules/_createAssigner.js","webpack:///nextcloud/node_modules/underscore/modules/extend.js","webpack:///nextcloud/node_modules/underscore/modules/extendOwn.js","webpack:///nextcloud/node_modules/underscore/modules/defaults.js","webpack:///nextcloud/node_modules/underscore/modules/_baseCreate.js","webpack:///nextcloud/node_modules/underscore/modules/create.js","webpack:///nextcloud/node_modules/underscore/modules/clone.js","webpack:///nextcloud/node_modules/underscore/modules/tap.js","webpack:///nextcloud/node_modules/underscore/modules/toPath.js","webpack:///nextcloud/node_modules/underscore/modules/_toPath.js","webpack:///nextcloud/node_modules/underscore/modules/_deepGet.js","webpack:///nextcloud/node_modules/underscore/modules/get.js","webpack:///nextcloud/node_modules/underscore/modules/has.js","webpack:///nextcloud/node_modules/underscore/modules/identity.js","webpack:///nextcloud/node_modules/underscore/modules/matcher.js","webpack:///nextcloud/node_modules/underscore/modules/property.js","webpack:///nextcloud/node_modules/underscore/modules/_optimizeCb.js","webpack:///nextcloud/node_modules/underscore/modules/_baseIteratee.js","webpack:///nextcloud/node_modules/underscore/modules/iteratee.js","webpack:///nextcloud/node_modules/underscore/modules/_cb.js","webpack:///nextcloud/node_modules/underscore/modules/mapObject.js","webpack:///nextcloud/node_modules/underscore/modules/noop.js","webpack:///nextcloud/node_modules/underscore/modules/propertyOf.js","webpack:///nextcloud/node_modules/underscore/modules/times.js","webpack:///nextcloud/node_modules/underscore/modules/random.js","webpack:///nextcloud/node_modules/underscore/modules/now.js","webpack:///nextcloud/node_modules/underscore/modules/_createEscaper.js","webpack:///nextcloud/node_modules/underscore/modules/_escapeMap.js","webpack:///nextcloud/node_modules/underscore/modules/escape.js","webpack:///nextcloud/node_modules/underscore/modules/unescape.js","webpack:///nextcloud/node_modules/underscore/modules/_unescapeMap.js","webpack:///nextcloud/node_modules/underscore/modules/templateSettings.js","webpack:///nextcloud/node_modules/underscore/modules/template.js","webpack:///nextcloud/node_modules/underscore/modules/result.js","webpack:///nextcloud/node_modules/underscore/modules/uniqueId.js","webpack:///nextcloud/node_modules/underscore/modules/chain.js","webpack:///nextcloud/node_modules/underscore/modules/_executeBound.js","webpack:///nextcloud/node_modules/underscore/modules/partial.js","webpack:///nextcloud/node_modules/underscore/modules/bind.js","webpack:///nextcloud/node_modules/underscore/modules/_isArrayLike.js","webpack:///nextcloud/node_modules/underscore/modules/_flatten.js","webpack:///nextcloud/node_modules/underscore/modules/bindAll.js","webpack:///nextcloud/node_modules/underscore/modules/memoize.js","webpack:///nextcloud/node_modules/underscore/modules/delay.js","webpack:///nextcloud/node_modules/underscore/modules/defer.js","webpack:///nextcloud/node_modules/underscore/modules/throttle.js","webpack:///nextcloud/node_modules/underscore/modules/debounce.js","webpack:///nextcloud/node_modules/underscore/modules/wrap.js","webpack:///nextcloud/node_modules/underscore/modules/negate.js","webpack:///nextcloud/node_modules/underscore/modules/compose.js","webpack:///nextcloud/node_modules/underscore/modules/after.js","webpack:///nextcloud/node_modules/underscore/modules/before.js","webpack:///nextcloud/node_modules/underscore/modules/once.js","webpack:///nextcloud/node_modules/underscore/modules/findKey.js","webpack:///nextcloud/node_modules/underscore/modules/_createPredicateIndexFinder.js","webpack:///nextcloud/node_modules/underscore/modules/findIndex.js","webpack:///nextcloud/node_modules/underscore/modules/findLastIndex.js","webpack:///nextcloud/node_modules/underscore/modules/sortedIndex.js","webpack:///nextcloud/node_modules/underscore/modules/_createIndexFinder.js","webpack:///nextcloud/node_modules/underscore/modules/indexOf.js","webpack:///nextcloud/node_modules/underscore/modules/lastIndexOf.js","webpack:///nextcloud/node_modules/underscore/modules/find.js","webpack:///nextcloud/node_modules/underscore/modules/findWhere.js","webpack:///nextcloud/node_modules/underscore/modules/each.js","webpack:///nextcloud/node_modules/underscore/modules/map.js","webpack:///nextcloud/node_modules/underscore/modules/_createReduce.js","webpack:///nextcloud/node_modules/underscore/modules/reduce.js","webpack:///nextcloud/node_modules/underscore/modules/reduceRight.js","webpack:///nextcloud/node_modules/underscore/modules/filter.js","webpack:///nextcloud/node_modules/underscore/modules/reject.js","webpack:///nextcloud/node_modules/underscore/modules/every.js","webpack:///nextcloud/node_modules/underscore/modules/some.js","webpack:///nextcloud/node_modules/underscore/modules/contains.js","webpack:///nextcloud/node_modules/underscore/modules/invoke.js","webpack:///nextcloud/node_modules/underscore/modules/pluck.js","webpack:///nextcloud/node_modules/underscore/modules/where.js","webpack:///nextcloud/node_modules/underscore/modules/max.js","webpack:///nextcloud/node_modules/underscore/modules/min.js","webpack:///nextcloud/node_modules/underscore/modules/toArray.js","webpack:///nextcloud/node_modules/underscore/modules/sample.js","webpack:///nextcloud/node_modules/underscore/modules/shuffle.js","webpack:///nextcloud/node_modules/underscore/modules/sortBy.js","webpack:///nextcloud/node_modules/underscore/modules/_group.js","webpack:///nextcloud/node_modules/underscore/modules/groupBy.js","webpack:///nextcloud/node_modules/underscore/modules/indexBy.js","webpack:///nextcloud/node_modules/underscore/modules/countBy.js","webpack:///nextcloud/node_modules/underscore/modules/partition.js","webpack:///nextcloud/node_modules/underscore/modules/size.js","webpack:///nextcloud/node_modules/underscore/modules/_keyInObj.js","webpack:///nextcloud/node_modules/underscore/modules/pick.js","webpack:///nextcloud/node_modules/underscore/modules/omit.js","webpack:///nextcloud/node_modules/underscore/modules/initial.js","webpack:///nextcloud/node_modules/underscore/modules/first.js","webpack:///nextcloud/node_modules/underscore/modules/rest.js","webpack:///nextcloud/node_modules/underscore/modules/last.js","webpack:///nextcloud/node_modules/underscore/modules/compact.js","webpack:///nextcloud/node_modules/underscore/modules/flatten.js","webpack:///nextcloud/node_modules/underscore/modules/difference.js","webpack:///nextcloud/node_modules/underscore/modules/without.js","webpack:///nextcloud/node_modules/underscore/modules/uniq.js","webpack:///nextcloud/node_modules/underscore/modules/union.js","webpack:///nextcloud/node_modules/underscore/modules/intersection.js","webpack:///nextcloud/node_modules/underscore/modules/unzip.js","webpack:///nextcloud/node_modules/underscore/modules/zip.js","webpack:///nextcloud/node_modules/underscore/modules/object.js","webpack:///nextcloud/node_modules/underscore/modules/range.js","webpack:///nextcloud/node_modules/underscore/modules/chunk.js","webpack:///nextcloud/node_modules/underscore/modules/_chainResult.js","webpack:///nextcloud/node_modules/underscore/modules/mixin.js","webpack:///nextcloud/node_modules/underscore/modules/underscore-array-methods.js","webpack:///nextcloud/node_modules/underscore/modules/index-default.js","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/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/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 = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\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\tscript.timeout = 120;\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 * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {number} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&')\n\t\t\t\t.split('<').join('<')\n\t\t\t\t.split('>').join('>')\n\t\t\t\t.split('\"').join('"')\n\t\t\t\t.split('\\'').join(''')\n\t\t}\n\n\t\toptions = options || {}\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(escapeHTML(text), options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowUpdate(text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast()\n\t\t}\n\t\tthis.updatableNotification = showMessage(text, { timeout: TOAST_PERMANENT_TIMEOUT })\n\t\tthis.updatableNotification.toastElement.toastify = this.updatableNotification\n\t\treturn $(this.updatableNotification.toastElement)\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {Array} [options] options array\n\t * @param {number} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @return {JQuery} the toast element\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowTemporary(text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || TOAST_DEFAULT_TIMEOUT\n\t\tconst toast = showMessage(text, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t *\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tisHidden() {\n\t\treturn !$('#content').find('.toastify').length\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index.js'\nimport Notification from './notification.js'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, { trailing: false })\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function() {\n\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t}\n\t\t\t\t\ttimer++\n\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Bernhard Posselt 2014\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\nlet dynamicSlideToggleEnabled = false\n\nconst Apps = {\n\tenableDynamicSlideToggle() {\n\t\tdynamicSlideToggleEnabled = true\n\t},\n}\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.removeClass('disappear').show()\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.hide().addClass('disappear')\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tlet buttons = $('[data-apps-slide-toggle]')\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings')\n\t}\n\n\t$(document).click(function(event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]')\n\t\t}\n\n\t\tbuttons.each(function(index, button) {\n\n\t\t\tconst areaSelector = $(button).data('apps-slide-toggle')\n\t\t\tconst area = $(areaSelector)\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction hideArea() {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('hide'))\n\t\t\t\t})\n\t\t\t\tarea.removeClass('opened')\n\t\t\t\t$(button).removeClass('opened')\n\t\t\t\t$(button).attr('aria-expanded', 'false')\n\t\t\t}\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction showArea() {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('show'))\n\t\t\t\t})\n\t\t\t\tarea.addClass('opened')\n\t\t\t\t$(button).addClass('opened')\n\t\t\t\t$(button).attr('aria-expanded', 'true')\n\t\t\t\tconst input = $(areaSelector + ' [autofocus]')\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea()\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tconst closest = $(event.target).closest(areaSelector)\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t})\n}\n\nexport default Apps\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport OC from '../OC/index.js'\n\n/**\n * @param {string} method 'post' or 'delete'\n * @param {string} endpoint endpoint\n * @param {object} [options] destructuring object\n * @param {object} [options.data] option data\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n */\nfunction call(method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options))\n\t\treturn\n\t}\n\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/apps') + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error,\n\t})\n}\n\n/**\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @since 11.0.0\n */\nexport function getApps(options) {\n\tcall('get', '', options)\n}\n\n/**\n * @param {string} app app id\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getKeys(app, options) {\n\tcall('get', '/' + app, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string | Function} defaultValue default value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getValue(app, key, defaultValue, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tdefaultValue,\n\t}\n\n\tcall('get', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string} value value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function setValue(app, key, value, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tvalue,\n\t}\n\n\tcall('post', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function deleteKey(app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options)\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\n import { getValue, setValue, getApps, getKeys, deleteKey } from '../OCP/appconfig.js'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function(app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function(app, key, value) {\n\t\tsetValue(app, key, value)\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function(callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function(app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function(app, key) {\n\t\tdeleteKey(app, key)\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/**\n * Copyright (c) 2015\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport { dav } from 'davclient.js'\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n}\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError() {\n\tthrow new Error('A \"url\" property or function must be specified')\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult(result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function(subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties)\n\t\t})\n\t}\n\tvar props = {\n\t\thref: result.href\n\t}\n\n\t_.each(result.propStat, function(propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key]\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key]\n\t\t}\n\t})\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href)\n\t}\n\n\treturn props\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @returns {string} id\n */\nfunction parseIdFromLocation(url) {\n\tvar queryPos = url.indexOf('?')\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos)\n\t}\n\n\tvar parts = url.split('/')\n\tvar result\n\tdo {\n\t\tresult = parts[parts.length - 1]\n\t\tparts.pop()\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0)\n\n\treturn result\n}\n\nfunction isSuccessStatus(status) {\n\treturn status >= 200 && status <= 299\n}\n\nfunction convertModelAttributesToDavProperties(attrs, davProperties) {\n\tvar props = {}\n\tvar key\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key]\n\t\tvar value = attrs[key]\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key)\n\t\t\tchangedProp = key\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value\n\t\t}\n\t\tprops[changedProp] = value\n\t}\n\treturn props\n}\n\nfunction callPropFind(client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function(response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping)\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift()\n\t\t\t\t}\n\n\t\t\t\toptions.success(results)\n\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response)\n\t\t}\n\t})\n}\n\nfunction callPropPatch(client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function(result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON())\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result)\n\t\t}\n\t})\n\n}\n\nfunction callMkCol(client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers)\n\t})\n}\n\nfunction callMethod(client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json'\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON()\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location')\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader)\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping))\n\t\t\t} else {\n\t\t\t\toptions.success(result.body)\n\t\t\t}\n\t\t}\n\t})\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t})\n\tclient.resolveUrl = function() {\n\t\treturn options.url\n\t}\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers)\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers)\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers)\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers)\n\t} else {\n\t\treturn callMethod(client, options, model, headers)\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = { type: methodMap[method] || method }\n\tvar isCollection = (model instanceof Backbone.Collection)\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL'\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT'\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError()\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options))\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model)\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties)\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1\n\t\t\t} else {\n\t\t\t\toptions.depth = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error\n\toptions.error = function(xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus\n\t\toptions.errorThrown = errorThrown\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown)\n\t\t}\n\t}\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model)\n\tmodel.trigger('request', model, xhr, options)\n\treturn xhr\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport VendorBackbone from 'backbone'\nimport { davCall, davSync } from './backbone-webdav.js'\n\nconst Backbone = VendorBackbone.noConflict()\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n})\n\nexport default Backbone\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * Parses a URL query string into a JS map\n *\n * @param {string} queryString query string in the format param1=1234¶m2=abcde¶m3=xyz\n * @return {Object<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {Object<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst config = window._oc_config || {}\n\nexport default config\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\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\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport IconMove from '@mdi/svg/svg/folder-move.svg?raw'\nimport IconCopy from '@mdi/svg/svg/folder-multiple.svg?raw'\n\nimport OC from './index.js'\nimport { FilePickerType, getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { basename } from 'path'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_MOVE: 2,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_COPY: 3,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\t/** @deprecated use FilePickerType from `@nextcloud/dialogs` */\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {(number|{type: number, confirm: string, cancel: string, confirmClasses: string})} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\n\t/**\n\t * Legacy wrapper to the new Vue based filepicker from `@nextcloud/dialogs`\n\t *\n\t * Prefer to use the Vue filepicker directly instead.\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {Function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetype] mimetype to filter by - directories will always be included\n\t * @param {boolean} [_modal] do not use\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {object} [options] additonal options that need to be set\n\t * @param {Function} [options.filter] filter function for advanced filtering\n\t * @param {boolean} [options.allowDirectoryChooser] Allow to select directories\n\t * @deprecated since 27.1.0 use the filepicker from `@nextcloud/dialogs` instead\n\t */\n\tfilepicker(title, callback, multiselect = false, mimetype = undefined, _modal = undefined, type = FilePickerType.Choose, path = undefined, options = undefined) {\n\n\t\t/**\n\t\t * Create legacy callback wrapper to support old filepicker syntax\n\t\t * @param fn The original callback\n\t\t * @param type The file picker type which was used to pick the file(s)\n\t\t */\n\t\tconst legacyCallback = (fn, type) => {\n\t\t\tconst getPath = (node) => {\n\t\t\t\tconst root = node?.root || ''\n\t\t\t\tlet path = node?.path || ''\n\t\t\t\t// TODO: Fix this in @nextcloud/files\n\t\t\t\tif (path.startsWith(root)) {\n\t\t\t\t\tpath = path.slice(root.length) || '/'\n\t\t\t\t}\n\t\t\t\treturn path\n\t\t\t}\n\n\t\t\tif (multiselect) {\n\t\t\t\treturn (nodes) => fn(nodes.map(getPath), type)\n\t\t\t} else {\n\t\t\t\treturn (nodes) => fn(getPath(nodes[0]), type)\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Coverting a Node into a legacy file info to support the OC.dialogs.filepicker filter function\n\t\t * @param node The node to convert\n\t\t */\n\t\tconst nodeToLegacyFile = (node) => ({\n\t\t\tid: node.fileid || null,\n\t\t\tpath: node.path,\n\t\t\tmimetype: node.mime || null,\n\t\t\tmtime: node.mtime?.getTime() || null,\n\t\t\tpermissions: node.permissions,\n\t\t\tname: node.attributes?.displayName || node.basename,\n\t\t\tetag: node.attributes?.etag || null,\n\t\t\thasPreview: node.attributes?.hasPreview || null,\n\t\t\tmountType: node.attributes?.mountType || null,\n\t\t\tquotaAvailableBytes: node.attributes?.quotaAvailableBytes || null,\n\t\t\ticon: null,\n\t\t\tsharePermissions: null,\n\t\t})\n\n\t\tconst builder = getFilePickerBuilder(title)\n\n\t\t// Setup buttons\n\t\tif (type === this.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t(options.buttons || []).forEach((button) => {\n\t\t\t\tbuilder.addButton({\n\t\t\t\t\tcallback: legacyCallback(callback, button.type),\n\t\t\t\t\tlabel: button.text,\n\t\t\t\t\ttype: button.defaultButton ? 'primary' : 'secondary',\n\t\t\t\t})\n\t\t\t})\n\t\t} else {\n\t\t\tbuilder.setButtonFactory((nodes, path) => {\n\t\t\t\tconst buttons = []\n\t\t\t\tconst node = nodes?.[0]?.attributes?.displayName || nodes?.[0]?.basename\n\t\t\t\tconst target = node || basename(path)\n\n\t\t\t\tif (type === FilePickerType.Choose) {\n\t\t\t\t\tbuttons.push({\n\t\t\t\t\t\tcallback: legacyCallback(callback, FilePickerType.Choose),\n\t\t\t\t\t\tlabel: node && !this.multiSelect ? t('core', 'Choose {file}', { file: node }) : t('core', 'Choose'),\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === FilePickerType.CopyMove || type === FilePickerType.Copy) {\n\t\t\t\t\tbuttons.push({\n\t\t\t\t\t\tcallback: legacyCallback(callback, FilePickerType.Copy),\n\t\t\t\t\t\tlabel: target ? t('core', 'Copy to {target}', { target }) : t('core', 'Copy'),\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\ticon: IconCopy,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === FilePickerType.Move || type === FilePickerType.CopyMove) {\n\t\t\t\t\tbuttons.push({\n\t\t\t\t\t\tcallback: legacyCallback(callback, FilePickerType.Move),\n\t\t\t\t\t\tlabel: target ? t('core', 'Move to {target}', { target }) : t('core', 'Move'),\n\t\t\t\t\t\ttype: type === FilePickerType.Move ? 'primary' : 'secondary',\n\t\t\t\t\t\ticon: IconMove,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn buttons\n\t\t\t})\n\t\t}\n\n\t\tif (mimetype) {\n\t\t\tbuilder.setMimeTypeFilter(typeof mimetype === 'string' ? [mimetype] : (mimetype || []))\n\t\t}\n\t\tif (typeof options?.filter === 'function') {\n\t\t\tbuilder.setFilter((node) => options.filter(nodeToLegacyFile(node)))\n\t\t}\n\t\tbuilder.allowDirectories(options?.allowDirectoryChooser === true || mimetype?.includes('httpd/unix-directory') || false)\n\t\t\t.setMultiSelect(multiselect)\n\t\t\t.startAt(path)\n\t\t\t.build()\n\t\t\t.pick()\n\t},\n\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\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\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\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}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken.js'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe></iframe>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\n/** @typedef {import('jquery')} jQuery */\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants.js'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {void}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\tif (currentMenuToggle) {\n\t\tcurrentMenuToggle.attr('aria-expanded', false)\n\t}\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {boolean} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Handlebars from 'handlebars'\nimport {\n\tloadTranslations,\n\ttranslate,\n\ttranslatePlural,\n\tregister,\n\tunregister,\n} from '@nextcloud/l10n'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n * @deprecated 26.0.0 use https://www.npmjs.com/package/@nextcloud/l10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @deprecated 26.0.0 use `loadTranslations` from https://www.npmjs.com/package/@nextcloud/l10n\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload: loadTranslations,\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @deprecated 26.0.0 use `register` from https://www.npmjs.com/package/@nextcloud/l10\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Object<string, string>} bundle bundle\n\t */\n\tregister,\n\n\t/**\n\t * @private\n\t * @deprecated 26.0.0 use `unregister` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\t_unregister: unregister,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @deprecated 26.0.0 use `translate` from https://www.npmjs.com/package/@nextcloud/l10n\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @param {boolean} [options.sanitize=true] enable/disable sanitization (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate,\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @deprecated 26.0.0 use `translatePlural` from https://www.npmjs.com/package/@nextcloud/l10n\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {Array} [options] options array\n\t * @param {boolean} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural,\n}\n\nexport default L10n\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn translate(app, text)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport $ from 'jquery'\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t */\n\tstartSaving(selector) {\n\t\tthis.startAction(selector, t('core', 'Saving …'))\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving(selector, response) {\n\t\tthis.finishedAction(selector, response)\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction(selector, response) {\n\t\tif (response.status === 'success') {\n\t\t\tthis.finishedSuccess(selector, response.data.message)\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message)\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show()\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { confirmPassword, isPasswordConfirmationRequired } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\n\trequiresPasswordConfirmation() {\n\t\treturn isPasswordConfirmationRequired()\n\t},\n\n\t/**\n\t * @param {Function} callback success callback function\n\t * @param {object} options options currently not used by confirmPassword\n\t * @param {Function} rejectCallback error callback function\n\t */\n\trequirePasswordConfirmation(callback, options, rejectCallback) {\n\t\tconfirmPassword().then(callback, rejectCallback)\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\n\t/**\n\t * @type {Array.<OC.Plugin>}\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const theme = window._theme || {}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport _ from 'underscore'\nimport OC from './index.js'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState(params, url, replace) {\n\t\tlet strParams\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params)\n\t\t}\n\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tconst isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tconst patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]')\n\t\t\t\tfor (let i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i]\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.fill = pattern.style.fill\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke\n\t\t\t\t\tpattern.removeAttribute('filter')\n\t\t\t\t\tpattern.setAttribute('filter', 'url(#invert)')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url)\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url)\n\t\t\t}\n\t\t} else {\n\t\t\t// use URL hash for IE8\n\t\t\twindow.location.hash = '?' + strParams\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used, using the params as query string\n\t */\n\tpushState(params, url) {\n\t\tthis._pushState(params, url, false)\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState(params, url) {\n\t\tthis._pushState(params, url, true)\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param {Function} handler handler\n\t */\n\taddOnPopStateHandler(handler) {\n\t\tthis._handlers.push(handler)\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t *\n\t * @return {string}\n\t */\n\t_parseHashQuery() {\n\t\tconst hash = window.location.hash\n\t\tconst pos = hash.indexOf('?')\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1)\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1)\n\t\t}\n\t\treturn ''\n\t},\n\n\t_decodeQuery(query) {\n\t\treturn query.replace(/\\+/g, ' ')\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return {object} map of parameters\n\t */\n\tparseUrlQuery() {\n\t\tconst query = this._parseHashQuery()\n\t\tlet params\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query))\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)))\n\t\treturn params || {}\n\t},\n\n\t_onPopState(e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false\n\t\t\treturn\n\t\t}\n\t\tlet params\n\t\tif (!this._handlers.length) {\n\t\t\treturn\n\t\t}\n\t\tparams = (e && e.state)\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params)\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {}\n\t\t}\n\t\tfor (let i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params)\n\t\t}\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport moment from 'moment'\n\nimport History from './util-history.js'\nimport OC from './index.js'\nimport { formatFileSize as humanFileSize } from '@nextcloud/files'\n\n/**\n * @param {any} t -\n */\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tconst tz = []\n\tlet x = 0\n\tlet y = -1\n\tlet n = 0\n\tlet c\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x)\n\t\t// only include the dot in strings\n\t\tconst m = ((!n && c === '.') || (c >= '0' && c <= '9'))\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++\n\t\t\ttz[y] = ''\n\t\t\tn = m\n\t\t}\n\t\ttz[y] += c\n\t\tx++\n\t}\n\treturn tz\n}\n\n/**\n * Utility functions\n *\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t/**\n\t * @deprecated use https://nextcloud.github.io/nextcloud-files/functions/formatFileSize.html\n\t */\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t *\n\t * @param {string} string file size in human-readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize(string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null\n\t\t}\n\n\t\tconst s = string.toLowerCase().trim()\n\t\tlet bytes = null\n\n\t\tconst bytesArray = {\n\t\t\tb: 1,\n\t\t\tk: 1024,\n\t\t\tkb: 1024,\n\t\t\tmb: 1024 * 1024,\n\t\t\tm: 1024 * 1024,\n\t\t\tgb: 1024 * 1024 * 1024,\n\t\t\tg: 1024 * 1024 * 1024,\n\t\t\ttb: 1024 * 1024 * 1024 * 1024,\n\t\t\tt: 1024 * 1024 * 1024 * 1024,\n\t\t\tpb: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\tp: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t}\n\n\t\tconst matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i)\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s)\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]]\n\t\t}\n\n\t\tbytes = Math.round(bytes)\n\t\treturn bytes\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @param {string} format date format, see momentjs docs\n\t * @return {string} timestamp formatted as requested\n\t */\n\tformatDate(timestamp, format) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tOC.debug && console.warn('OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tformat = format || 'LLL'\n\t\treturn moment(timestamp).format(format)\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @return {string} human readable difference from now\n\t */\n\trelativeModifiedDate(timestamp) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tOC.debug && console.warn('OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tconst diff = moment().diff(moment(timestamp))\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago')\n\t\t}\n\t\treturn moment(timestamp).fromNow()\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {number} width of scrollbar\n\t */\n\tgetScrollBarWidth() {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth\n\t\t}\n\n\t\tconst inner = document.createElement('p')\n\t\tinner.style.width = '100%'\n\t\tinner.style.height = '200px'\n\n\t\tconst outer = document.createElement('div')\n\t\touter.style.position = 'absolute'\n\t\touter.style.top = '0px'\n\t\touter.style.left = '0px'\n\t\touter.style.visibility = 'hidden'\n\t\touter.style.width = '200px'\n\t\touter.style.height = '150px'\n\t\touter.style.overflow = 'hidden'\n\t\touter.appendChild(inner)\n\n\t\tdocument.body.appendChild(outer)\n\t\tconst w1 = inner.offsetWidth\n\t\touter.style.overflow = 'scroll'\n\t\tlet w2 = inner.offsetWidth\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth\n\t\t}\n\n\t\tdocument.body.removeChild(outer)\n\n\t\tthis._scrollBarWidth = (w1 - w2)\n\n\t\treturn this._scrollBarWidth\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime(date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate())\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t *\n\t * @param {string} a first string to compare\n\t * @param {string} b second string to compare\n\t * @return {number} -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare(a, b) {\n\t\tlet x\n\t\tconst aa = chunkify(a)\n\t\tconst bb = chunkify(b)\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tconst aNum = Number(aa[x]); const bNum = Number(bb[x])\n\t\t\t\t// note: == is correct here\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t *\n\t * @param {Function} callback function to call on success\n\t * @param {number} interval in milliseconds\n\t */\n\twaitFor(callback, interval) {\n\t\tconst internalCallback = function() {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval)\n\t\t\t}\n\t\t}\n\n\t\tinternalCallback()\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t *\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue(name, value) {\n\t\tconst cookies = document.cookie.split(';')\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tconst cookie = cookies[i].split('=')\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst base = window._oc_debug\n\nexport const debug = base\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tconst pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error.js'\nimport Apps from './apps.js'\nimport { AppConfig, appConfig } from './appconfig.js'\nimport appswebroots from './appswebroots.js'\nimport Backbone from './backbone.js'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from '@nextcloud/paths'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string.js'\nimport Config from './config.js'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants.js'\nimport { currentUser, getCurrentUser } from './currentuser.js'\nimport Dialogs from './dialogs.js'\nimport EventSource from './eventsource.js'\nimport { get, set } from './get_set.js'\nimport { getCapabilities } from './capabilities.js'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host.js'\nimport {\n\tgetToken as getRequestToken,\n} from './requesttoken.js'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu.js'\nimport { isUserAdmin } from './admin.js'\nimport L10N from './l10n.js'\nimport {\n\tgetCanonicalLocale,\n\tgetLanguage,\n\tgetLocale,\n} from '@nextcloud/l10n'\n\nimport {\n\tgenerateUrl,\n\tgenerateFilePath,\n\tgenerateOcsUrl,\n\tgenerateRemoteUrl,\n\tgetRootUrl,\n\timagePath,\n\tlinkTo,\n} from '@nextcloud/router'\n\nimport {\n\tlinkToRemoteBase,\n} from './routing.js'\nimport msg from './msg.js'\nimport Notification from './notification.js'\nimport PasswordConfirmation from './password-confirmation.js'\nimport Plugins from './plugins.js'\nimport { theme } from './theme.js'\nimport Util from './util.js'\nimport { debug } from './debug.js'\nimport { redirect, reload } from './navigation.js'\nimport webroot from './webroot.js'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t *\n\t * @param {string} file to check\n\t * @return {boolean}\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappswebroots,\n\tBackbone,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type {string}\n\t * @deprecated use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t * @deprecated 19.0.0 use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t *\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 20.0.0 use @nextcloud/capabilities instead\n\t */\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tbasename,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tencodePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tdirname,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tisSamePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * @deprecated 20.0.0 use `getCanonicalLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetCanonicalLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLocale,\n\t/**\n\t * @deprecated 26.0.0 use `getLanguage` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetLanguage,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\t/**\n\t * @deprecated 28.0.0 use methods from '@nextcloud/password-confirmation'\n\t */\n\tPasswordConfirmation,\n\tPlugins,\n\ttheme,\n\tUtil,\n\tdebug,\n\t/**\n\t * @deprecated 19.0.0 use `generateFilePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tfilePath: generateFilePath,\n\t/**\n\t * @deprecated 19.0.0 use `generateUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgenerateUrl,\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#get\n\t */\n\tget: get(window),\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#set\n\t */\n\tset: set(window),\n\t/**\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgetRootPath: getRootUrl,\n\t/**\n\t * @deprecated 19.0.0 use `imagePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\t/**\n\t * @deprecated 19.0.0 use `linkTo` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkTo,\n\t/**\n\t * @param {string} service service name\n\t * @param {number} version OCS API version\n\t * @return {string} OCS API base path\n\t * @deprecated 19.0.0 use `generateOcsUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToOCS: (service, version) => {\n\t\treturn generateOcsUrl(service, {}, {\n\t\t\tocsVersion: version || 1,\n\t\t}) + '/'\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `generateRemoteUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToRemote: generateRemoteUrl,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type {string}\n\t *\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribe('csrf-token-update', e => {\n\tOC.requestToken = e.token\n\n\t// Logging might help debug (Sentry) issues\n\tconsole.info('OC.requestToken changed', e.token)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCapabilities as realGetCapabilities } from '@nextcloud/capabilities'\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0.0\n */\nexport const getCapabilities = () => {\n\tOC.debug && console.warn('OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities')\n\treturn realGetCapabilities()\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {number} port number\n *\n * @since 8.2.0\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n *\n * @param {string} context context\n * @return {Function} setter\n * @deprecated 19.0.0 use https://lodash.com/docs#set\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n\treturn value\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"guest-box login-box\"},[(!_vm.hideLoginForm || _vm.directLogin)?[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[(!_vm.passwordlessLogin && !_vm.resetPassword && _vm.resetPasswordTarget === '')?_c('div',[_c('LoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"direct-login\":_vm.directLogin,\"messages\":_vm.messages,\"errors\":_vm.errors,\"throttle-delay\":_vm.throttleDelay,\"auto-complete-allowed\":_vm.autoCompleteAllowed,\"email-states\":_vm.emailStates},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),(_vm.canResetPassword && _vm.resetPasswordLink !== '')?_c('a',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):(_vm.canResetPassword && !_vm.resetPassword)?_c('a',{staticClass:\"login-box__link\",attrs:{\"id\":\"lost-password\",\"href\":_vm.resetPasswordLink},on:{\"click\":function($event){$event.preventDefault();_vm.resetPassword = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Forgot password?'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.hasPasswordless)?[(_vm.countAlternativeLogins)?_c('div',{staticClass:\"alternative-logins\"},[(_vm.hasPasswordless)?_c('a',{staticClass:\"button\",class:{ 'single-alt-login-option': _vm.countAlternativeLogins },attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\\t\\t\")]):_vm._e()]):_c('a',{attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();_vm.passwordlessLogin = true}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Log in with a device'))+\"\\n\\t\\t\\t\\t\\t\")])]:_vm._e()],2):(!_vm.loading && _vm.passwordlessLogin)?_c('div',{key:\"reset-pw-less\",staticClass:\"login-additional login-passwordless\"},[_c('PasswordLessLoginForm',{attrs:{\"username\":_vm.user,\"redirect-url\":_vm.redirectUrl,\"auto-complete-allowed\":_vm.autoCompleteAllowed,\"is-https\":_vm.isHttps,\"is-localhost\":_vm.isLocalhost,\"has-public-key-credential\":_vm.hasPublicKeyCredential},on:{\"update:username\":function($event){_vm.user=$event},\"submit\":function($event){_vm.loading = true}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('core', 'Back to login form'),\"wide\":true},on:{\"click\":function($event){_vm.passwordlessLogin = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back'))+\"\\n\\t\\t\\t\\t\")])],1):(!_vm.loading && _vm.canResetPassword)?_c('div',{key:\"reset-can-reset\",staticClass:\"login-additional\"},[_c('div',{staticClass:\"lost-password-container\"},[(_vm.resetPassword)?_c('ResetPassword',{attrs:{\"username\":_vm.user,\"reset-password-link\":_vm.resetPasswordLink},on:{\"update:username\":function($event){_vm.user=$event},\"abort\":function($event){_vm.resetPassword = false}}}):_vm._e()],1)]):(_vm.resetPasswordTarget !== '')?_c('div',[_c('UpdatePassword',{attrs:{\"username\":_vm.user,\"reset-password-target\":_vm.resetPasswordTarget},on:{\"update:username\":function($event){_vm.user=$event},\"done\":_vm.passwordResetFinished}})],1):_vm._e()])]:[_c('transition',{attrs:{\"name\":\"fade\",\"mode\":\"out-in\"}},[_c('NcNoteCard',{attrs:{\"type\":\"info\",\"title\":_vm.t('core', 'Login form is disabled.')}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'The Nextcloud login form is disabled. Use another login option if available or contact your administration.'))+\"\\n\\t\\t\\t\")])],1)],_vm._v(\" \"),_c('div',{staticClass:\"alternative-logins\",attrs:{\"id\":\"alternative-logins\"}},_vm._l((_vm.alternativeLogins),function(alternativeLogin,index){return _c('NcButton',{key:index,class:[alternativeLogin.class],attrs:{\"type\":\"secondary\",\"wide\":true,\"role\":\"link\",\"href\":alternativeLogin.href}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(alternativeLogin.name)+\"\\n\\t\\t\")])}),1)],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","const token = '%[a-f0-9]{2}';\nconst singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nconst multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tconst left = components.slice(0, split);\n\tconst right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch {\n\t\tlet tokens = input.match(singleMatcher) || [];\n\n\t\tfor (let i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tconst replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD',\n\t};\n\n\tlet match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch {\n\t\t\tconst result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tconst entries = Object.keys(replaceMap);\n\n\tfor (const key of entries) {\n\t\t// Replace all decoded components\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nexport default function decodeUriComponent(encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n}\n","export default function splitOnFirst(string, separator) {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (string === '' || separator === '') {\n\t\treturn [];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n}\n","export function includeKeys(object, predicate) {\n\tconst result = {};\n\n\tif (Array.isArray(predicate)) {\n\t\tfor (const key of predicate) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor?.enumerable) {\n\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// `Reflect.ownKeys()` is required to retrieve symbol properties\n\t\tfor (const key of Reflect.ownKeys(object)) {\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(object, key);\n\t\t\tif (descriptor.enumerable) {\n\t\t\t\tconst value = object[key];\n\t\t\t\tif (predicate(key, value, object)) {\n\t\t\t\t\tObject.defineProperty(result, key, descriptor);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\nexport function excludeKeys(object, predicate) {\n\tif (Array.isArray(predicate)) {\n\t\tconst set = new Set(predicate);\n\t\treturn includeKeys(object, key => !set.has(key));\n\t}\n\n\treturn includeKeys(object, (key, value, object) => !predicate(key, value, object));\n}\n","import decodeComponent from 'decode-uri-component';\nimport splitOnFirst from 'split-on-first';\nimport {includeKeys} from 'filter-obj';\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\n// eslint-disable-next-line unicorn/prefer-code-point\nconst strictUriEncode = string => encodeURIComponent(string).replaceAll(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result, [encode(key, options), '[', index, ']'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), '[]'].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[]=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\t[encode(key, options), ':list='].join(''),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), ':list=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSeparator = options.arrayFormat === 'bracket-separator'\n\t\t\t\t? '[]='\n\t\t\t\t: '=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSeparator, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined\n\t\t\t\t\t|| (options.skipNull && value === null)\n\t\t\t\t\t|| (options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [\n\t\t\t\t\t\t...result,\n\t\t\t\t\t\tencode(key, options),\n\t\t\t\t\t];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '=', encode(value, options)].join(''),\n\t\t\t\t];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'colon-list-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], value];\n\t\t\t};\n\t\t}\n\n\t\tcase 'comma':\n\t\tcase 'separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : (value === null ? value : decode(value, options));\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\t\t}\n\n\t\tcase 'bracket-separator': {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null\n\t\t\t\t\t? []\n\t\t\t\t\t: value.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...accumulator[key], ...arrayValue];\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [...[accumulator[key]].flat(), value];\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nexport function extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nexport function parse(query, options) {\n\toptions = {\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false,\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst returnValue = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn returnValue;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn returnValue;\n\t}\n\n\tfor (const parameter of query.split('&')) {\n\t\tif (parameter === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parameter_ = options.decode ? parameter.replaceAll('+', ' ') : parameter;\n\n\t\tlet [key, value] = splitOnFirst(parameter_, '=');\n\n\t\tif (key === undefined) {\n\t\t\tkey = parameter_;\n\t\t}\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : (['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options));\n\t\tformatter(decode(key, options), value, returnValue);\n\t}\n\n\tfor (const [key, value] of Object.entries(returnValue)) {\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const [key2, value2] of Object.entries(value)) {\n\t\t\t\tvalue[key2] = parseValue(value2, options);\n\t\t\t}\n\t\t} else {\n\t\t\treturnValue[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn returnValue;\n\t}\n\n\t// TODO: Remove the use of `reduce`.\n\t// eslint-disable-next-line unicorn/no-array-reduce\n\treturn (options.sort === true ? Object.keys(returnValue).sort() : Object.keys(returnValue).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = returnValue[key];\n\t\tresult[key] = Boolean(value) && typeof value === 'object' && !Array.isArray(value) ? keysSorter(value) : value;\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexport function stringify(object, options) {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\t...options,\n\t};\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key]))\n\t\t|| (options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const [key, value] of Object.entries(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = value;\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n}\n\nexport function parseUrl(url, options) {\n\toptions = {\n\t\tdecode: true,\n\t\t...options,\n\t};\n\n\tlet [url_, hash] = splitOnFirst(url, '#');\n\n\tif (url_ === undefined) {\n\t\turl_ = url;\n\t}\n\n\treturn {\n\t\turl: url_?.split('?')?.[0] ?? '',\n\t\tquery: parse(extract(url), options),\n\t\t...(options && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}),\n\t};\n}\n\nexport function stringifyUrl(object, options) {\n\toptions = {\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true,\n\t\t...options,\n\t};\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = extract(object.url);\n\n\tconst query = {\n\t\t...parse(queryFromUrl, {sort: false}),\n\t\t...object.query,\n\t};\n\n\tlet queryString = stringify(query, options);\n\tqueryString &&= `?${queryString}`;\n\n\tlet hash = getHash(object.url);\n\tif (typeof object.fragmentIdentifier === 'string') {\n\t\tconst urlObjectForFragmentEncode = new URL(url);\n\t\turlObjectForFragmentEncode.hash = object.fragmentIdentifier;\n\t\thash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n}\n\nexport function pick(input, filter, options) {\n\toptions = {\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false,\n\t\t...options,\n\t};\n\n\tconst {url, query, fragmentIdentifier} = parseUrl(input, options);\n\n\treturn stringifyUrl({\n\t\turl,\n\t\tquery: includeKeys(query, filter),\n\t\tfragmentIdentifier,\n\t}, options);\n}\n\nexport function exclude(input, filter, options) {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn pick(input, exclusionFilter, options);\n}\n","import * as queryString from './base.js';\n\nexport default queryString;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{ref:\"loginForm\",staticClass:\"login-form\",attrs:{\"method\":\"post\",\"name\":\"login\",\"action\":_vm.loginActionUrl},on:{\"submit\":_vm.submit}},[_c('fieldset',{staticClass:\"login-form__fieldset\",attrs:{\"data-login-form\":\"\"}},[(_vm.apacheAuthFailed)?_c('NcNoteCard',{attrs:{\"title\":_vm.t('core', 'Server side authentication failed!'),\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.csrfCheckFailed)?_c('NcNoteCard',{attrs:{\"heading\":_vm.t('core', 'Temporary error'),\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please try again.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.messages.length > 0)?_c('NcNoteCard',_vm._l((_vm.messages),function(message,index){return _c('div',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(message)),_c('br')])}),0):_vm._e(),_vm._v(\" \"),(_vm.internalException)?_c('NcNoteCard',{class:_vm.t('core', 'An internal error occurred.'),attrs:{\"type\":\"warning\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Please try again or contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"hidden\",attrs:{\"id\":\"message\"}},[_c('img',{staticClass:\"float-spinner\",attrs:{\"alt\":\"\",\"src\":_vm.loadingIcon}}),_vm._v(\" \"),_c('span',{attrs:{\"id\":\"messageText\"}}),_vm._v(\" \"),_c('div',{staticStyle:{\"clear\":\"both\"}})]),_vm._v(\" \"),_c('h2',{staticClass:\"login-form__headline\",attrs:{\"data-login-form-headline\":\"\"},domProps:{\"innerHTML\":_vm._s(_vm.headline)}}),_vm._v(\" \"),_c('NcTextField',{ref:\"user\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"user\",\"label\":_vm.loginText,\"name\":\"user\",\"value\":_vm.user,\"autocapitalize\":\"none\",\"spellchecking\":false,\"autocomplete\":_vm.autoCompleteAllowed ? 'username' : 'off',\"required\":\"\",\"data-login-form-input-user\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('NcPasswordField',{ref:\"password\",class:{shake: _vm.invalidPassword},attrs:{\"id\":\"password\",\"name\":\"password\",\"value\":_vm.password,\"spellchecking\":false,\"autocapitalize\":\"none\",\"autocomplete\":_vm.autoCompleteAllowed ? 'current-password' : 'off',\"label\":_vm.t('core', 'Password'),\"helper-text\":_vm.errorLabel,\"error\":_vm.isError,\"data-login-form-input-password\":\"\",\"required\":\"\"},on:{\"update:value\":function($event){_vm.password=$event}}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"data-login-form-submit\":\"\",\"loading\":_vm.loading}}),_vm._v(\" \"),(_vm.redirectUrl)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"redirect_url\"},domProps:{\"value\":_vm.redirectUrl}}):_vm._e(),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone\"},domProps:{\"value\":_vm.timezone}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"timezone_offset\"},domProps:{\"value\":_vm.timezoneOffset}}),_vm._v(\" \"),_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"requesttoken\"},domProps:{\"value\":_vm.OC.requestToken}}),_vm._v(\" \"),(_vm.directLogin)?_c('input',{attrs:{\"type\":\"hidden\",\"name\":\"direct\",\"value\":\"1\"}}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<NcButton type=\"primary\"\n\t\tnative-type=\"submit\"\n\t\t:wide=\"true\"\n\t\t@click=\"$emit('click')\">\n\t\t{{ !loading ? value : valueLoading }}\n\t\t<template #icon>\n\t\t\t<div v-if=\"loading\" class=\"submit-wrapper__icon icon-loading-small-dark\" />\n\t\t\t<ArrowRight v-else class=\"submit-wrapper__icon\" />\n\t\t</template>\n\t</NcButton>\n</template>\n\n<script>\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\n\nexport default {\n\tname: 'LoginButton',\n\tcomponents: {\n\t\tArrowRight,\n\t\tNcButton,\n\t},\n\tprops: {\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Log in'),\n\t\t},\n\t\tvalueLoading: {\n\t\t\ttype: String,\n\t\t\tdefault: t('core', 'Logging in …'),\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tinvertedColors: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.button-vue {\n\tmargin-top: .5rem;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginButton.vue?vue&type=template&id=3fa8511b&scoped=true\"\nimport script from \"./LoginButton.vue?vue&type=script&lang=js\"\nexport * from \"./LoginButton.vue?vue&type=script&lang=js\"\nimport style0 from \"./LoginButton.vue?vue&type=style&index=0&id=3fa8511b&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3fa8511b\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcButton',{attrs:{\"type\":\"primary\",\"native-type\":\"submit\",\"wide\":true},on:{\"click\":function($event){return _vm.$emit('click')}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('div',{staticClass:\"submit-wrapper__icon icon-loading-small-dark\"}):_c('ArrowRight',{staticClass:\"submit-wrapper__icon\"})]},proxy:true}])},[_vm._v(\"\\n\\t\"+_vm._s(!_vm.loading ? _vm.value : _vm.valueLoading)+\"\\n\\t\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=script&lang=js\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<form ref=\"loginForm\"\n\t\tclass=\"login-form\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t:action=\"loginActionUrl\"\n\t\t@submit=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\" data-login-form>\n\t\t\t<NcNoteCard v-if=\"apacheAuthFailed\"\n\t\t\t\t:title=\"t('core', 'Server side authentication failed!')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"csrfCheckFailed\"\n\t\t\t\t:heading=\"t('core', 'Temporary error')\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Please try again.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"messages.length > 0\">\n\t\t\t\t<div v-for=\"(message, index) in messages\"\n\t\t\t\t\t:key=\"index\">\n\t\t\t\t\t{{ message }}<br>\n\t\t\t\t</div>\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-if=\"internalException\"\n\t\t\t\t:class=\"t('core', 'An internal error occurred.')\"\n\t\t\t\ttype=\"warning\">\n\t\t\t\t{{ t('core', 'Please try again or contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<div id=\"message\"\n\t\t\t\tclass=\"hidden\">\n\t\t\t\t<img class=\"float-spinner\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\t:src=\"loadingIcon\">\n\t\t\t\t<span id=\"messageText\" />\n\t\t\t\t<!-- the following div ensures that the spinner is always inside the #message div -->\n\t\t\t\t<div style=\"clear: both;\" />\n\t\t\t</div>\n\t\t\t<h2 class=\"login-form__headline\" data-login-form-headline v-html=\"headline\" />\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\tref=\"user\"\n\t\t\t\t:label=\"loginText\"\n\t\t\t\tname=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'username' : 'off'\"\n\t\t\t\trequired\n\t\t\t\tdata-login-form-input-user\n\t\t\t\t@change=\"updateUsername\" />\n\n\t\t\t<NcPasswordField id=\"password\"\n\t\t\t\tref=\"password\"\n\t\t\t\tname=\"password\"\n\t\t\t\t:class=\"{shake: invalidPassword}\"\n\t\t\t\t:value.sync=\"password\"\n\t\t\t\t:spellchecking=\"false\"\n\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'current-password' : 'off'\"\n\t\t\t\t:label=\"t('core', 'Password')\"\n\t\t\t\t:helper-text=\"errorLabel\"\n\t\t\t\t:error=\"isError\"\n\t\t\t\tdata-login-form-input-password\n\t\t\t\trequired />\n\n\t\t\t<LoginButton data-login-form-submit :loading=\"loading\" />\n\n\t\t\t<input v-if=\"redirectUrl\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"redirect_url\"\n\t\t\t\t:value=\"redirectUrl\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone\"\n\t\t\t\t:value=\"timezone\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"timezone_offset\"\n\t\t\t\t:value=\"timezoneOffset\">\n\t\t\t<input type=\"hidden\"\n\t\t\t\tname=\"requesttoken\"\n\t\t\t\t:value=\"OC.requestToken\">\n\t\t\t<input v-if=\"directLogin\"\n\t\t\t\ttype=\"hidden\"\n\t\t\t\tname=\"direct\"\n\t\t\t\tvalue=\"1\">\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport { generateUrl, imagePath } from '@nextcloud/router'\n\nimport NcPasswordField from '@nextcloud/vue/dist/Components/NcPasswordField.js'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'LoginForm',\n\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcPasswordField,\n\t\tNcTextField,\n\t\tNcNoteCard,\n\t},\n\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\terrors: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tmessages: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tthrottleDelay: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tdirectLogin: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\temailStates: {\n\t\t\ttype: Array,\n\t\t\tdefault() {\n\t\t\t\treturn []\n\t\t\t}\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\ttimezone: (new Intl.DateTimeFormat())?.resolvedOptions()?.timeZone,\n\t\t\ttimezoneOffset: (-new Date().getTimezoneOffset() / 60),\n\t\t\theadline: t('core', 'Log in to {productName}', { productName: OC.theme.name }),\n\t\t\tuser: '',\n\t\t\tpassword: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisError() {\n\t\t\treturn this.invalidPassword || this.userDisabled\n\t\t\t\t|| this.throttleDelay > 5000\n\t\t},\n\t\terrorLabel() {\n\t\t\tif (this.invalidPassword) {\n\t\t\t\treturn t('core', 'Wrong login or password.')\n\t\t\t}\n\t\t\tif (this.userDisabled) {\n\t\t\t\treturn t('core', 'This account is disabled')\n\t\t\t}\n\t\t\tif (this.throttleDelay > 5000) {\n\t\t\t\treturn t('core', 'We have detected multiple invalid login attempts from your IP. Therefore your next login is throttled up to 30 seconds.')\n\t\t\t}\n\t\t\treturn undefined\n\t\t},\n\t\tapacheAuthFailed() {\n\t\t\treturn this.errors.indexOf('apacheAuthFailed') !== -1\n\t\t},\n\t\tcsrfCheckFailed() {\n\t\t\treturn this.errors.indexOf('csrfCheckFailed') !== -1\n\t\t},\n\t\tinternalException() {\n\t\t\treturn this.errors.indexOf('internalexception') !== -1\n\t\t},\n\t\tinvalidPassword() {\n\t\t\treturn this.errors.indexOf('invalidpassword') !== -1\n\t\t},\n\t\tuserDisabled() {\n\t\t\treturn this.errors.indexOf('userdisabled') !== -1\n\t\t},\n\t\tloadingIcon() {\n\t\t\treturn imagePath('core', 'loading-dark.gif')\n\t\t},\n\t\tloginActionUrl() {\n\t\t\treturn generateUrl('login')\n\t\t},\n\t\temailEnabled() {\n\t\t\treturn this.emailStates ? this.emailStates.every((state) => state === '1') : 1\n\t\t},\n\t\tloginText() {\n\t\t\tif (this.emailEnabled) {\n\t\t\t\treturn t('core', 'Login with username or email')\n\t\t\t}\n\t\t\treturn t('core', 'Login with username')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (this.username === '') {\n\t\t\tthis.$refs.user.$refs.inputField.$refs.input.focus()\n\t\t} else {\n\t\t\tthis.user = this.username\n\t\t\tthis.$refs.password.$refs.inputField.$refs.input.focus()\n\t\t}\n\t},\n\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.$emit('submit')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__headline {\n\t\ttext-align: center;\n\t\toverflow-wrap: anywhere;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./LoginForm.vue?vue&type=template&id=8c18127a&scoped=true\"\nimport script from \"./LoginForm.vue?vue&type=script&lang=js\"\nexport * from \"./LoginForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./LoginForm.vue?vue&type=style&index=0&id=8c18127a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8c18127a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return ((_vm.isHttps || _vm.isLocalhost) && _vm.hasPublicKeyCredential)?_c('form',{ref:\"loginForm\",attrs:{\"method\":\"post\",\"name\":\"login\"},on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Log in with a device')))]),_vm._v(\" \"),_c('fieldset',[_c('NcTextField',{attrs:{\"required\":\"\",\"value\":_vm.user,\"autocomplete\":_vm.autoCompleteAllowed ? 'on' : 'off',\"error\":!_vm.validCredentials,\"label\":_vm.t('core', 'Login or email'),\"placeholder\":_vm.t('core', 'Login or email'),\"helper-text\":!_vm.validCredentials ? _vm.t('core', 'Your account is not setup for passwordless login.') : ''},on:{\"update:value\":_vm.changeUsername}}),_vm._v(\" \"),(_vm.validCredentials)?_c('LoginButton',{attrs:{\"loading\":_vm.loading},on:{\"click\":_vm.authenticate}}):_vm._e()],1)]):(!_vm.hasPublicKeyCredential)?_c('div',{staticClass:\"update\"},[_c('InformationIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Browser not supported')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is not supported in your browser.'))+\"\\n\\t\")])],1):(!_vm.isHttps && !_vm.isLocalhost)?_c('div',{staticClass:\"update\"},[_c('LockOpenIcon',{attrs:{\"size\":\"70\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('core', 'Your connection is not secure')))]),_vm._v(\" \"),_c('p',{staticClass:\"infogroup\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('core', 'Passwordless authentication is only available over a secure connection.'))+\"\\n\\t\")])],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon information-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"InformationIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Information.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Information.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Information.vue?vue&type=template&id=70e6f3ef\"\nimport script from \"./Information.vue?vue&type=script&lang=js\"\nexport * from \"./Information.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon information-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./LockOpen.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./LockOpen.vue?vue&type=script&lang=js\"","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : true\"\n :aria-label=\"title\"\n class=\"material-design-icon lock-open-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LockOpenIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import { render, staticRenderFns } from \"./LockOpen.vue?vue&type=template&id=1b7ea4e7\"\nimport script from \"./LockOpen.vue?vue&type=script&lang=js\"\nexport * from \"./LockOpen.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon lock-open-icon\",attrs:{\"aria-hidden\":_vm.title ? null : true,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<form v-if=\"(isHttps || isLocalhost) && hasPublicKeyCredential\"\n\t\tref=\"loginForm\"\n\t\tmethod=\"post\"\n\t\tname=\"login\"\n\t\t@submit.prevent=\"submit\">\n\t\t<h2>{{ t('core', 'Log in with a device') }}</h2>\n\t\t<fieldset>\n\t\t\t<NcTextField required\n\t\t\t\t:value=\"user\"\n\t\t\t\t:autocomplete=\"autoCompleteAllowed ? 'on' : 'off'\"\n\t\t\t\t:error=\"!validCredentials\"\n\t\t\t\t:label=\"t('core', 'Login or email')\"\n\t\t\t\t:placeholder=\"t('core', 'Login or email')\"\n\t\t\t\t:helper-text=\"!validCredentials ? t('core', 'Your account is not setup for passwordless login.') : ''\"\n\t\t\t\t@update:value=\"changeUsername\" />\n\n\t\t\t<LoginButton v-if=\"validCredentials\"\n\t\t\t\t:loading=\"loading\"\n\t\t\t\t@click=\"authenticate\" />\n\t\t</fieldset>\n\t</form>\n\t<div v-else-if=\"!hasPublicKeyCredential\" class=\"update\">\n\t\t<InformationIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Browser not supported') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is not supported in your browser.') }}\n\t\t</p>\n\t</div>\n\t<div v-else-if=\"!isHttps && !isLocalhost\" class=\"update\">\n\t\t<LockOpenIcon size=\"70\" />\n\t\t<h2>{{ t('core', 'Your connection is not secure') }}</h2>\n\t\t<p class=\"infogroup\">\n\t\t\t{{ t('core', 'Passwordless authentication is only available over a secure connection.') }}\n\t\t</p>\n\t</div>\n</template>\n\n<script>\nimport {\n\tstartAuthentication,\n\tfinishAuthentication,\n} from '../../services/WebAuthnAuthenticationService.js'\nimport LoginButton from './LoginButton.vue'\nimport InformationIcon from 'vue-material-design-icons/Information.vue'\nimport LockOpenIcon from 'vue-material-design-icons/LockOpen.vue'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\n\nclass NoValidCredentials extends Error {\n\n}\n\nexport default {\n\tname: 'PasswordLessLoginForm',\n\tcomponents: {\n\t\tLoginButton,\n\t\tInformationIcon,\n\t\tLockOpenIcon,\n\t\tNcTextField,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tredirectUrl: {\n\t\t\ttype: [String, Boolean],\n\t\t\tdefault: false,\n\t\t},\n\t\tautoCompleteAllowed: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tisHttps: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tisLocalhost: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\thasPublicKeyCredential: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tuser: this.username,\n\t\t\tloading: false,\n\t\t\tvalidCredentials: true,\n\t\t}\n\t},\n\tmethods: {\n\t\tauthenticate() {\n\t\t\t// check required fields\n\t\t\tif (!this.$refs.loginForm.checkValidity()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconsole.debug('passwordless login initiated')\n\n\t\t\tthis.getAuthenticationData(this.user)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.then(this.sign)\n\t\t\t\t.then(this.completeAuthentication)\n\t\t\t\t.catch(error => {\n\t\t\t\t\tif (error instanceof NoValidCredentials) {\n\t\t\t\t\t\tthis.validCredentials = false\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconsole.debug(error)\n\t\t\t\t})\n\t\t},\n\t\tchangeUsername(username) {\n\t\t\tthis.user = username\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tgetAuthenticationData(uid) {\n\t\t\tconst base64urlDecode = function(input) {\n\t\t\t\t// Replace non-url compatible chars with base64 standard chars\n\t\t\t\tinput = input\n\t\t\t\t\t.replace(/-/g, '+')\n\t\t\t\t\t.replace(/_/g, '/')\n\n\t\t\t\t// Pad out with standard base64 required padding characters\n\t\t\t\tconst pad = input.length % 4\n\t\t\t\tif (pad) {\n\t\t\t\t\tif (pad === 1) {\n\t\t\t\t\t\tthrow new Error('InvalidLengthError: Input base64url string is the wrong length to determine padding')\n\t\t\t\t\t}\n\t\t\t\t\tinput += new Array(5 - pad).join('=')\n\t\t\t\t}\n\n\t\t\t\treturn window.atob(input)\n\t\t\t}\n\n\t\t\treturn startAuthentication(uid)\n\t\t\t\t.then(publicKey => {\n\t\t\t\t\tconsole.debug('Obtained PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\n\t\t\t\t\tif (!Object.prototype.hasOwnProperty.call(publicKey, 'allowCredentials')) {\n\t\t\t\t\t\tconsole.debug('No credentials found.')\n\t\t\t\t\t\tthrow new NoValidCredentials()\n\t\t\t\t\t}\n\n\t\t\t\t\tpublicKey.challenge = Uint8Array.from(base64urlDecode(publicKey.challenge), c => c.charCodeAt(0))\n\t\t\t\t\tpublicKey.allowCredentials = publicKey.allowCredentials.map(function(data) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\tid: Uint8Array.from(base64urlDecode(data.id), c => c.charCodeAt(0)),\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tconsole.debug('Converted PublicKeyCredentialRequestOptions')\n\t\t\t\t\tconsole.debug(publicKey)\n\t\t\t\t\treturn publicKey\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('Error while obtaining data')\n\t\t\t\t\tthrow error\n\t\t\t\t})\n\t\t},\n\t\tsign(publicKey) {\n\t\t\tconst arrayToBase64String = function(a) {\n\t\t\t\treturn window.btoa(String.fromCharCode(...a))\n\t\t\t}\n\n\t\t\tconst arrayToString = function(a) {\n\t\t\t\treturn String.fromCharCode(...a)\n\t\t\t}\n\n\t\t\treturn navigator.credentials.get({ publicKey })\n\t\t\t\t.then(data => {\n\t\t\t\t\tconsole.debug(data)\n\t\t\t\t\tconsole.debug(new Uint8Array(data.rawId))\n\t\t\t\t\tconsole.debug(arrayToBase64String(new Uint8Array(data.rawId)))\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: data.id,\n\t\t\t\t\t\ttype: data.type,\n\t\t\t\t\t\trawId: arrayToBase64String(new Uint8Array(data.rawId)),\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tauthenticatorData: arrayToBase64String(new Uint8Array(data.response.authenticatorData)),\n\t\t\t\t\t\t\tclientDataJSON: arrayToBase64String(new Uint8Array(data.response.clientDataJSON)),\n\t\t\t\t\t\t\tsignature: arrayToBase64String(new Uint8Array(data.response.signature)),\n\t\t\t\t\t\t\tuserHandle: data.response.userHandle ? arrayToString(new Uint8Array(data.response.userHandle)) : null,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.then(challenge => {\n\t\t\t\t\tconsole.debug(challenge)\n\t\t\t\t\treturn challenge\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tcompleteAuthentication(challenge) {\n\t\t\tconsole.debug('TIME TO COMPLETE')\n\n\t\t\tconst redirectUrl = this.redirectUrl\n\n\t\t\treturn finishAuthentication(JSON.stringify(challenge))\n\t\t\t\t.then(({ defaultRedirectUrl }) => {\n\t\t\t\t\tconsole.debug('Logged in redirecting')\n\t\t\t\t\t// Redirect url might be false so || should be used instead of ??.\n\t\t\t\t\twindow.location.href = redirectUrl || defaultRedirectUrl\n\t\t\t\t})\n\t\t\t\t.catch(error => {\n\t\t\t\t\tconsole.debug('GOT AN ERROR WHILE SUBMITTING CHALLENGE!')\n\t\t\t\t\tconsole.debug(error) // Example: timeout, interaction refused...\n\t\t\t\t})\n\t\t},\n\t\tsubmit() {\n\t\t\t// noop\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\tfieldset {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 0.5rem;\n\n\t\t:deep(label) {\n\t\t\ttext-align: initial;\n\t\t}\n\t}\n\n\t.update {\n\t\tmargin: 0 auto;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=script&lang=js\"","/**\n * @copyright 2020, Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * @param {any} loginName -\n */\nexport function startAuthentication(loginName) {\n\tconst url = generateUrl('/login/webauthn/start')\n\n\treturn Axios.post(url, { loginName })\n\t\t.then(resp => resp.data)\n}\n\n/**\n * @param {any} data -\n */\nexport function finishAuthentication(data) {\n\tconst url = generateUrl('/login/webauthn/finish')\n\n\treturn Axios.post(url, { data })\n\t\t.then(resp => resp.data)\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PasswordLessLoginForm.vue?vue&type=template&id=1b2e37de&scoped=true\"\nimport script from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js\"\nexport * from \"./PasswordLessLoginForm.vue?vue&type=script&lang=js\"\nimport style0 from \"./PasswordLessLoginForm.vue?vue&type=style&index=0&id=1b2e37de&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b2e37de\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{staticClass:\"login-form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',{staticClass:\"login-form__fieldset\"},[_c('NcTextField',{attrs:{\"id\":\"user\",\"value\":_vm.user,\"name\":\"user\",\"autocapitalize\":\"off\",\"label\":_vm.t('core', 'Login or email'),\"required\":\"\"},on:{\"update:value\":function($event){_vm.user=$event},\"change\":_vm.updateUsername}}),_vm._v(\" \"),_c('LoginButton',{attrs:{\"value\":_vm.t('core', 'Reset password')}}),_vm._v(\" \"),(_vm.message === 'send-success')?_c('NcNoteCard',{attrs:{\"type\":\"success\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or Login, check your spam/junk folders or ask your local administration for help.'))+\"\\n\\t\\t\")]):(_vm.message === 'send-error')?_c('NcNoteCard',{attrs:{\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Couldn\\'t send reset email. Please contact your administrator.'))+\"\\n\\t\\t\")]):(_vm.message === 'reset-error')?_c('NcNoteCard',{attrs:{\"type\":\"error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Password cannot be changed. Please contact your administrator.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('a',{staticClass:\"login-form__link\",attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('abort')}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('core', 'Back to login'))+\"\\n\\t\\t\")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<form class=\"login-form\" @submit.prevent=\"submit\">\n\t\t<fieldset class=\"login-form__fieldset\">\n\t\t\t<NcTextField id=\"user\"\n\t\t\t\t:value.sync=\"user\"\n\t\t\t\tname=\"user\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t:label=\"t('core', 'Login or email')\"\n\t\t\t\trequired\n\t\t\t\t@change=\"updateUsername\" />\n\t\t\t<LoginButton :value=\"t('core', 'Reset password')\" />\n\n\t\t\t<NcNoteCard v-if=\"message === 'send-success'\"\n\t\t\t\ttype=\"success\">\n\t\t\t\t{{ t('core', 'If this account exists, a password reset message has been sent to its email address. If you do not receive it, verify your email address and/or Login, check your spam/junk folders or ask your local administration for help.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'send-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Couldn\\'t send reset email. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\t\t\t<NcNoteCard v-else-if=\"message === 'reset-error'\"\n\t\t\t\ttype=\"error\">\n\t\t\t\t{{ t('core', 'Password cannot be changed. Please contact your administrator.') }}\n\t\t\t</NcNoteCard>\n\n\t\t\t<a class=\"login-form__link\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent=\"$emit('abort')\">\n\t\t\t\t{{ t('core', 'Back to login') }}\n\t\t\t</a>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport LoginButton from './LoginButton.vue'\nimport NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nexport default {\n\tname: 'ResetPassword',\n\tcomponents: {\n\t\tLoginButton,\n\t\tNcNoteCard,\n\t\tNcTextField,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordLink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tupdateUsername() {\n\t\t\tthis.$emit('update:username', this.user)\n\t\t},\n\t\tsubmit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\t\t\tconst url = generateUrl('/lostpassword/email')\n\n\t\t\tconst data = {\n\t\t\t\tuser: this.user,\n\t\t\t}\n\n\t\t\treturn axios.post(url, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(data => {\n\t\t\t\t\tif (data.status !== 'success') {\n\t\t\t\t\t\tthrow new Error(`got status ${data.status}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\tconsole.error('could not send reset email request', e)\n\n\t\t\t\t\tthis.error = true\n\t\t\t\t\tthis.message = 'send-error'\n\t\t\t\t})\n\t\t\t\t.then(() => { this.loading = false })\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.login-form {\n\ttext-align: left;\n\tfont-size: 1rem;\n\n\t&__fieldset {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: .5rem;\n\t}\n\n\t&__link {\n\t\tdisplay: block;\n\t\tfont-weight: normal !important;\n\t\tpadding-bottom: 1rem;\n\t\tcursor: pointer;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tpadding: .5rem 1rem 1rem 1rem;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./ResetPassword.vue?vue&type=template&id=2507998a&scoped=true\"\nimport script from \"./ResetPassword.vue?vue&type=script&lang=js\"\nexport * from \"./ResetPassword.vue?vue&type=script&lang=js\"\nimport style0 from \"./ResetPassword.vue?vue&type=style&index=0&id=2507998a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2507998a\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=script&lang=js\"","<!--\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<form @submit.prevent=\"submit\">\n\t\t<fieldset>\n\t\t\t<p>\n\t\t\t\t<label for=\"password\" class=\"infield\">{{ t('core', 'New password') }}</label>\n\t\t\t\t<input id=\"password\"\n\t\t\t\t\tv-model=\"password\"\n\t\t\t\t\ttype=\"password\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\trequired\n\t\t\t\t\t:placeholder=\"t('core', 'New password')\">\n\t\t\t</p>\n\n\t\t\t<div v-if=\"encrypted\" class=\"update\">\n\t\t\t\t<p>\n\t\t\t\t\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\n\t\t\t\t</p>\n\t\t\t\t<input id=\"encrypted-continue\"\n\t\t\t\t\tv-model=\"proceed\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t<label for=\"encrypted-continue\">\n\t\t\t\t\t{{ t('core', 'I know what I\\'m doing') }}\n\t\t\t\t</label>\n\t\t\t</div>\n\n\t\t\t<LoginButton :loading=\"loading\"\n\t\t\t\t:value=\"t('core', 'Reset password')\"\n\t\t\t\t:value-loading=\"t('core', 'Resetting password')\" />\n\n\t\t\t<p v-if=\"error && message\" :class=\"{warning: error}\">\n\t\t\t\t{{ message }}\n\t\t\t</p>\n\t\t</fieldset>\n\t</form>\n</template>\n\n<script>\nimport Axios from '@nextcloud/axios'\nimport LoginButton from './LoginButton.vue'\n\nexport default {\n\tname: 'UpdatePassword',\n\tcomponents: {\n\t\tLoginButton,\n\t},\n\tprops: {\n\t\tusername: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tresetPasswordTarget: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\terror: false,\n\t\t\tloading: false,\n\t\t\tmessage: undefined,\n\t\t\tuser: this.username,\n\t\t\tpassword: '',\n\t\t\tencrypted: false,\n\t\t\tproceed: false,\n\t\t}\n\t},\n\twatch: {\n\t\tusername(value) {\n\t\t\tthis.user = value\n\t\t},\n\t},\n\tmethods: {\n\t\tasync submit() {\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tthis.message = ''\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await Axios.post(this.resetPasswordTarget, {\n\t\t\t\t\tpassword: this.password,\n\t\t\t\t\tproceed: this.proceed,\n\t\t\t\t})\n\t\t\t\tif (data && data.status === 'success') {\n\t\t\t\t\tthis.message = 'send-success'\n\t\t\t\t\tthis.$emit('update:username', this.user)\n\t\t\t\t\tthis.$emit('done')\n\t\t\t\t} else if (data && data.encryption) {\n\t\t\t\t\tthis.encrypted = true\n\t\t\t\t} else if (data && data.msg) {\n\t\t\t\t\tthrow new Error(data.msg)\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error()\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\tfieldset {\n\t\ttext-align: center;\n\t}\n\n\tinput[type=submit] {\n\t\tmargin-top: 20px;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./UpdatePassword.vue?vue&type=template&id=b9d4933a&scoped=true\"\nimport script from \"./UpdatePassword.vue?vue&type=script&lang=js\"\nexport * from \"./UpdatePassword.vue?vue&type=script&lang=js\"\nimport style0 from \"./UpdatePassword.vue?vue&type=style&index=0&id=b9d4933a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b9d4933a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('fieldset',[_c('p',[_c('label',{staticClass:\"infield\",attrs:{\"for\":\"password\"}},[_vm._v(_vm._s(_vm.t('core', 'New password')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],attrs:{\"id\":\"password\",\"type\":\"password\",\"name\":\"password\",\"autocomplete\":\"new-password\",\"autocapitalize\":\"none\",\"spellcheck\":\"false\",\"required\":\"\",\"placeholder\":_vm.t('core', 'New password')},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing)return;_vm.password=$event.target.value}}})]),_vm._v(\" \"),(_vm.encrypted)?_c('div',{staticClass:\"update\"},[_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.proceed),expression:\"proceed\"}],staticClass:\"checkbox\",attrs:{\"id\":\"encrypted-continue\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.proceed)?_vm._i(_vm.proceed,null)>-1:(_vm.proceed)},on:{\"change\":function($event){var $$a=_vm.proceed,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.proceed=$$a.concat([$$v]))}else{$$i>-1&&(_vm.proceed=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.proceed=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"encrypted-continue\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('core', 'I know what I\\'m doing'))+\"\\n\\t\\t\\t\")])]):_vm._e(),_vm._v(\" \"),_c('LoginButton',{attrs:{\"loading\":_vm.loading,\"value\":_vm.t('core', 'Reset password'),\"value-loading\":_vm.t('core', 'Resetting password')}}),_vm._v(\" \"),(_vm.error && _vm.message)?_c('p',{class:{warning: _vm.error}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\\t\")]):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div class=\"guest-box login-box\">\n\t\t<template v-if=\"!hideLoginForm || directLogin\">\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<div v-if=\"!passwordlessLogin && !resetPassword && resetPasswordTarget === ''\">\n\t\t\t\t\t<LoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:direct-login=\"directLogin\"\n\t\t\t\t\t\t:messages=\"messages\"\n\t\t\t\t\t\t:errors=\"errors\"\n\t\t\t\t\t\t:throttle-delay=\"throttleDelay\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t:email-states=\"emailStates\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<a v-if=\"canResetPassword && resetPasswordLink !== ''\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a v-else-if=\"canResetPassword && !resetPassword\"\n\t\t\t\t\t\tid=\"lost-password\"\n\t\t\t\t\t\tclass=\"login-box__link\"\n\t\t\t\t\t\t:href=\"resetPasswordLink\"\n\t\t\t\t\t\t@click.prevent=\"resetPassword = true\">\n\t\t\t\t\t\t{{ t('core', 'Forgot password?') }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<template v-if=\"hasPasswordless\">\n\t\t\t\t\t\t<div v-if=\"countAlternativeLogins\"\n\t\t\t\t\t\t\tclass=\"alternative-logins\">\n\t\t\t\t\t\t\t<a v-if=\"hasPasswordless\"\n\t\t\t\t\t\t\t\tclass=\"button\"\n\t\t\t\t\t\t\t\t:class=\"{ 'single-alt-login-option': countAlternativeLogins }\"\n\t\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a v-else\n\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t@click.prevent=\"passwordlessLogin = true\">\n\t\t\t\t\t\t\t{{ t('core', 'Log in with a device') }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && passwordlessLogin\"\n\t\t\t\t\tkey=\"reset-pw-less\"\n\t\t\t\t\tclass=\"login-additional login-passwordless\">\n\t\t\t\t\t<PasswordLessLoginForm :username.sync=\"user\"\n\t\t\t\t\t\t:redirect-url=\"redirectUrl\"\n\t\t\t\t\t\t:auto-complete-allowed=\"autoCompleteAllowed\"\n\t\t\t\t\t\t:is-https=\"isHttps\"\n\t\t\t\t\t\t:is-localhost=\"isLocalhost\"\n\t\t\t\t\t\t:has-public-key-credential=\"hasPublicKeyCredential\"\n\t\t\t\t\t\t@submit=\"loading = true\" />\n\t\t\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t\t\t:aria-label=\"t('core', 'Back to login form')\"\n\t\t\t\t\t\t:wide=\"true\"\n\t\t\t\t\t\t@click=\"passwordlessLogin = false\">\n\t\t\t\t\t\t{{ t('core', 'Back') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!loading && canResetPassword\"\n\t\t\t\t\tkey=\"reset-can-reset\"\n\t\t\t\t\tclass=\"login-additional\">\n\t\t\t\t\t<div class=\"lost-password-container\">\n\t\t\t\t\t\t<ResetPassword v-if=\"resetPassword\"\n\t\t\t\t\t\t\t:username.sync=\"user\"\n\t\t\t\t\t\t\t:reset-password-link=\"resetPasswordLink\"\n\t\t\t\t\t\t\t@abort=\"resetPassword = false\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"resetPasswordTarget !== ''\">\n\t\t\t\t\t<UpdatePassword :username.sync=\"user\"\n\t\t\t\t\t\t:reset-password-target=\"resetPasswordTarget\"\n\t\t\t\t\t\t@done=\"passwordResetFinished\" />\n\t\t\t\t</div>\n\t\t\t</transition>\n\t\t</template>\n\t\t<template v-else>\n\t\t\t<transition name=\"fade\" mode=\"out-in\">\n\t\t\t\t<NcNoteCard type=\"info\" :title=\"t('core', 'Login form is disabled.')\">\n\t\t\t\t\t{{ t('core', 'The Nextcloud login form is disabled. Use another login option if available or contact your administration.') }}\n\t\t\t\t</NcNoteCard>\n\t\t\t</transition>\n\t\t</template>\n\n\t\t<div id=\"alternative-logins\" class=\"alternative-logins\">\n\t\t\t<NcButton v-for=\"(alternativeLogin, index) in alternativeLogins\"\n\t\t\t\t:key=\"index\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:wide=\"true\"\n\t\t\t\t:class=\"[alternativeLogin.class]\"\n\t\t\t\trole=\"link\"\n\t\t\t\t:href=\"alternativeLogin.href\">\n\t\t\t\t{{ alternativeLogin.name }}\n\t\t\t</NcButton>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { loadState } from '@nextcloud/initial-state'\nimport queryString from 'query-string'\n\nimport LoginForm from '../components/login/LoginForm.vue'\nimport PasswordLessLoginForm from '../components/login/PasswordLessLoginForm.vue'\nimport ResetPassword from '../components/login/ResetPassword.vue'\nimport UpdatePassword from '../components/login/UpdatePassword.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'\n\nconst query = queryString.parse(location.search)\nif (query.clear === '1') {\n\ttry {\n\t\twindow.localStorage.clear()\n\t\twindow.sessionStorage.clear()\n\t\tconsole.debug('Browser storage cleared')\n\t} catch (e) {\n\t\tconsole.error('Could not clear browser storage', e)\n\t}\n}\n\nexport default {\n\tname: 'Login',\n\n\tcomponents: {\n\t\tLoginForm,\n\t\tPasswordLessLoginForm,\n\t\tResetPassword,\n\t\tUpdatePassword,\n\t\tNcButton,\n\t\tNcNoteCard,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tuser: loadState('core', 'loginUsername', ''),\n\t\t\tpasswordlessLogin: false,\n\t\t\tresetPassword: false,\n\n\t\t\t// Initial data\n\t\t\terrors: loadState('core', 'loginErrors', []),\n\t\t\tmessages: loadState('core', 'loginMessages', []),\n\t\t\tredirectUrl: loadState('core', 'loginRedirectUrl', false),\n\t\t\tthrottleDelay: loadState('core', 'loginThrottleDelay', 0),\n\t\t\tcanResetPassword: loadState('core', 'loginCanResetPassword', false),\n\t\t\tresetPasswordLink: loadState('core', 'loginResetPasswordLink', ''),\n\t\t\tautoCompleteAllowed: loadState('core', 'loginAutocomplete', true),\n\t\t\tresetPasswordTarget: loadState('core', 'resetPasswordTarget', ''),\n\t\t\tresetPasswordUser: loadState('core', 'resetPasswordUser', ''),\n\t\t\tdirectLogin: query.direct === '1',\n\t\t\thasPasswordless: loadState('core', 'webauthn-available', false),\n\t\t\tcountAlternativeLogins: loadState('core', 'countAlternativeLogins', false),\n\t\t\talternativeLogins: loadState('core', 'alternativeLogins', []),\n\t\t\tisHttps: window.location.protocol === 'https:',\n\t\t\tisLocalhost: window.location.hostname === 'localhost',\n\t\t\thasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',\n\t\t\thideLoginForm: loadState('core', 'hideLoginForm', false),\n\t\t\temailStates: loadState('core', 'emailStates', []),\n\t\t}\n\t},\n\n\tmethods: {\n\t\tpasswordResetFinished() {\n\t\t\tthis.resetPasswordTarget = ''\n\t\t\tthis.directLogin = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\nbody {\n\tfont-size: var(--default-font-size);\n}\n\n.login-box {\n\t// Same size as dashboard panels\n\twidth: 320px;\n\tbox-sizing: border-box;\n\n\t&__link {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t\tfont-size: var(--default-font-size);\n\t\ttext-align: center;\n\t\tfont-weight: normal !important;\n\t}\n}\n\n.fade-enter-active, .fade-leave-active {\n\ttransition: opacity .3s;\n}\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\n\topacity: 0;\n}\n\n.alternative-logins {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.75rem;\n\n\t.button-vue {\n\t\tbox-sizing: border-box;\n\t}\n}\n\n.login-passwordless {\n\t.button-vue {\n\t\tmargin-top: 0.5rem;\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js\"","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=2e7d9221&prod&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=2e7d9221&prod&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=2e7d9221\"\nimport script from \"./Login.vue?vue&type=script&lang=js\"\nexport * from \"./Login.vue?vue&type=script&lang=js\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&id=2e7d9221&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport L10n from '../OC/l10n.js'\nimport OC from '../OC/index.js'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tOC,\n\t\t}\n\t},\n\tmethods: {\n\t\tt: L10n.translate.bind(L10n),\n\t\tn: L10n.translatePlural.bind(L10n),\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\n\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index.js' // TODO: Not needed but L10n breaks if removed\nimport LoginView from './views/Login.vue'\nimport Nextcloud from './mixins/Nextcloud.js'\n\nVue.mixin(Nextcloud)\n\nconst View = Vue.extend(LoginView)\nnew View().$mount('#login')\n","// Backbone.js 1.6.0\n\n// (c) 2010-2024 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.6.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n\n // Just _.defaults would work fine, but the additional _.extends\n // is in there for historical reasons. See #3843.\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) {\n var prevId = this.id;\n this.id = this.get(this.idAttribute);\n this.trigger('changeId', this, prevId, options);\n }\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj, obj.idAttribute)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) {\n m.off('error', collection._forwardPristineError, collection);\n collection.add(m, callbackOpts);\n }\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n // In case of wait:true, our collection is not listening to any\n // of the model's events yet, so it will not forward the error\n // event. In this special case, we need to listen for it\n // separately and handle the event just once.\n // (The reason we don't need to do this for the sync event is\n // in the success handler above: we add the model first, which\n // causes the collection to listen, and then invoke the callback\n // that triggers the event.)\n if (wait) {\n model.once('error', this._forwardPristineError, this);\n }\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs, idAttribute) {\n return attrs[idAttribute || this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n\n var model;\n if (this.model.prototype) {\n model = new this.model(attrs, options);\n } else {\n // ES class methods didn't have prototype\n model = this.model(attrs, options);\n }\n\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n if (models.length > 0 && !options.silent) delete options.index;\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes, model.idAttribute);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'changeId') {\n var prevId = this.modelId(model.previousAttributes(), model.idAttribute);\n var id = this.modelId(model.attributes, model.idAttribute);\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n this.trigger.apply(this, arguments);\n },\n\n // Internal callback method used in `create`. It serves as a\n // stand-in for the `_onModelEvent` method, which is not yet bound\n // during the `wait` period of the `create` call. We still want to\n // forward any `'error'` event at the end of the `wait` period,\n // hence a customized callback.\n _forwardPristineError: function(model, collection, options) {\n // Prevent double forward if the model was already in the\n // collection before the call to `create`.\n if (this.has(model)) return;\n this._onModelEvent('error', model, collection, options);\n }\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes, model.idAttribute);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n 'create': 'POST',\n 'update': 'PUT',\n 'patch': 'PATCH',\n 'delete': 'DELETE',\n 'read': 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._trailingSlash = this.options.trailingSlash;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) {\n if (!this.matchRoot()) return this.notfound();\n return false;\n }\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return this.notfound();\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n }) || this.notfound();\n },\n\n // When no route could be matched, this method is called internally to\n // trigger the `'notfound'` event. It returns `false` so that it can be used\n // in tail position.\n notfound: function() {\n this.trigger('notfound');\n return false;\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Strip trailing slash on the root unless _trailingSlash is true\n var rootPath = this.root;\n if (!this._trailingSlash && (fragment === '' || fragment.charAt(0) === '?')) {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n // Provide useful information when things go wrong. This method is not meant\n // to be used directly; it merely provides the necessary introspection for the\n // external `debugInfo` function.\n Backbone._debug = function() {\n return {root: root, _: _};\n };\n\n return Backbone;\n});\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.button-vue[data-v-3fa8511b]{margin-top:.5rem}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginButton.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,gBAAA\",\"sourcesContent\":[\"\\n.button-vue {\\n\\tmargin-top: .5rem;\\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, `.login-form[data-v-8c18127a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-8c18127a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__headline[data-v-8c18127a]{text-align:center;overflow-wrap:anywhere}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/LoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,uCACC,iBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__headline {\\n\\t\\ttext-align: center;\\n\\t\\toverflow-wrap: anywhere;\\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, `fieldset[data-v-1b2e37de]{display:flex;flex-direction:column;gap:.5rem}fieldset[data-v-1b2e37de] label{text-align:initial}.update[data-v-1b2e37de]{margin:0 auto}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/PasswordLessLoginForm.vue\"],\"names\":[],\"mappings\":\"AACA,0BACC,YAAA,CACA,qBAAA,CACA,SAAA,CAEA,gCACC,kBAAA,CAIF,yBACC,aAAA\",\"sourcesContent\":[\"\\nfieldset {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 0.5rem;\\n\\n\\t:deep(label) {\\n\\t\\ttext-align: initial;\\n\\t}\\n}\\n\\n.update {\\n\\tmargin: 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.login-form[data-v-2507998a]{text-align:left;font-size:1rem}.login-form__fieldset[data-v-2507998a]{width:100%;display:flex;flex-direction:column;gap:.5rem}.login-form__link[data-v-2507998a]{display:block;font-weight:normal !important;padding-bottom:1rem;cursor:pointer;font-size:var(--default-font-size);text-align:center;padding:.5rem 1rem 1rem 1rem}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/ResetPassword.vue\"],\"names\":[],\"mappings\":\"AACA,6BACC,eAAA,CACA,cAAA,CAEA,uCACC,UAAA,CACA,YAAA,CACA,qBAAA,CACA,SAAA,CAGD,mCACC,aAAA,CACA,6BAAA,CACA,mBAAA,CACA,cAAA,CACA,kCAAA,CACA,iBAAA,CACA,4BAAA\",\"sourcesContent\":[\"\\n.login-form {\\n\\ttext-align: left;\\n\\tfont-size: 1rem;\\n\\n\\t&__fieldset {\\n\\t\\twidth: 100%;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tgap: .5rem;\\n\\t}\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tfont-weight: normal !important;\\n\\t\\tpadding-bottom: 1rem;\\n\\t\\tcursor: pointer;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tpadding: .5rem 1rem 1rem 1rem;\\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, `body{font-size:var(--default-font-size)}.login-box{width:320px;box-sizing:border-box}.login-box__link{display:block;padding:1rem;font-size:var(--default-font-size);text-align:center;font-weight:normal !important}.fade-enter-active,.fade-leave-active{transition:opacity .3s}.fade-enter,.fade-leave-to{opacity:0}.alternative-logins{display:flex;flex-direction:column;gap:.75rem}.alternative-logins .button-vue{box-sizing:border-box}.login-passwordless .button-vue{margin-top:.5rem}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/views/Login.vue\"],\"names\":[],\"mappings\":\"AACA,KACC,kCAAA,CAGD,WAEC,WAAA,CACA,qBAAA,CAEA,iBACC,aAAA,CACA,YAAA,CACA,kCAAA,CACA,iBAAA,CACA,6BAAA,CAIF,sCACC,sBAAA,CAED,2BACC,SAAA,CAGD,oBACC,YAAA,CACA,qBAAA,CACA,UAAA,CAEA,gCACC,qBAAA,CAKD,gCACC,gBAAA\",\"sourcesContent\":[\"\\nbody {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\n.login-box {\\n\\t// Same size as dashboard panels\\n\\twidth: 320px;\\n\\tbox-sizing: border-box;\\n\\n\\t&__link {\\n\\t\\tdisplay: block;\\n\\t\\tpadding: 1rem;\\n\\t\\tfont-size: var(--default-font-size);\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: normal !important;\\n\\t}\\n}\\n\\n.fade-enter-active, .fade-leave-active {\\n\\ttransition: opacity .3s;\\n}\\n.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {\\n\\topacity: 0;\\n}\\n\\n.alternative-logins {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: 0.75rem;\\n\\n\\t.button-vue {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n}\\n\\n.login-passwordless {\\n\\t.button-vue {\\n\\t\\tmargin-top: 0.5rem;\\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, `\nfieldset[data-v-b9d4933a] {\n\ttext-align: center;\n}\ninput[type=submit][data-v-b9d4933a] {\n\tmargin-top: 20px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/components/login/UpdatePassword.vue\"],\"names\":[],\"mappings\":\";AA4IA;CACA,kBAAA;AACA;AAEA;CACA,gBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<form @submit.prevent=\\\"submit\\\">\\n\\t\\t<fieldset>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<label for=\\\"password\\\" class=\\\"infield\\\">{{ t('core', 'New password') }}</label>\\n\\t\\t\\t\\t<input id=\\\"password\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tspellcheck=\\\"false\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('core', 'New password')\\\">\\n\\t\\t\\t</p>\\n\\n\\t\\t\\t<div v-if=\\\"encrypted\\\" class=\\\"update\\\">\\n\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t{{ t('core', 'Your files are encrypted. There will be no way to get your data back after your password is reset. If you are not sure what to do, please contact your administrator before you continue. Do you really want to continue?') }}\\n\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t<input id=\\\"encrypted-continue\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"proceed\\\"\\n\\t\\t\\t\\t\\ttype=\\\"checkbox\\\"\\n\\t\\t\\t\\t\\tclass=\\\"checkbox\\\">\\n\\t\\t\\t\\t<label for=\\\"encrypted-continue\\\">\\n\\t\\t\\t\\t\\t{{ t('core', 'I know what I\\\\'m doing') }}\\n\\t\\t\\t\\t</label>\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<LoginButton :loading=\\\"loading\\\"\\n\\t\\t\\t\\t:value=\\\"t('core', 'Reset password')\\\"\\n\\t\\t\\t\\t:value-loading=\\\"t('core', 'Resetting password')\\\" />\\n\\n\\t\\t\\t<p v-if=\\\"error && message\\\" :class=\\\"{warning: error}\\\">\\n\\t\\t\\t\\t{{ message }}\\n\\t\\t\\t</p>\\n\\t\\t</fieldset>\\n\\t</form>\\n</template>\\n\\n<script>\\nimport Axios from '@nextcloud/axios'\\nimport LoginButton from './LoginButton.vue'\\n\\nexport default {\\n\\tname: 'UpdatePassword',\\n\\tcomponents: {\\n\\t\\tLoginButton,\\n\\t},\\n\\tprops: {\\n\\t\\tusername: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tresetPasswordTarget: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\terror: false,\\n\\t\\t\\tloading: false,\\n\\t\\t\\tmessage: undefined,\\n\\t\\t\\tuser: this.username,\\n\\t\\t\\tpassword: '',\\n\\t\\t\\tencrypted: false,\\n\\t\\t\\tproceed: false,\\n\\t\\t}\\n\\t},\\n\\twatch: {\\n\\t\\tusername(value) {\\n\\t\\t\\tthis.user = value\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tasync submit() {\\n\\t\\t\\tthis.loading = true\\n\\t\\t\\tthis.error = false\\n\\t\\t\\tthis.message = ''\\n\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tconst { data } = await Axios.post(this.resetPasswordTarget, {\\n\\t\\t\\t\\t\\tpassword: this.password,\\n\\t\\t\\t\\t\\tproceed: this.proceed,\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\tif (data && data.status === 'success') {\\n\\t\\t\\t\\t\\tthis.message = 'send-success'\\n\\t\\t\\t\\t\\tthis.$emit('update:username', this.user)\\n\\t\\t\\t\\t\\tthis.$emit('done')\\n\\t\\t\\t\\t} else if (data && data.encryption) {\\n\\t\\t\\t\\t\\tthis.encrypted = true\\n\\t\\t\\t\\t} else if (data && data.msg) {\\n\\t\\t\\t\\t\\tthrow new Error(data.msg)\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tthrow new Error()\\n\\t\\t\\t\\t}\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\tthis.error = true\\n\\t\\t\\t\\tthis.message = e.message ? e.message : t('core', 'Password cannot be changed. Please contact your administrator.')\\n\\t\\t\\t} finally {\\n\\t\\t\\t\\tthis.loading = false\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\tfieldset {\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\tinput[type=submit] {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","/*\n * vim: expandtab shiftwidth=4 softtabstop=4\n */\n\n/* global dav */\nif (typeof dav === 'undefined') { dav = {}; };\n\ndav._XML_CHAR_MAP = {\n '<': '<',\n '>': '>',\n '&': '&',\n '\"': '"',\n \"'\": '''\n};\n\ndav._escapeXml = function(s) {\n return s.replace(/[<>&\"']/g, function (ch) {\n return dav._XML_CHAR_MAP[ch];\n });\n};\n\ndav.Client = function(options) {\n var i;\n for(i in options) {\n this[i] = options[i];\n }\n\n};\n\ndav.Client.prototype = {\n\n baseUrl : null,\n\n userName : null,\n\n password : null,\n\n\n xmlNamespaces : {\n 'DAV:' : 'd'\n },\n\n /**\n * Generates a propFind request.\n *\n * @param {string} url Url to do the propfind request on\n * @param {Array} properties List of properties to retrieve.\n * @param {string} depth \"0\", \"1\" or \"infinity\"\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propFind : function(url, properties, depth, headers) {\n\n if(typeof depth === \"undefined\") {\n depth = '0';\n }\n\n // depth header must be a string, in case a number was passed in\n depth = '' + depth;\n\n headers = headers || {};\n\n headers['Depth'] = depth;\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propfind ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(properties[ii]);\n if (this.xmlNamespaces[property.namespace]) {\n body+=' <' + this.xmlNamespaces[property.namespace] + ':' + property.name + ' />\\n';\n } else {\n body+=' <x:' + property.name + ' xmlns:x=\"' + property.namespace + '\" />\\n';\n }\n\n }\n body+=' </d:prop>\\n';\n body+='</d:propfind>';\n\n return this.request('PROPFIND', url, headers, body).then(\n function(result) {\n\n if (depth === '0') {\n return {\n status: result.status,\n body: result.body[0],\n xhr: result.xhr\n };\n } else {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }\n\n }.bind(this)\n );\n\n },\n\n /**\n * Renders a \"d:set\" block for the given properties.\n *\n * @param {Object.<String,String>} properties\n * @return {String} XML \"<d:set>\" block\n */\n _renderPropSet: function(properties) {\n var body = ' <d:set>\\n' +\n ' <d:prop>\\n';\n\n for(var ii in properties) {\n if (!properties.hasOwnProperty(ii)) {\n continue;\n }\n\n var property = this.parseClarkNotation(ii);\n var propName;\n var propValue = properties[ii];\n if (this.xmlNamespaces[property.namespace]) {\n propName = this.xmlNamespaces[property.namespace] + ':' + property.name;\n } else {\n propName = 'x:' + property.name + ' xmlns:x=\"' + property.namespace + '\"';\n }\n\n // FIXME: hard-coded for now until we allow properties to\n // specify whether to be escaped or not\n if (propName !== 'd:resourcetype') {\n propValue = dav._escapeXml(propValue);\n }\n body += ' <' + propName + '>' + propValue + '</' + propName + '>\\n';\n }\n body +=' </d:prop>\\n';\n body +=' </d:set>\\n';\n return body;\n },\n\n /**\n * Generates a propPatch request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} properties List of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n propPatch : function(url, properties, headers) {\n headers = headers || {};\n\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n var body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:propertyupdate ';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body += '</d:propertyupdate>';\n\n return this.request('PROPPATCH', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Generates a MKCOL request.\n * If attributes are given, it will use an extended MKCOL request.\n *\n * @param {string} url Url to do the proppatch request on\n * @param {Object.<String,String>} [properties] list of properties to store.\n * @param {Object} [headers] headers\n * @return {Promise}\n */\n mkcol : function(url, properties, headers) {\n var body = '';\n headers = headers || {};\n headers['Content-Type'] = 'application/xml; charset=utf-8';\n\n if (properties) {\n body =\n '<?xml version=\"1.0\"?>\\n' +\n '<d:mkcol';\n var namespace;\n for (namespace in this.xmlNamespaces) {\n body += ' xmlns:' + this.xmlNamespaces[namespace] + '=\"' + namespace + '\"';\n }\n body += '>\\n' + this._renderPropSet(properties);\n body +='</d:mkcol>';\n }\n\n return this.request('MKCOL', url, headers, body).then(\n function(result) {\n return {\n status: result.status,\n body: result.body,\n xhr: result.xhr\n };\n }.bind(this)\n );\n\n },\n\n /**\n * Performs a HTTP request, and returns a Promise\n *\n * @param {string} method HTTP method\n * @param {string} url Relative or absolute url\n * @param {Object} headers HTTP headers as an object.\n * @param {string} body HTTP request body.\n * @param {string} responseType HTTP request response type.\n * @param {Object} options\n * @param {Function} options.onProgress progress callback\n * @return {Promise}\n */\n request : function(method, url, headers, body, responseType, options) {\n\n var self = this;\n var xhr = this.xhrProvider();\n headers = headers || {};\n responseType = responseType || \"\";\n \n if (this.userName) {\n headers['Authorization'] = 'Basic ' + btoa(this.userName + ':' + this.password);\n // xhr.open(method, this.resolveUrl(url), true, this.userName, this.password);\n }\n xhr.open(method, this.resolveUrl(url), true);\n var ii;\n for(ii in headers) {\n xhr.setRequestHeader(ii, headers[ii]);\n }\n xhr.responseType = responseType;\n\n if (options && typeof(options.onProgress) === 'function') {\n if (method === 'PUT' || method === 'POST') {\n xhr.upload.addEventListener('progress', function (e) {\n options.onProgress(e)\n }, false)\n }\n else {\n xhr.addEventListener('progress', function (e) {\n options.onProgress(e)\n }, false)\n }\n }\n\n // Work around for edge\n if (body === undefined) {\n xhr.send();\n } else {\n xhr.send(body);\n }\n\n return new Promise(function(fulfill, reject) {\n\n xhr.onreadystatechange = function() {\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n var resultBody = xhr.response;\n if (xhr.status === 207) {\n resultBody = self.parseMultiStatus(xhr.response);\n }\n\n fulfill({\n body: resultBody,\n status: xhr.status,\n xhr: xhr\n });\n\n };\n\n xhr.ontimeout = function() {\n\n reject(new Error('Timeout exceeded'));\n\n };\n\n });\n\n },\n\n /**\n * Returns an XMLHttpRequest object.\n *\n * This is in its own method, so it can be easily overridden.\n *\n * @return {XMLHttpRequest}\n */\n xhrProvider : function() {\n\n return new XMLHttpRequest();\n\n },\n\n /**\n * Parses a property node.\n *\n * Either returns a string if the node only contains text, or returns an\n * array of non-text subnodes.\n *\n * @param {Object} propNode node to parse\n * @return {string|Array} text content as string or array of subnodes, excluding text nodes\n */\n _parsePropNode: function(propNode) {\n var content = null;\n if (propNode.childNodes && propNode.childNodes.length > 0) {\n var subNodes = [];\n // filter out text nodes\n for (var j = 0; j < propNode.childNodes.length; j++) {\n var node = propNode.childNodes[j];\n if (node.nodeType === 1) {\n subNodes.push(node);\n }\n }\n if (subNodes.length) {\n content = subNodes;\n }\n }\n\n return content || propNode.textContent || propNode.text || '';\n },\n\n /**\n * Parses a multi-status response body.\n *\n * @param {string} xmlBody\n * @param {Array}\n */\n parseMultiStatus : function(xmlBody) {\n\n var parser = new DOMParser();\n var doc = parser.parseFromString(xmlBody, \"application/xml\");\n\n var resolver = function(foo) {\n var ii;\n for(ii in this.xmlNamespaces) {\n if (this.xmlNamespaces[ii] === foo) {\n return ii;\n }\n }\n }.bind(this);\n\n var responseIterator = doc.evaluate('/d:multistatus/d:response', doc, resolver, XPathResult.ANY_TYPE, null);\n\n var result = [];\n var responseNode = responseIterator.iterateNext();\n\n while(responseNode) {\n\n var response = {\n href : null,\n propStat : []\n };\n\n response.href = doc.evaluate('string(d:href)', responseNode, resolver, XPathResult.ANY_TYPE, null).stringValue;\n\n var propStatIterator = doc.evaluate('d:propstat', responseNode, resolver, XPathResult.ANY_TYPE, null);\n var propStatNode = propStatIterator.iterateNext();\n\n while(propStatNode) {\n var propStat = {\n status : doc.evaluate('string(d:status)', propStatNode, resolver, XPathResult.ANY_TYPE, null).stringValue,\n properties : {},\n };\n\n var propIterator = doc.evaluate('d:prop/*', propStatNode, resolver, XPathResult.ANY_TYPE, null);\n\n var propNode = propIterator.iterateNext();\n while(propNode) {\n var content = this._parsePropNode(propNode);\n propStat.properties['{' + propNode.namespaceURI + '}' + propNode.localName] = content;\n propNode = propIterator.iterateNext();\n\n }\n response.propStat.push(propStat);\n propStatNode = propStatIterator.iterateNext();\n\n\n }\n\n result.push(response);\n responseNode = responseIterator.iterateNext();\n\n }\n\n return result;\n\n },\n\n /**\n * Takes a relative url, and maps it to an absolute url, using the baseUrl\n *\n * @param {string} url\n * @return {string}\n */\n resolveUrl : function(url) {\n\n // Note: this is rudamentary.. not sure yet if it handles every case.\n if (/^https?:\\/\\//i.test(url)) {\n // absolute\n return url;\n }\n\n var baseParts = this.parseUrl(this.baseUrl);\n if (url.charAt('/')) {\n // Url starts with a slash\n return baseParts.root + url;\n }\n\n // Url does not start with a slash, we need grab the base url right up until the last slash.\n var newUrl = baseParts.root + '/';\n if (baseParts.path.lastIndexOf('/')!==-1) {\n newUrl = newUrl = baseParts.path.subString(0, baseParts.path.lastIndexOf('/')) + '/';\n }\n newUrl+=url;\n return url;\n\n },\n\n /**\n * Parses a url and returns its individual components.\n *\n * @param {String} url\n * @return {Object}\n */\n parseUrl : function(url) {\n\n var parts = url.match(/^(?:([A-Za-z]+):)?(\\/{0,3})([0-9.\\-A-Za-z]+)(?::(\\d+))?(?:\\/([^?#]*))?(?:\\?([^#]*))?(?:#(.*))?$/);\n var result = {\n url : parts[0],\n scheme : parts[1],\n host : parts[3],\n port : parts[4],\n path : parts[5],\n query : parts[6],\n fragment : parts[7],\n };\n result.root =\n result.scheme + '://' +\n result.host +\n (result.port ? ':' + result.port : '');\n\n return result;\n\n },\n\n parseClarkNotation : function(propertyName) {\n\n var result = propertyName.match(/^{([^}]+)}(.*)$/);\n if (!result) {\n return;\n }\n\n return {\n name : result[2],\n namespace : result[1]\n };\n\n }\n\n};\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports.Client = dav.Client;\n}\n","var map = {\n\t\"./af\": 25177,\n\t\"./af.js\": 25177,\n\t\"./ar\": 61509,\n\t\"./ar-dz\": 41488,\n\t\"./ar-dz.js\": 41488,\n\t\"./ar-kw\": 58676,\n\t\"./ar-kw.js\": 58676,\n\t\"./ar-ly\": 42353,\n\t\"./ar-ly.js\": 42353,\n\t\"./ar-ma\": 24496,\n\t\"./ar-ma.js\": 24496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 60301,\n\t\"./ar-sa.js\": 60301,\n\t\"./ar-tn\": 89756,\n\t\"./ar-tn.js\": 89756,\n\t\"./ar.js\": 61509,\n\t\"./az\": 95533,\n\t\"./az.js\": 95533,\n\t\"./be\": 28959,\n\t\"./be.js\": 28959,\n\t\"./bg\": 47777,\n\t\"./bg.js\": 47777,\n\t\"./bm\": 54903,\n\t\"./bm.js\": 54903,\n\t\"./bn\": 61290,\n\t\"./bn-bd\": 17357,\n\t\"./bn-bd.js\": 17357,\n\t\"./bn.js\": 61290,\n\t\"./bo\": 31545,\n\t\"./bo.js\": 31545,\n\t\"./br\": 11470,\n\t\"./br.js\": 11470,\n\t\"./bs\": 44429,\n\t\"./bs.js\": 44429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 56464,\n\t\"./cs.js\": 56464,\n\t\"./cv\": 73635,\n\t\"./cv.js\": 73635,\n\t\"./cy\": 64226,\n\t\"./cy.js\": 64226,\n\t\"./da\": 93601,\n\t\"./da.js\": 93601,\n\t\"./de\": 77853,\n\t\"./de-at\": 26111,\n\t\"./de-at.js\": 26111,\n\t\"./de-ch\": 54697,\n\t\"./de-ch.js\": 54697,\n\t\"./de.js\": 77853,\n\t\"./dv\": 60708,\n\t\"./dv.js\": 60708,\n\t\"./el\": 54691,\n\t\"./el.js\": 54691,\n\t\"./en-au\": 53872,\n\t\"./en-au.js\": 53872,\n\t\"./en-ca\": 28298,\n\t\"./en-ca.js\": 28298,\n\t\"./en-gb\": 56195,\n\t\"./en-gb.js\": 56195,\n\t\"./en-ie\": 66584,\n\t\"./en-ie.js\": 66584,\n\t\"./en-il\": 65543,\n\t\"./en-il.js\": 65543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 79402,\n\t\"./en-nz.js\": 79402,\n\t\"./en-sg\": 43004,\n\t\"./en-sg.js\": 43004,\n\t\"./eo\": 32934,\n\t\"./eo.js\": 32934,\n\t\"./es\": 97650,\n\t\"./es-do\": 20838,\n\t\"./es-do.js\": 20838,\n\t\"./es-mx\": 17730,\n\t\"./es-mx.js\": 17730,\n\t\"./es-us\": 56575,\n\t\"./es-us.js\": 56575,\n\t\"./es.js\": 97650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 90527,\n\t\"./fi.js\": 90527,\n\t\"./fil\": 95995,\n\t\"./fil.js\": 95995,\n\t\"./fo\": 52477,\n\t\"./fo.js\": 52477,\n\t\"./fr\": 85498,\n\t\"./fr-ca\": 26435,\n\t\"./fr-ca.js\": 26435,\n\t\"./fr-ch\": 37892,\n\t\"./fr-ch.js\": 37892,\n\t\"./fr.js\": 85498,\n\t\"./fy\": 37071,\n\t\"./fy.js\": 37071,\n\t\"./ga\": 41734,\n\t\"./ga.js\": 41734,\n\t\"./gd\": 70217,\n\t\"./gd.js\": 70217,\n\t\"./gl\": 77329,\n\t\"./gl.js\": 77329,\n\t\"./gom-deva\": 32124,\n\t\"./gom-deva.js\": 32124,\n\t\"./gom-latn\": 93383,\n\t\"./gom-latn.js\": 93383,\n\t\"./gu\": 95050,\n\t\"./gu.js\": 95050,\n\t\"./he\": 11713,\n\t\"./he.js\": 11713,\n\t\"./hi\": 43861,\n\t\"./hi.js\": 43861,\n\t\"./hr\": 26308,\n\t\"./hr.js\": 26308,\n\t\"./hu\": 90609,\n\t\"./hu.js\": 90609,\n\t\"./hy-am\": 17160,\n\t\"./hy-am.js\": 17160,\n\t\"./id\": 74063,\n\t\"./id.js\": 74063,\n\t\"./is\": 89374,\n\t\"./is.js\": 89374,\n\t\"./it\": 88383,\n\t\"./it-ch\": 21827,\n\t\"./it-ch.js\": 21827,\n\t\"./it.js\": 88383,\n\t\"./ja\": 23827,\n\t\"./ja.js\": 23827,\n\t\"./jv\": 89722,\n\t\"./jv.js\": 89722,\n\t\"./ka\": 41794,\n\t\"./ka.js\": 41794,\n\t\"./kk\": 27088,\n\t\"./kk.js\": 27088,\n\t\"./km\": 96870,\n\t\"./km.js\": 96870,\n\t\"./kn\": 84451,\n\t\"./kn.js\": 84451,\n\t\"./ko\": 63164,\n\t\"./ko.js\": 63164,\n\t\"./ku\": 98174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 98174,\n\t\"./ky\": 78474,\n\t\"./ky.js\": 78474,\n\t\"./lb\": 79680,\n\t\"./lb.js\": 79680,\n\t\"./lo\": 15867,\n\t\"./lo.js\": 15867,\n\t\"./lt\": 45766,\n\t\"./lt.js\": 45766,\n\t\"./lv\": 69532,\n\t\"./lv.js\": 69532,\n\t\"./me\": 58076,\n\t\"./me.js\": 58076,\n\t\"./mi\": 41848,\n\t\"./mi.js\": 41848,\n\t\"./mk\": 30306,\n\t\"./mk.js\": 30306,\n\t\"./ml\": 73739,\n\t\"./ml.js\": 73739,\n\t\"./mn\": 99053,\n\t\"./mn.js\": 99053,\n\t\"./mr\": 86169,\n\t\"./mr.js\": 86169,\n\t\"./ms\": 73386,\n\t\"./ms-my\": 92297,\n\t\"./ms-my.js\": 92297,\n\t\"./ms.js\": 73386,\n\t\"./mt\": 77075,\n\t\"./mt.js\": 77075,\n\t\"./my\": 72264,\n\t\"./my.js\": 72264,\n\t\"./nb\": 22274,\n\t\"./nb.js\": 22274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 92572,\n\t\"./nl-be\": 43784,\n\t\"./nl-be.js\": 43784,\n\t\"./nl.js\": 92572,\n\t\"./nn\": 54566,\n\t\"./nn.js\": 54566,\n\t\"./oc-lnc\": 69330,\n\t\"./oc-lnc.js\": 69330,\n\t\"./pa-in\": 29849,\n\t\"./pa-in.js\": 29849,\n\t\"./pl\": 94418,\n\t\"./pl.js\": 94418,\n\t\"./pt\": 79834,\n\t\"./pt-br\": 48303,\n\t\"./pt-br.js\": 48303,\n\t\"./pt.js\": 79834,\n\t\"./ro\": 24457,\n\t\"./ro.js\": 24457,\n\t\"./ru\": 82271,\n\t\"./ru.js\": 82271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 33478,\n\t\"./se.js\": 33478,\n\t\"./si\": 17538,\n\t\"./si.js\": 17538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 46637,\n\t\"./sl.js\": 46637,\n\t\"./sq\": 86794,\n\t\"./sq.js\": 86794,\n\t\"./sr\": 45719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 45719,\n\t\"./ss\": 56000,\n\t\"./ss.js\": 56000,\n\t\"./sv\": 41011,\n\t\"./sv.js\": 41011,\n\t\"./sw\": 40748,\n\t\"./sw.js\": 40748,\n\t\"./ta\": 11025,\n\t\"./ta.js\": 11025,\n\t\"./te\": 11885,\n\t\"./te.js\": 11885,\n\t\"./tet\": 28861,\n\t\"./tet.js\": 28861,\n\t\"./tg\": 86571,\n\t\"./tg.js\": 86571,\n\t\"./th\": 55802,\n\t\"./th.js\": 55802,\n\t\"./tk\": 59527,\n\t\"./tk.js\": 59527,\n\t\"./tl-ph\": 29231,\n\t\"./tl-ph.js\": 29231,\n\t\"./tlh\": 31052,\n\t\"./tlh.js\": 31052,\n\t\"./tr\": 85096,\n\t\"./tr.js\": 85096,\n\t\"./tzl\": 79846,\n\t\"./tzl.js\": 79846,\n\t\"./tzm\": 81765,\n\t\"./tzm-latn\": 97711,\n\t\"./tzm-latn.js\": 97711,\n\t\"./tzm.js\": 81765,\n\t\"./ug-cn\": 48414,\n\t\"./ug-cn.js\": 48414,\n\t\"./uk\": 16618,\n\t\"./uk.js\": 16618,\n\t\"./ur\": 57777,\n\t\"./ur.js\": 57777,\n\t\"./uz\": 57609,\n\t\"./uz-latn\": 72475,\n\t\"./uz-latn.js\": 72475,\n\t\"./uz.js\": 57609,\n\t\"./vi\": 21135,\n\t\"./vi.js\": 21135,\n\t\"./x-pseudo\": 64051,\n\t\"./x-pseudo.js\": 64051,\n\t\"./yo\": 82218,\n\t\"./yo.js\": 82218,\n\t\"./zh-cn\": 52648,\n\t\"./zh-cn.js\": 52648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 31541,\n\t\"./zh-mo.js\": 31541,\n\t\"./zh-tw\": 50304,\n\t\"./zh-tw.js\": 50304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35358;","import { getCurrentUser as A, onRequestTokenUpdate as ue, getRequestToken as de } from \"@nextcloud/auth\";\nimport { getLoggerBuilder as q } from \"@nextcloud/logger\";\nimport { getCanonicalLocale as ae } from \"@nextcloud/l10n\";\nimport { join as le, basename as fe, extname as ce, dirname as I } from \"path\";\nimport { encodePath as he } from \"@nextcloud/paths\";\nimport { generateRemoteUrl as pe } from \"@nextcloud/router\";\nimport { createClient as ge, getPatcher as we } from \"webdav\";\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst me = (e) => e === null ? q().setApp(\"files\").build() : q().setApp(\"files\").setUid(e.uid).build(), m = me(A());\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ne {\n _entries = [];\n registerEntry(t) {\n this.validateEntry(t), this._entries.push(t);\n }\n unregisterEntry(t) {\n const r = typeof t == \"string\" ? this.getEntryIndex(t) : this.getEntryIndex(t.id);\n if (r === -1) {\n m.warn(\"Entry not found, nothing removed\", { entry: t, entries: this.getEntries() });\n return;\n }\n this._entries.splice(r, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(t) {\n return t ? this._entries.filter((r) => typeof r.enabled == \"function\" ? r.enabled(t) : !0) : this._entries;\n }\n getEntryIndex(t) {\n return this._entries.findIndex((r) => r.id === t);\n }\n validateEntry(t) {\n if (!t.id || !t.displayName || !(t.iconSvgInline || t.iconClass) || !t.handler)\n throw new Error(\"Invalid entry\");\n if (typeof t.id != \"string\" || typeof t.displayName != \"string\")\n throw new Error(\"Invalid id or displayName property\");\n if (t.iconClass && typeof t.iconClass != \"string\" || t.iconSvgInline && typeof t.iconSvgInline != \"string\")\n throw new Error(\"Invalid icon provided\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (typeof t.handler != \"function\")\n throw new Error(\"Invalid handler property\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order property\");\n if (this.getEntryIndex(t.id) !== -1)\n throw new Error(\"Duplicate entry\");\n }\n}\nconst F = function() {\n return typeof window._nc_newfilemenu > \"u\" && (window._nc_newfilemenu = new Ne(), m.debug(\"NewFileMenu initialized\")), window._nc_newfilemenu;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst C = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"], P = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction Yt(e, t = !1, r = !1, s = !1) {\n r = r && !s, typeof e == \"string\" && (e = Number(e));\n let n = e > 0 ? Math.floor(Math.log(e) / Math.log(s ? 1e3 : 1024)) : 0;\n n = Math.min((r ? P.length : C.length) - 1, n);\n const i = r ? P[n] : C[n];\n let d = (e / Math.pow(s ? 1e3 : 1024, n)).toFixed(1);\n return t === !0 && n === 0 ? (d !== \"0.0\" ? \"< 1 \" : \"0 \") + (r ? P[1] : C[1]) : (n < 2 ? d = parseFloat(d).toFixed(0) : d = parseFloat(d).toLocaleString(ae()), d + \" \" + i);\n}\nfunction Jt(e, t = !1) {\n try {\n e = `${e}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch {\n return null;\n }\n const r = e.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (r === null || r[1] === \".\" || r[1] === \"\")\n return null;\n const s = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n }, n = `${r[1]}`, i = r[4] === \"i\" || t ? 1024 : 1e3;\n return Math.round(Number.parseFloat(n) * i ** s[r[3]]);\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Z = /* @__PURE__ */ ((e) => (e.DEFAULT = \"default\", e.HIDDEN = \"hidden\", e))(Z || {});\nclass Qt {\n _action;\n constructor(t) {\n this.validateAction(t), this._action = t;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(t) {\n if (!t.id || typeof t.id != \"string\")\n throw new Error(\"Invalid id\");\n if (!t.displayName || typeof t.displayName != \"function\")\n throw new Error(\"Invalid displayName function\");\n if (\"title\" in t && typeof t.title != \"function\")\n throw new Error(\"Invalid title function\");\n if (!t.iconSvgInline || typeof t.iconSvgInline != \"function\")\n throw new Error(\"Invalid iconSvgInline function\");\n if (!t.exec || typeof t.exec != \"function\")\n throw new Error(\"Invalid exec function\");\n if (\"enabled\" in t && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled function\");\n if (\"execBatch\" in t && typeof t.execBatch != \"function\")\n throw new Error(\"Invalid execBatch function\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order\");\n if (\"parent\" in t && typeof t.parent != \"string\")\n throw new Error(\"Invalid parent\");\n if (t.default && !Object.values(Z).includes(t.default))\n throw new Error(\"Invalid default\");\n if (\"inline\" in t && typeof t.inline != \"function\")\n throw new Error(\"Invalid inline function\");\n if (\"renderInline\" in t && typeof t.renderInline != \"function\")\n throw new Error(\"Invalid renderInline function\");\n }\n}\nconst Dt = function(e) {\n if (typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions.find((t) => t.id === e.id)) {\n m.error(`FileAction ${e.id} already registered`, { action: e });\n return;\n }\n window._nc_fileactions.push(e);\n}, er = function() {\n return typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass tr {\n _header;\n constructor(t) {\n this.validateHeader(t), this._header = t;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(t) {\n if (!t.id || !t.render || !t.updated)\n throw new Error(\"Invalid header: id, render and updated are required\");\n if (typeof t.id != \"string\")\n throw new Error(\"Invalid id property\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (t.render && typeof t.render != \"function\")\n throw new Error(\"Invalid render property\");\n if (t.updated && typeof t.updated != \"function\")\n throw new Error(\"Invalid updated property\");\n }\n}\nconst rr = function(e) {\n if (typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader.find((t) => t.id === e.id)) {\n m.error(`Header ${e.id} already registered`, { header: e });\n return;\n }\n window._nc_filelistheader.push(e);\n}, nr = function() {\n return typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar N = /* @__PURE__ */ ((e) => (e[e.NONE = 0] = \"NONE\", e[e.CREATE = 4] = \"CREATE\", e[e.READ = 1] = \"READ\", e[e.UPDATE = 2] = \"UPDATE\", e[e.DELETE = 8] = \"DELETE\", e[e.SHARE = 16] = \"SHARE\", e[e.ALL = 31] = \"ALL\", e))(N || {});\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst j = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"nc:share-attributes\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:share-types\",\n \"oc:size\",\n \"ocs:share-permissions\"\n], Y = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n}, ir = function(e, t = { nc: \"http://nextcloud.org/ns\" }) {\n typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j], window._nc_dav_namespaces = { ...Y });\n const r = { ...window._nc_dav_namespaces, ...t };\n if (window._nc_dav_properties.find((n) => n === e))\n return m.error(`${e} already registered`, { prop: e }), !1;\n if (e.startsWith(\"<\") || e.split(\":\").length !== 2)\n return m.error(`${e} is not valid. See example: 'oc:fileid'`, { prop: e }), !1;\n const s = e.split(\":\")[0];\n return r[s] ? (window._nc_dav_properties.push(e), window._nc_dav_namespaces = r, !0) : (m.error(`${e} namespace unknown`, { prop: e, namespaces: r }), !1);\n}, V = function() {\n return typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j]), window._nc_dav_properties.map((e) => `<${e} />`).join(\" \");\n}, L = function() {\n return typeof window._nc_dav_namespaces > \"u\" && (window._nc_dav_namespaces = { ...Y }), Object.keys(window._nc_dav_namespaces).map((e) => `xmlns:${e}=\"${window._nc_dav_namespaces?.[e]}\"`).join(\" \");\n}, sr = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<d:propfind ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`;\n}, Ee = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<oc:filter-files ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`;\n}, or = function(e) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<d:searchrequest ${L()}\n\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${A()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${e}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst be = function(e = \"\") {\n let t = N.NONE;\n return e && ((e.includes(\"C\") || e.includes(\"K\")) && (t |= N.CREATE), e.includes(\"G\") && (t |= N.READ), (e.includes(\"W\") || e.includes(\"N\") || e.includes(\"V\")) && (t |= N.UPDATE), e.includes(\"D\") && (t |= N.DELETE), e.includes(\"R\") && (t |= N.SHARE)), t;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar R = /* @__PURE__ */ ((e) => (e.Folder = \"folder\", e.File = \"file\", e))(R || {});\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst J = function(e, t) {\n return e.match(t) !== null;\n}, X = (e, t) => {\n if (e.id && typeof e.id != \"number\")\n throw new Error(\"Invalid id type of value\");\n if (!e.source)\n throw new Error(\"Missing mandatory source\");\n try {\n new URL(e.source);\n } catch {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!e.source.startsWith(\"http\"))\n throw new Error(\"Invalid source format, only http(s) is supported\");\n if (e.mtime && !(e.mtime instanceof Date))\n throw new Error(\"Invalid mtime type\");\n if (e.crtime && !(e.crtime instanceof Date))\n throw new Error(\"Invalid crtime type\");\n if (!e.mime || typeof e.mime != \"string\" || !e.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi))\n throw new Error(\"Missing or invalid mandatory mime\");\n if (\"size\" in e && typeof e.size != \"number\" && e.size !== void 0)\n throw new Error(\"Invalid size type\");\n if (\"permissions\" in e && e.permissions !== void 0 && !(typeof e.permissions == \"number\" && e.permissions >= N.NONE && e.permissions <= N.ALL))\n throw new Error(\"Invalid permissions\");\n if (e.owner && e.owner !== null && typeof e.owner != \"string\")\n throw new Error(\"Invalid owner type\");\n if (e.attributes && typeof e.attributes != \"object\")\n throw new Error(\"Invalid attributes type\");\n if (e.root && typeof e.root != \"string\")\n throw new Error(\"Invalid root type\");\n if (e.root && !e.root.startsWith(\"/\"))\n throw new Error(\"Root must start with a leading slash\");\n if (e.root && !e.source.includes(e.root))\n throw new Error(\"Root must be part of the source\");\n if (e.root && J(e.source, t)) {\n const r = e.source.match(t)[0];\n if (!e.source.includes(le(r, e.root)))\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n if (e.status && !Object.values(Q).includes(e.status))\n throw new Error(\"Status must be a valid NodeStatus\");\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Q = /* @__PURE__ */ ((e) => (e.NEW = \"new\", e.FAILED = \"failed\", e.LOADING = \"loading\", e.LOCKED = \"locked\", e))(Q || {});\nclass D {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n constructor(t, r) {\n X(t, r || this._knownDavService), this._data = t;\n const s = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set: (n, i, d) => (this.updateMtime(), Reflect.set(n, i, d)),\n deleteProperty: (n, i) => (this.updateMtime(), Reflect.deleteProperty(n, i))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n this._attributes = new Proxy(t.attributes || {}, s), delete this._data.attributes, r && (this._knownDavService = r);\n }\n /**\n * Get the source url to this object\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin: t } = new URL(this.source);\n return t + he(this.source.slice(t.length));\n }\n /**\n * Get this object name\n */\n get basename() {\n return fe(this.source);\n }\n /**\n * Get this object's extension\n */\n get extension() {\n return ce(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n */\n get dirname() {\n if (this.root) {\n let r = this.source;\n this.isDavRessource && (r = r.split(this._knownDavService).pop());\n const s = r.indexOf(this.root), n = this.root.replace(/\\/$/, \"\");\n return I(r.slice(s + n.length) || \"/\");\n }\n const t = new URL(this.source);\n return I(t.pathname);\n }\n /**\n * Get the file mime\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Get the file creation time\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Get the file attribute\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n return this.owner === null && !this.isDavRessource ? N.READ : this._data.permissions !== void 0 ? this._data.permissions : N.NONE;\n }\n /**\n * Get the file owner\n */\n get owner() {\n return this.isDavRessource ? this._data.owner : null;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return J(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n */\n get root() {\n return this._data.root ? this._data.root.replace(/^(.+)\\/$/, \"$1\") : this.isDavRessource && I(this.source).split(this._knownDavService).pop() || null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let t = this.source;\n this.isDavRessource && (t = t.split(this._knownDavService).pop());\n const r = t.indexOf(this.root), s = this.root.replace(/\\/$/, \"\");\n return t.slice(r + s.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * Will look for the fileid in attributes if undefined.\n */\n get fileid() {\n return this._data?.id || this.attributes?.fileid;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(t) {\n this._data.status = t;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(t) {\n X({ ...this._data, source: t }, this._knownDavService), this._data.source = t, this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(t) {\n if (t.includes(\"/\"))\n throw new Error(\"Invalid basename\");\n this.move(I(this.source) + \"/\" + t);\n }\n /**\n * Update the mtime if exists.\n */\n updateMtime() {\n this._data.mtime && (this._data.mtime = /* @__PURE__ */ new Date());\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass ye extends D {\n get type() {\n return R.File;\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass _e extends D {\n constructor(t) {\n super({\n ...t,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return R.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst ee = `/files/${A()?.uid}`, te = pe(\"dav\"), ur = function(e = te, t = {}) {\n const r = ge(e, { headers: t });\n function s(i) {\n r.setHeaders({\n ...t,\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: i ?? \"\"\n });\n }\n return ue(s), s(de()), we().patch(\"fetch\", (i, d) => {\n const u = d.headers;\n return u?.method && (d.method = u.method, delete u.method), fetch(i, d);\n }), r;\n}, dr = async (e, t = \"/\", r = ee) => (await e.getDirectoryContents(`${r}${t}`, {\n details: !0,\n data: Ee(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: !0\n})).data.filter((n) => n.filename !== t).map((n) => ve(n, r)), ve = function(e, t = ee, r = te) {\n const s = e.props, n = be(s?.permissions), i = s?.[\"owner-id\"] || A()?.uid, d = {\n id: s?.fileid || 0,\n source: `${r}${e.filename}`,\n mtime: new Date(Date.parse(e.lastmod)),\n mime: e.mime,\n size: s?.size || Number.parseInt(s.getcontentlength || \"0\"),\n permissions: n,\n owner: i,\n root: t,\n attributes: {\n ...e,\n ...s,\n hasPreview: s?.[\"has-preview\"]\n }\n };\n return delete d.attributes?.props, e.type === \"file\" ? new ye(d) : new _e(d);\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Te {\n _views = [];\n _currentView = null;\n register(t) {\n if (this._views.find((r) => r.id === t.id))\n throw new Error(`View id ${t.id} is already registered`);\n this._views.push(t);\n }\n remove(t) {\n const r = this._views.findIndex((s) => s.id === t);\n r !== -1 && this._views.splice(r, 1);\n }\n get views() {\n return this._views;\n }\n setActive(t) {\n this._currentView = t;\n }\n get active() {\n return this._currentView;\n }\n}\nconst ar = function() {\n return typeof window._nc_navigation > \"u\" && (window._nc_navigation = new Te(), m.debug(\"Navigation service initialized\")), window._nc_navigation;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ie {\n _column;\n constructor(t) {\n Ae(t), this._column = t;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst Ae = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"A column id is required\");\n if (!e.title || typeof e.title != \"string\")\n throw new Error(\"A column title is required\");\n if (!e.render || typeof e.render != \"function\")\n throw new Error(\"A render function is required\");\n if (e.sort && typeof e.sort != \"function\")\n throw new Error(\"Column sortFunction must be a function\");\n if (e.summary && typeof e.summary != \"function\")\n throw new Error(\"Column summary must be a function\");\n return !0;\n};\nvar S = {}, O = {};\n(function(e) {\n const t = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\", r = t + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\", s = \"[\" + t + \"][\" + r + \"]*\", n = new RegExp(\"^\" + s + \"$\"), i = function(u, o) {\n const a = [];\n let l = o.exec(u);\n for (; l; ) {\n const f = [];\n f.startIndex = o.lastIndex - l[0].length;\n const c = l.length;\n for (let g = 0; g < c; g++)\n f.push(l[g]);\n a.push(f), l = o.exec(u);\n }\n return a;\n }, d = function(u) {\n const o = n.exec(u);\n return !(o === null || typeof o > \"u\");\n };\n e.isExist = function(u) {\n return typeof u < \"u\";\n }, e.isEmptyObject = function(u) {\n return Object.keys(u).length === 0;\n }, e.merge = function(u, o, a) {\n if (o) {\n const l = Object.keys(o), f = l.length;\n for (let c = 0; c < f; c++)\n a === \"strict\" ? u[l[c]] = [o[l[c]]] : u[l[c]] = o[l[c]];\n }\n }, e.getValue = function(u) {\n return e.isExist(u) ? u : \"\";\n }, e.isName = d, e.getAllMatches = i, e.nameRegexp = s;\n})(O);\nconst M = O, Oe = {\n allowBooleanAttributes: !1,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nS.validate = function(e, t) {\n t = Object.assign({}, Oe, t);\n const r = [];\n let s = !1, n = !1;\n e[0] === \"\\uFEFF\" && (e = e.substr(1));\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\" && e[i + 1] === \"?\") {\n if (i += 2, i = G(e, i), i.err)\n return i;\n } else if (e[i] === \"<\") {\n let d = i;\n if (i++, e[i] === \"!\") {\n i = z(e, i);\n continue;\n } else {\n let u = !1;\n e[i] === \"/\" && (u = !0, i++);\n let o = \"\";\n for (; i < e.length && e[i] !== \">\" && e[i] !== \" \" && e[i] !== \"\t\" && e[i] !== `\n` && e[i] !== \"\\r\"; i++)\n o += e[i];\n if (o = o.trim(), o[o.length - 1] === \"/\" && (o = o.substring(0, o.length - 1), i--), !Re(o)) {\n let f;\n return o.trim().length === 0 ? f = \"Invalid space after '<'.\" : f = \"Tag '\" + o + \"' is an invalid name.\", p(\"InvalidTag\", f, w(e, i));\n }\n const a = xe(e, i);\n if (a === !1)\n return p(\"InvalidAttr\", \"Attributes for '\" + o + \"' have open quote.\", w(e, i));\n let l = a.value;\n if (i = a.index, l[l.length - 1] === \"/\") {\n const f = i - l.length;\n l = l.substring(0, l.length - 1);\n const c = H(l, t);\n if (c === !0)\n s = !0;\n else\n return p(c.err.code, c.err.msg, w(e, f + c.err.line));\n } else if (u)\n if (a.tagClosed) {\n if (l.trim().length > 0)\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' can't have attributes or invalid starting.\", w(e, d));\n {\n const f = r.pop();\n if (o !== f.tagName) {\n let c = w(e, f.tagStartPos);\n return p(\n \"InvalidTag\",\n \"Expected closing tag '\" + f.tagName + \"' (opened in line \" + c.line + \", col \" + c.col + \") instead of closing tag '\" + o + \"'.\",\n w(e, d)\n );\n }\n r.length == 0 && (n = !0);\n }\n } else\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' doesn't have proper closing.\", w(e, i));\n else {\n const f = H(l, t);\n if (f !== !0)\n return p(f.err.code, f.err.msg, w(e, i - l.length + f.err.line));\n if (n === !0)\n return p(\"InvalidXml\", \"Multiple possible root nodes found.\", w(e, i));\n t.unpairedTags.indexOf(o) !== -1 || r.push({ tagName: o, tagStartPos: d }), s = !0;\n }\n for (i++; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"!\") {\n i++, i = z(e, i);\n continue;\n } else if (e[i + 1] === \"?\") {\n if (i = G(e, ++i), i.err)\n return i;\n } else\n break;\n else if (e[i] === \"&\") {\n const f = Ve(e, i);\n if (f == -1)\n return p(\"InvalidChar\", \"char '&' is not expected.\", w(e, i));\n i = f;\n } else if (n === !0 && !U(e[i]))\n return p(\"InvalidXml\", \"Extra text at the end\", w(e, i));\n e[i] === \"<\" && i--;\n }\n } else {\n if (U(e[i]))\n continue;\n return p(\"InvalidChar\", \"char '\" + e[i] + \"' is not expected.\", w(e, i));\n }\n if (s) {\n if (r.length == 1)\n return p(\"InvalidTag\", \"Unclosed tag '\" + r[0].tagName + \"'.\", w(e, r[0].tagStartPos));\n if (r.length > 0)\n return p(\"InvalidXml\", \"Invalid '\" + JSON.stringify(r.map((i) => i.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n } else\n return p(\"InvalidXml\", \"Start tag expected.\", 1);\n return !0;\n};\nfunction U(e) {\n return e === \" \" || e === \"\t\" || e === `\n` || e === \"\\r\";\n}\nfunction G(e, t) {\n const r = t;\n for (; t < e.length; t++)\n if (e[t] == \"?\" || e[t] == \" \") {\n const s = e.substr(r, t - r);\n if (t > 5 && s === \"xml\")\n return p(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", w(e, t));\n if (e[t] == \"?\" && e[t + 1] == \">\") {\n t++;\n break;\n } else\n continue;\n }\n return t;\n}\nfunction z(e, t) {\n if (e.length > t + 5 && e[t + 1] === \"-\" && e[t + 2] === \"-\") {\n for (t += 3; t < e.length; t++)\n if (e[t] === \"-\" && e[t + 1] === \"-\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n } else if (e.length > t + 8 && e[t + 1] === \"D\" && e[t + 2] === \"O\" && e[t + 3] === \"C\" && e[t + 4] === \"T\" && e[t + 5] === \"Y\" && e[t + 6] === \"P\" && e[t + 7] === \"E\") {\n let r = 1;\n for (t += 8; t < e.length; t++)\n if (e[t] === \"<\")\n r++;\n else if (e[t] === \">\" && (r--, r === 0))\n break;\n } else if (e.length > t + 9 && e[t + 1] === \"[\" && e[t + 2] === \"C\" && e[t + 3] === \"D\" && e[t + 4] === \"A\" && e[t + 5] === \"T\" && e[t + 6] === \"A\" && e[t + 7] === \"[\") {\n for (t += 8; t < e.length; t++)\n if (e[t] === \"]\" && e[t + 1] === \"]\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n }\n return t;\n}\nconst Ce = '\"', Pe = \"'\";\nfunction xe(e, t) {\n let r = \"\", s = \"\", n = !1;\n for (; t < e.length; t++) {\n if (e[t] === Ce || e[t] === Pe)\n s === \"\" ? s = e[t] : s !== e[t] || (s = \"\");\n else if (e[t] === \">\" && s === \"\") {\n n = !0;\n break;\n }\n r += e[t];\n }\n return s !== \"\" ? !1 : {\n value: r,\n index: t,\n tagClosed: n\n };\n}\nconst $e = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction H(e, t) {\n const r = M.getAllMatches(e, $e), s = {};\n for (let n = 0; n < r.length; n++) {\n if (r[n][1].length === 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' has no space in starting.\", v(r[n]));\n if (r[n][3] !== void 0 && r[n][4] === void 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' is without value.\", v(r[n]));\n if (r[n][3] === void 0 && !t.allowBooleanAttributes)\n return p(\"InvalidAttr\", \"boolean attribute '\" + r[n][2] + \"' is not allowed.\", v(r[n]));\n const i = r[n][2];\n if (!Le(i))\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is an invalid name.\", v(r[n]));\n if (!s.hasOwnProperty(i))\n s[i] = 1;\n else\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is repeated.\", v(r[n]));\n }\n return !0;\n}\nfunction Fe(e, t) {\n let r = /\\d/;\n for (e[t] === \"x\" && (t++, r = /[\\da-fA-F]/); t < e.length; t++) {\n if (e[t] === \";\")\n return t;\n if (!e[t].match(r))\n break;\n }\n return -1;\n}\nfunction Ve(e, t) {\n if (t++, e[t] === \";\")\n return -1;\n if (e[t] === \"#\")\n return t++, Fe(e, t);\n let r = 0;\n for (; t < e.length; t++, r++)\n if (!(e[t].match(/\\w/) && r < 20)) {\n if (e[t] === \";\")\n break;\n return -1;\n }\n return t;\n}\nfunction p(e, t, r) {\n return {\n err: {\n code: e,\n msg: t,\n line: r.line || r,\n col: r.col\n }\n };\n}\nfunction Le(e) {\n return M.isName(e);\n}\nfunction Re(e) {\n return M.isName(e);\n}\nfunction w(e, t) {\n const r = e.substring(0, t).split(/\\r?\\n/);\n return {\n line: r.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: r[r.length - 1].length + 1\n };\n}\nfunction v(e) {\n return e.startIndex + e[1].length;\n}\nvar k = {};\nconst re = {\n preserveOrder: !1,\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n removeNSPrefix: !1,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: !1,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: !0,\n parseAttributeValue: !1,\n trimValues: !0,\n //Trim string values of tag and attributes\n cdataPropName: !1,\n numberParseOptions: {\n hex: !0,\n leadingZeros: !0,\n eNotation: !0\n },\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: !1,\n isArray: () => !1,\n commentPropName: !1,\n unpairedTags: [],\n processEntities: !0,\n htmlEntities: !1,\n ignoreDeclaration: !1,\n ignorePiTags: !1,\n transformTagName: !1,\n transformAttributeName: !1,\n updateTag: function(e, t, r) {\n return e;\n }\n // skipEmptyListItem: false\n}, Se = function(e) {\n return Object.assign({}, re, e);\n};\nk.buildOptions = Se;\nk.defaultOptions = re;\nclass Me {\n constructor(t) {\n this.tagname = t, this.child = [], this[\":@\"] = {};\n }\n add(t, r) {\n t === \"__proto__\" && (t = \"#__proto__\"), this.child.push({ [t]: r });\n }\n addChild(t) {\n t.tagname === \"__proto__\" && (t.tagname = \"#__proto__\"), t[\":@\"] && Object.keys(t[\":@\"]).length > 0 ? this.child.push({ [t.tagname]: t.child, \":@\": t[\":@\"] }) : this.child.push({ [t.tagname]: t.child });\n }\n}\nvar ke = Me;\nconst Be = O;\nfunction qe(e, t) {\n const r = {};\n if (e[t + 3] === \"O\" && e[t + 4] === \"C\" && e[t + 5] === \"T\" && e[t + 6] === \"Y\" && e[t + 7] === \"P\" && e[t + 8] === \"E\") {\n t = t + 9;\n let s = 1, n = !1, i = !1, d = \"\";\n for (; t < e.length; t++)\n if (e[t] === \"<\" && !i) {\n if (n && Ge(e, t))\n t += 7, [entityName, val, t] = Xe(e, t + 1), val.indexOf(\"&\") === -1 && (r[We(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n });\n else if (n && ze(e, t))\n t += 8;\n else if (n && He(e, t))\n t += 8;\n else if (n && Ke(e, t))\n t += 9;\n else if (Ue)\n i = !0;\n else\n throw new Error(\"Invalid DOCTYPE\");\n s++, d = \"\";\n } else if (e[t] === \">\") {\n if (i ? e[t - 1] === \"-\" && e[t - 2] === \"-\" && (i = !1, s--) : s--, s === 0)\n break;\n } else\n e[t] === \"[\" ? n = !0 : d += e[t];\n if (s !== 0)\n throw new Error(\"Unclosed DOCTYPE\");\n } else\n throw new Error(\"Invalid Tag instead of DOCTYPE\");\n return { entities: r, i: t };\n}\nfunction Xe(e, t) {\n let r = \"\";\n for (; t < e.length && e[t] !== \"'\" && e[t] !== '\"'; t++)\n r += e[t];\n if (r = r.trim(), r.indexOf(\" \") !== -1)\n throw new Error(\"External entites are not supported\");\n const s = e[t++];\n let n = \"\";\n for (; t < e.length && e[t] !== s; t++)\n n += e[t];\n return [r, n, t];\n}\nfunction Ue(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"-\" && e[t + 3] === \"-\";\n}\nfunction Ge(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"N\" && e[t + 4] === \"T\" && e[t + 5] === \"I\" && e[t + 6] === \"T\" && e[t + 7] === \"Y\";\n}\nfunction ze(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"L\" && e[t + 4] === \"E\" && e[t + 5] === \"M\" && e[t + 6] === \"E\" && e[t + 7] === \"N\" && e[t + 8] === \"T\";\n}\nfunction He(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"A\" && e[t + 3] === \"T\" && e[t + 4] === \"T\" && e[t + 5] === \"L\" && e[t + 6] === \"I\" && e[t + 7] === \"S\" && e[t + 8] === \"T\";\n}\nfunction Ke(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"N\" && e[t + 3] === \"O\" && e[t + 4] === \"T\" && e[t + 5] === \"A\" && e[t + 6] === \"T\" && e[t + 7] === \"I\" && e[t + 8] === \"O\" && e[t + 9] === \"N\";\n}\nfunction We(e) {\n if (Be.isName(e))\n return e;\n throw new Error(`Invalid entity name ${e}`);\n}\nvar Ze = qe;\nconst je = /^[-+]?0x[a-fA-F0-9]+$/, Ye = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n!Number.parseInt && window.parseInt && (Number.parseInt = window.parseInt);\n!Number.parseFloat && window.parseFloat && (Number.parseFloat = window.parseFloat);\nconst Je = {\n hex: !0,\n leadingZeros: !0,\n decimalPoint: \".\",\n eNotation: !0\n //skipLike: /regex/\n};\nfunction Qe(e, t = {}) {\n if (t = Object.assign({}, Je, t), !e || typeof e != \"string\")\n return e;\n let r = e.trim();\n if (t.skipLike !== void 0 && t.skipLike.test(r))\n return e;\n if (t.hex && je.test(r))\n return Number.parseInt(r, 16);\n {\n const s = Ye.exec(r);\n if (s) {\n const n = s[1], i = s[2];\n let d = De(s[3]);\n const u = s[4] || s[6];\n if (!t.leadingZeros && i.length > 0 && n && r[2] !== \".\")\n return e;\n if (!t.leadingZeros && i.length > 0 && !n && r[1] !== \".\")\n return e;\n {\n const o = Number(r), a = \"\" + o;\n return a.search(/[eE]/) !== -1 || u ? t.eNotation ? o : e : r.indexOf(\".\") !== -1 ? a === \"0\" && d === \"\" || a === d || n && a === \"-\" + d ? o : e : i ? d === a || n + d === a ? o : e : r === a || r === n + a ? o : e;\n }\n } else\n return e;\n }\n}\nfunction De(e) {\n return e && e.indexOf(\".\") !== -1 && (e = e.replace(/0+$/, \"\"), e === \".\" ? e = \"0\" : e[0] === \".\" ? e = \"0\" + e : e[e.length - 1] === \".\" && (e = e.substr(0, e.length - 1))), e;\n}\nvar et = Qe;\nconst B = O, T = ke, tt = Ze, rt = et;\n\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g, B.nameRegexp);\nlet nt = class {\n constructor(t) {\n this.options = t, this.currentNode = null, this.tagsNodeStack = [], this.docTypeEntities = {}, this.lastEntities = {\n apos: { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n gt: { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n lt: { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n quot: { regex: /&(quot|#34|#x22);/g, val: '\"' }\n }, this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" }, this.htmlEntities = {\n space: { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n cent: { regex: /&(cent|#162);/g, val: \"¢\" },\n pound: { regex: /&(pound|#163);/g, val: \"£\" },\n yen: { regex: /&(yen|#165);/g, val: \"¥\" },\n euro: { regex: /&(euro|#8364);/g, val: \"€\" },\n copyright: { regex: /&(copy|#169);/g, val: \"©\" },\n reg: { regex: /&(reg|#174);/g, val: \"®\" },\n inr: { regex: /&(inr|#8377);/g, val: \"₹\" }\n }, this.addExternalEntities = it, this.parseXml = at, this.parseTextData = st, this.resolveNameSpace = ot, this.buildAttributesMap = dt, this.isItStopNode = ht, this.replaceEntitiesValue = ft, this.readStopNodeData = gt, this.saveTextToParentTag = ct, this.addChild = lt;\n }\n};\nfunction it(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n this.lastEntities[s] = {\n regex: new RegExp(\"&\" + s + \";\", \"g\"),\n val: e[s]\n };\n }\n}\nfunction st(e, t, r, s, n, i, d) {\n if (e !== void 0 && (this.options.trimValues && !s && (e = e.trim()), e.length > 0)) {\n d || (e = this.replaceEntitiesValue(e));\n const u = this.options.tagValueProcessor(t, e, r, n, i);\n return u == null ? e : typeof u != typeof e || u !== e ? u : this.options.trimValues ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e.trim() === e ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e;\n }\n}\nfunction ot(e) {\n if (this.options.removeNSPrefix) {\n const t = e.split(\":\"), r = e.charAt(0) === \"/\" ? \"/\" : \"\";\n if (t[0] === \"xmlns\")\n return \"\";\n t.length === 2 && (e = r + t[1]);\n }\n return e;\n}\nconst ut = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction dt(e, t, r) {\n if (!this.options.ignoreAttributes && typeof e == \"string\") {\n const s = B.getAllMatches(e, ut), n = s.length, i = {};\n for (let d = 0; d < n; d++) {\n const u = this.resolveNameSpace(s[d][1]);\n let o = s[d][4], a = this.options.attributeNamePrefix + u;\n if (u.length)\n if (this.options.transformAttributeName && (a = this.options.transformAttributeName(a)), a === \"__proto__\" && (a = \"#__proto__\"), o !== void 0) {\n this.options.trimValues && (o = o.trim()), o = this.replaceEntitiesValue(o);\n const l = this.options.attributeValueProcessor(u, o, t);\n l == null ? i[a] = o : typeof l != typeof o || l !== o ? i[a] = l : i[a] = $(\n o,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n } else\n this.options.allowBooleanAttributes && (i[a] = !0);\n }\n if (!Object.keys(i).length)\n return;\n if (this.options.attributesGroupName) {\n const d = {};\n return d[this.options.attributesGroupName] = i, d;\n }\n return i;\n }\n}\nconst at = function(e) {\n e = e.replace(/\\r\\n?/g, `\n`);\n const t = new T(\"!xml\");\n let r = t, s = \"\", n = \"\";\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"/\") {\n const u = y(e, \">\", i, \"Closing Tag is not closed.\");\n let o = e.substring(i + 2, u).trim();\n if (this.options.removeNSPrefix) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1));\n }\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && (s = this.saveTextToParentTag(s, r, n));\n const a = n.substring(n.lastIndexOf(\".\") + 1);\n if (o && this.options.unpairedTags.indexOf(o) !== -1)\n throw new Error(`Unpaired tag can not be used as closing tag: </${o}>`);\n let l = 0;\n a && this.options.unpairedTags.indexOf(a) !== -1 ? (l = n.lastIndexOf(\".\", n.lastIndexOf(\".\") - 1), this.tagsNodeStack.pop()) : l = n.lastIndexOf(\".\"), n = n.substring(0, l), r = this.tagsNodeStack.pop(), s = \"\", i = u;\n } else if (e[i + 1] === \"?\") {\n let u = x(e, i, !1, \"?>\");\n if (!u)\n throw new Error(\"Pi Tag is not closed.\");\n if (s = this.saveTextToParentTag(s, r, n), !(this.options.ignoreDeclaration && u.tagName === \"?xml\" || this.options.ignorePiTags)) {\n const o = new T(u.tagName);\n o.add(this.options.textNodeName, \"\"), u.tagName !== u.tagExp && u.attrExpPresent && (o[\":@\"] = this.buildAttributesMap(u.tagExp, n, u.tagName)), this.addChild(r, o, n);\n }\n i = u.closeIndex + 1;\n } else if (e.substr(i + 1, 3) === \"!--\") {\n const u = y(e, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const o = e.substring(i + 4, u - 2);\n s = this.saveTextToParentTag(s, r, n), r.add(this.options.commentPropName, [{ [this.options.textNodeName]: o }]);\n }\n i = u;\n } else if (e.substr(i + 1, 2) === \"!D\") {\n const u = tt(e, i);\n this.docTypeEntities = u.entities, i = u.i;\n } else if (e.substr(i + 1, 2) === \"![\") {\n const u = y(e, \"]]>\", i, \"CDATA is not closed.\") - 2, o = e.substring(i + 9, u);\n if (s = this.saveTextToParentTag(s, r, n), this.options.cdataPropName)\n r.add(this.options.cdataPropName, [{ [this.options.textNodeName]: o }]);\n else {\n let a = this.parseTextData(o, r.tagname, n, !0, !1, !0);\n a == null && (a = \"\"), r.add(this.options.textNodeName, a);\n }\n i = u + 2;\n } else {\n let u = x(e, i, this.options.removeNSPrefix), o = u.tagName;\n const a = u.rawTagName;\n let l = u.tagExp, f = u.attrExpPresent, c = u.closeIndex;\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && s && r.tagname !== \"!xml\" && (s = this.saveTextToParentTag(s, r, n, !1));\n const g = r;\n if (g && this.options.unpairedTags.indexOf(g.tagname) !== -1 && (r = this.tagsNodeStack.pop(), n = n.substring(0, n.lastIndexOf(\".\"))), o !== t.tagname && (n += n ? \".\" + o : o), this.isItStopNode(this.options.stopNodes, n, o)) {\n let h = \"\";\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1)\n i = u.closeIndex;\n else if (this.options.unpairedTags.indexOf(o) !== -1)\n i = u.closeIndex;\n else {\n const E = this.readStopNodeData(e, a, c + 1);\n if (!E)\n throw new Error(`Unexpected end of ${a}`);\n i = E.i, h = E.tagContent;\n }\n const _ = new T(o);\n o !== l && f && (_[\":@\"] = this.buildAttributesMap(l, n, o)), h && (h = this.parseTextData(h, o, n, !0, f, !0, !0)), n = n.substr(0, n.lastIndexOf(\".\")), _.add(this.options.textNodeName, h), this.addChild(r, _, n);\n } else {\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1) {\n o[o.length - 1] === \"/\" ? (o = o.substr(0, o.length - 1), n = n.substr(0, n.length - 1), l = o) : l = l.substr(0, l.length - 1), this.options.transformTagName && (o = this.options.transformTagName(o));\n const h = new T(o);\n o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), n = n.substr(0, n.lastIndexOf(\".\"));\n } else {\n const h = new T(o);\n this.tagsNodeStack.push(r), o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), r = h;\n }\n s = \"\", i = c;\n }\n }\n else\n s += e[i];\n return t.child;\n};\nfunction lt(e, t, r) {\n const s = this.options.updateTag(t.tagname, r, t[\":@\"]);\n s === !1 || (typeof s == \"string\" && (t.tagname = s), e.addChild(t));\n}\nconst ft = function(e) {\n if (this.options.processEntities) {\n for (let t in this.docTypeEntities) {\n const r = this.docTypeEntities[t];\n e = e.replace(r.regx, r.val);\n }\n for (let t in this.lastEntities) {\n const r = this.lastEntities[t];\n e = e.replace(r.regex, r.val);\n }\n if (this.options.htmlEntities)\n for (let t in this.htmlEntities) {\n const r = this.htmlEntities[t];\n e = e.replace(r.regex, r.val);\n }\n e = e.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return e;\n};\nfunction ct(e, t, r, s) {\n return e && (s === void 0 && (s = Object.keys(t.child).length === 0), e = this.parseTextData(\n e,\n t.tagname,\n r,\n !1,\n t[\":@\"] ? Object.keys(t[\":@\"]).length !== 0 : !1,\n s\n ), e !== void 0 && e !== \"\" && t.add(this.options.textNodeName, e), e = \"\"), e;\n}\nfunction ht(e, t, r) {\n const s = \"*.\" + r;\n for (const n in e) {\n const i = e[n];\n if (s === i || t === i)\n return !0;\n }\n return !1;\n}\nfunction pt(e, t, r = \">\") {\n let s, n = \"\";\n for (let i = t; i < e.length; i++) {\n let d = e[i];\n if (s)\n d === s && (s = \"\");\n else if (d === '\"' || d === \"'\")\n s = d;\n else if (d === r[0])\n if (r[1]) {\n if (e[i + 1] === r[1])\n return {\n data: n,\n index: i\n };\n } else\n return {\n data: n,\n index: i\n };\n else\n d === \"\t\" && (d = \" \");\n n += d;\n }\n}\nfunction y(e, t, r, s) {\n const n = e.indexOf(t, r);\n if (n === -1)\n throw new Error(s);\n return n + t.length - 1;\n}\nfunction x(e, t, r, s = \">\") {\n const n = pt(e, t + 1, s);\n if (!n)\n return;\n let i = n.data;\n const d = n.index, u = i.search(/\\s/);\n let o = i, a = !0;\n u !== -1 && (o = i.substr(0, u).replace(/\\s\\s*$/, \"\"), i = i.substr(u + 1));\n const l = o;\n if (r) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1), a = o !== n.data.substr(f + 1));\n }\n return {\n tagName: o,\n tagExp: i,\n closeIndex: d,\n attrExpPresent: a,\n rawTagName: l\n };\n}\nfunction gt(e, t, r) {\n const s = r;\n let n = 1;\n for (; r < e.length; r++)\n if (e[r] === \"<\")\n if (e[r + 1] === \"/\") {\n const i = y(e, \">\", r, `${t} is not closed`);\n if (e.substring(r + 2, i).trim() === t && (n--, n === 0))\n return {\n tagContent: e.substring(s, r),\n i\n };\n r = i;\n } else if (e[r + 1] === \"?\")\n r = y(e, \"?>\", r + 1, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 3) === \"!--\")\n r = y(e, \"-->\", r + 3, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 2) === \"![\")\n r = y(e, \"]]>\", r, \"StopNode is not closed.\") - 2;\n else {\n const i = x(e, r, \">\");\n i && ((i && i.tagName) === t && i.tagExp[i.tagExp.length - 1] !== \"/\" && n++, r = i.closeIndex);\n }\n}\nfunction $(e, t, r) {\n if (t && typeof e == \"string\") {\n const s = e.trim();\n return s === \"true\" ? !0 : s === \"false\" ? !1 : rt(e, r);\n } else\n return B.isExist(e) ? e : \"\";\n}\nvar wt = nt, ne = {};\nfunction mt(e, t) {\n return ie(e, t);\n}\nfunction ie(e, t, r) {\n let s;\n const n = {};\n for (let i = 0; i < e.length; i++) {\n const d = e[i], u = Nt(d);\n let o = \"\";\n if (r === void 0 ? o = u : o = r + \".\" + u, u === t.textNodeName)\n s === void 0 ? s = d[u] : s += \"\" + d[u];\n else {\n if (u === void 0)\n continue;\n if (d[u]) {\n let a = ie(d[u], t, o);\n const l = bt(a, t);\n d[\":@\"] ? Et(a, d[\":@\"], o, t) : Object.keys(a).length === 1 && a[t.textNodeName] !== void 0 && !t.alwaysCreateTextNode ? a = a[t.textNodeName] : Object.keys(a).length === 0 && (t.alwaysCreateTextNode ? a[t.textNodeName] = \"\" : a = \"\"), n[u] !== void 0 && n.hasOwnProperty(u) ? (Array.isArray(n[u]) || (n[u] = [n[u]]), n[u].push(a)) : t.isArray(u, o, l) ? n[u] = [a] : n[u] = a;\n }\n }\n }\n return typeof s == \"string\" ? s.length > 0 && (n[t.textNodeName] = s) : s !== void 0 && (n[t.textNodeName] = s), n;\n}\nfunction Nt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (s !== \":@\")\n return s;\n }\n}\nfunction Et(e, t, r, s) {\n if (t) {\n const n = Object.keys(t), i = n.length;\n for (let d = 0; d < i; d++) {\n const u = n[d];\n s.isArray(u, r + \".\" + u, !0, !0) ? e[u] = [t[u]] : e[u] = t[u];\n }\n }\n}\nfunction bt(e, t) {\n const { textNodeName: r } = t, s = Object.keys(e).length;\n return !!(s === 0 || s === 1 && (e[r] || typeof e[r] == \"boolean\" || e[r] === 0));\n}\nne.prettify = mt;\nconst { buildOptions: yt } = k, _t = wt, { prettify: vt } = ne, Tt = S;\nlet It = class {\n constructor(t) {\n this.externalEntities = {}, this.options = yt(t);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(t, r) {\n if (typeof t != \"string\")\n if (t.toString)\n t = t.toString();\n else\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n if (r) {\n r === !0 && (r = {});\n const i = Tt.validate(t, r);\n if (i !== !0)\n throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`);\n }\n const s = new _t(this.options);\n s.addExternalEntities(this.externalEntities);\n const n = s.parseXml(t);\n return this.options.preserveOrder || n === void 0 ? n : vt(n, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(t, r) {\n if (r.indexOf(\"&\") !== -1)\n throw new Error(\"Entity value can't have '&'\");\n if (t.indexOf(\"&\") !== -1 || t.indexOf(\";\") !== -1)\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '
'\");\n if (r === \"&\")\n throw new Error(\"An entity with value '&' is not permitted\");\n this.externalEntities[t] = r;\n }\n};\nvar At = It;\nconst Ot = `\n`;\nfunction Ct(e, t) {\n let r = \"\";\n return t.format && t.indentBy.length > 0 && (r = Ot), se(e, t, \"\", r);\n}\nfunction se(e, t, r, s) {\n let n = \"\", i = !1;\n for (let d = 0; d < e.length; d++) {\n const u = e[d], o = Pt(u);\n if (o === void 0)\n continue;\n let a = \"\";\n if (r.length === 0 ? a = o : a = `${r}.${o}`, o === t.textNodeName) {\n let h = u[o];\n xt(a, t) || (h = t.tagValueProcessor(o, h), h = oe(h, t)), i && (n += s), n += h, i = !1;\n continue;\n } else if (o === t.cdataPropName) {\n i && (n += s), n += `<![CDATA[${u[o][0][t.textNodeName]}]]>`, i = !1;\n continue;\n } else if (o === t.commentPropName) {\n n += s + `<!--${u[o][0][t.textNodeName]}-->`, i = !0;\n continue;\n } else if (o[0] === \"?\") {\n const h = K(u[\":@\"], t), _ = o === \"?xml\" ? \"\" : s;\n let E = u[o][0][t.textNodeName];\n E = E.length !== 0 ? \" \" + E : \"\", n += _ + `<${o}${E}${h}?>`, i = !0;\n continue;\n }\n let l = s;\n l !== \"\" && (l += t.indentBy);\n const f = K(u[\":@\"], t), c = s + `<${o}${f}`, g = se(u[o], t, a, l);\n t.unpairedTags.indexOf(o) !== -1 ? t.suppressUnpairedNode ? n += c + \">\" : n += c + \"/>\" : (!g || g.length === 0) && t.suppressEmptyNode ? n += c + \"/>\" : g && g.endsWith(\">\") ? n += c + `>${g}${s}</${o}>` : (n += c + \">\", g && s !== \"\" && (g.includes(\"/>\") || g.includes(\"</\")) ? n += s + t.indentBy + g + s : n += g, n += `</${o}>`), i = !0;\n }\n return n;\n}\nfunction Pt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (e.hasOwnProperty(s) && s !== \":@\")\n return s;\n }\n}\nfunction K(e, t) {\n let r = \"\";\n if (e && !t.ignoreAttributes)\n for (let s in e) {\n if (!e.hasOwnProperty(s))\n continue;\n let n = t.attributeValueProcessor(s, e[s]);\n n = oe(n, t), n === !0 && t.suppressBooleanAttributes ? r += ` ${s.substr(t.attributeNamePrefix.length)}` : r += ` ${s.substr(t.attributeNamePrefix.length)}=\"${n}\"`;\n }\n return r;\n}\nfunction xt(e, t) {\n e = e.substr(0, e.length - t.textNodeName.length - 1);\n let r = e.substr(e.lastIndexOf(\".\") + 1);\n for (let s in t.stopNodes)\n if (t.stopNodes[s] === e || t.stopNodes[s] === \"*.\" + r)\n return !0;\n return !1;\n}\nfunction oe(e, t) {\n if (e && e.length > 0 && t.processEntities)\n for (let r = 0; r < t.entities.length; r++) {\n const s = t.entities[r];\n e = e.replace(s.regex, s.val);\n }\n return e;\n}\nvar $t = Ct;\nconst Ft = $t, Vt = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n cdataPropName: !1,\n format: !1,\n indentBy: \" \",\n suppressEmptyNode: !1,\n suppressUnpairedNode: !0,\n suppressBooleanAttributes: !0,\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n preserveOrder: !1,\n commentPropName: !1,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: !0,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: !1\n};\nfunction b(e) {\n this.options = Object.assign({}, Vt, e), this.options.ignoreAttributes || this.options.attributesGroupName ? this.isAttribute = function() {\n return !1;\n } : (this.attrPrefixLen = this.options.attributeNamePrefix.length, this.isAttribute = St), this.processTextOrObjNode = Lt, this.options.format ? (this.indentate = Rt, this.tagEndChar = `>\n`, this.newLine = `\n`) : (this.indentate = function() {\n return \"\";\n }, this.tagEndChar = \">\", this.newLine = \"\");\n}\nb.prototype.build = function(e) {\n return this.options.preserveOrder ? Ft(e, this.options) : (Array.isArray(e) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1 && (e = {\n [this.options.arrayNodeName]: e\n }), this.j2x(e, 0).val);\n};\nb.prototype.j2x = function(e, t) {\n let r = \"\", s = \"\";\n for (let n in e)\n if (Object.prototype.hasOwnProperty.call(e, n))\n if (typeof e[n] > \"u\")\n this.isAttribute(n) && (s += \"\");\n else if (e[n] === null)\n this.isAttribute(n) ? s += \"\" : n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar;\n else if (e[n] instanceof Date)\n s += this.buildTextValNode(e[n], n, \"\", t);\n else if (typeof e[n] != \"object\") {\n const i = this.isAttribute(n);\n if (i)\n r += this.buildAttrPairStr(i, \"\" + e[n]);\n else if (n === this.options.textNodeName) {\n let d = this.options.tagValueProcessor(n, \"\" + e[n]);\n s += this.replaceEntitiesValue(d);\n } else\n s += this.buildTextValNode(e[n], n, \"\", t);\n } else if (Array.isArray(e[n])) {\n const i = e[n].length;\n let d = \"\";\n for (let u = 0; u < i; u++) {\n const o = e[n][u];\n typeof o > \"u\" || (o === null ? n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar : typeof o == \"object\" ? this.options.oneListGroup ? d += this.j2x(o, t + 1).val : d += this.processTextOrObjNode(o, n, t) : d += this.buildTextValNode(o, n, \"\", t));\n }\n this.options.oneListGroup && (d = this.buildObjectNode(d, n, \"\", t)), s += d;\n } else if (this.options.attributesGroupName && n === this.options.attributesGroupName) {\n const i = Object.keys(e[n]), d = i.length;\n for (let u = 0; u < d; u++)\n r += this.buildAttrPairStr(i[u], \"\" + e[n][i[u]]);\n } else\n s += this.processTextOrObjNode(e[n], n, t);\n return { attrStr: r, val: s };\n};\nb.prototype.buildAttrPairStr = function(e, t) {\n return t = this.options.attributeValueProcessor(e, \"\" + t), t = this.replaceEntitiesValue(t), this.options.suppressBooleanAttributes && t === \"true\" ? \" \" + e : \" \" + e + '=\"' + t + '\"';\n};\nfunction Lt(e, t, r) {\n const s = this.j2x(e, r + 1);\n return e[this.options.textNodeName] !== void 0 && Object.keys(e).length === 1 ? this.buildTextValNode(e[this.options.textNodeName], t, s.attrStr, r) : this.buildObjectNode(s.val, t, s.attrStr, r);\n}\nb.prototype.buildObjectNode = function(e, t, r, s) {\n if (e === \"\")\n return t[0] === \"?\" ? this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar : this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar;\n {\n let n = \"</\" + t + this.tagEndChar, i = \"\";\n return t[0] === \"?\" && (i = \"?\", n = \"\"), (r || r === \"\") && e.indexOf(\"<\") === -1 ? this.indentate(s) + \"<\" + t + r + i + \">\" + e + n : this.options.commentPropName !== !1 && t === this.options.commentPropName && i.length === 0 ? this.indentate(s) + `<!--${e}-->` + this.newLine : this.indentate(s) + \"<\" + t + r + i + this.tagEndChar + e + this.indentate(s) + n;\n }\n};\nb.prototype.closeTag = function(e) {\n let t = \"\";\n return this.options.unpairedTags.indexOf(e) !== -1 ? this.options.suppressUnpairedNode || (t = \"/\") : this.options.suppressEmptyNode ? t = \"/\" : t = `></${e}`, t;\n};\nb.prototype.buildTextValNode = function(e, t, r, s) {\n if (this.options.cdataPropName !== !1 && t === this.options.cdataPropName)\n return this.indentate(s) + `<![CDATA[${e}]]>` + this.newLine;\n if (this.options.commentPropName !== !1 && t === this.options.commentPropName)\n return this.indentate(s) + `<!--${e}-->` + this.newLine;\n if (t[0] === \"?\")\n return this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar;\n {\n let n = this.options.tagValueProcessor(t, e);\n return n = this.replaceEntitiesValue(n), n === \"\" ? this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar : this.indentate(s) + \"<\" + t + r + \">\" + n + \"</\" + t + this.tagEndChar;\n }\n};\nb.prototype.replaceEntitiesValue = function(e) {\n if (e && e.length > 0 && this.options.processEntities)\n for (let t = 0; t < this.options.entities.length; t++) {\n const r = this.options.entities[t];\n e = e.replace(r.regex, r.val);\n }\n return e;\n};\nfunction Rt(e) {\n return this.options.indentBy.repeat(e);\n}\nfunction St(e) {\n return e.startsWith(this.options.attributeNamePrefix) && e !== this.options.textNodeName ? e.substr(this.attrPrefixLen) : !1;\n}\nvar Mt = b;\nconst kt = S, Bt = At, qt = Mt;\nvar W = {\n XMLParser: Bt,\n XMLValidator: kt,\n XMLBuilder: qt\n};\nfunction Xt(e) {\n if (typeof e != \"string\")\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof e}\\``);\n if (e = e.trim(), e.length === 0 || W.XMLValidator.validate(e) !== !0)\n return !1;\n let t;\n const r = new W.XMLParser();\n try {\n t = r.parse(e);\n } catch {\n return !1;\n }\n return !(!t || !(\"svg\" in t));\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass cr {\n _view;\n constructor(t) {\n Ut(t), this._view = t;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(t) {\n this._view.icon = t;\n }\n get order() {\n return this._view.order;\n }\n set order(t) {\n this._view.order = t;\n }\n get params() {\n return this._view.params;\n }\n set params(t) {\n this._view.params = t;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(t) {\n this._view.expanded = t;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst Ut = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"View id is required and must be a string\");\n if (!e.name || typeof e.name != \"string\")\n throw new Error(\"View name is required and must be a string\");\n if (e.columns && e.columns.length > 0 && (!e.caption || typeof e.caption != \"string\"))\n throw new Error(\"View caption is required for top-level views and must be a string\");\n if (!e.getContents || typeof e.getContents != \"function\")\n throw new Error(\"View getContents is required and must be a function\");\n if (!e.icon || typeof e.icon != \"string\" || !Xt(e.icon))\n throw new Error(\"View icon is required and must be a valid svg string\");\n if (!(\"order\" in e) || typeof e.order != \"number\")\n throw new Error(\"View order is required and must be a number\");\n if (e.columns && e.columns.forEach((t) => {\n if (!(t instanceof Ie))\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }), e.emptyView && typeof e.emptyView != \"function\")\n throw new Error(\"View emptyView must be a function\");\n if (e.parent && typeof e.parent != \"string\")\n throw new Error(\"View parent must be a string\");\n if (\"sticky\" in e && typeof e.sticky != \"boolean\")\n throw new Error(\"View sticky must be a boolean\");\n if (\"expanded\" in e && typeof e.expanded != \"boolean\")\n throw new Error(\"View expanded must be a boolean\");\n if (e.defaultSortKey && typeof e.defaultSortKey != \"string\")\n throw new Error(\"View defaultSortKey must be a string\");\n return !0;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst hr = function(e) {\n return F().registerEntry(e);\n}, pr = function(e) {\n return F().unregisterEntry(e);\n}, gr = function(e) {\n return F().getEntries(e).sort((r, s) => r.order !== void 0 && s.order !== void 0 && r.order !== s.order ? r.order - s.order : r.displayName.localeCompare(s.displayName, void 0, { numeric: !0, sensitivity: \"base\" }));\n};\nexport {\n Ie as Column,\n Z as DefaultType,\n ye as File,\n Qt as FileAction,\n R as FileType,\n _e as Folder,\n tr as Header,\n Te as Navigation,\n D as Node,\n Q as NodeStatus,\n N as Permission,\n cr as View,\n hr as addNewFileMenuEntry,\n ur as davGetClient,\n sr as davGetDefaultPropfind,\n Ee as davGetFavoritesReport,\n or as davGetRecentSearch,\n be as davParsePermissions,\n te as davRemoteURL,\n ve as davResultToNode,\n ee as davRootPath,\n Y as defaultDavNamespaces,\n j as defaultDavProperties,\n Yt as formatFileSize,\n L as getDavNameSpaces,\n V as getDavProperties,\n dr as getFavoriteNodes,\n er as getFileActions,\n nr as getFileListHeaders,\n ar as getNavigation,\n gr as getNewFileMenuEntries,\n Jt as parseFileSize,\n ir as registerDavProperty,\n Dt as registerFileAction,\n rr as registerFileListHeaders,\n pr as removeNewFileMenuEntry\n};\n","// Current version.\nexport var VERSION = '1.13.6';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = (typeof self == 'object' && self.self === self && self) ||\n (typeof global == 'object' && global.global === global && global) ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || (type === 'object' && !!obj);\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\nexport var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\nfunction ie10IsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasStringTagBug ? ie10IsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key] === true; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = (isFunction(constructor) && constructor.prototype) || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\n// In order to prevent third-party code injection through\n// `_.templateSettings.variable`, we test it against the following regular\n// expression. It is intentionally a bit more liberal than just matching valid\n// identifiers, but still prevents possible loopholes through defaults or\n// destructuring assignment.\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n // Insure against third-party code injection. (CVE-2021-23358)\n if (!bareIdentifier.test(argument)) throw new Error(\n 'variable is not a bare identifier: ' + argument\n );\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || (computed === -Infinity && result === -Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || (typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null)) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || (computed === Infinity && result === Infinity)) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\nimport toArray from './toArray.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = toArray(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = (array && max(array, getLength).length) || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\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=\" + {\"1359\":\"d217768bf3f39a7359dd\",\"8618\":\"1e8f15db3b14455fef8f\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 1418;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\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(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t1418: 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 = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(52138)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","updatableNotification","getDefaultNotificationFunction","setDefault","callback","this","hide","$row","_","undefined","each","$","toastify","hideToast","console","error","call","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","length","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","PasswordConfirmation","requiresPasswordConfirmation","type","toUpperCase","url","generateOcsUrl","data","success","requirePasswordConfirmation","bind","appConfig","window","oc_appconfig","AppConfig","getValue","app","key","defaultValue","setValue","value","getApps","getKeys","deleteKey","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","Client","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","prototype","textStatus","errorThrown","context","_oc_config","rawUid","document","getElementsByTagName","getAttribute","displayName","currentUser","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","append","buttonlist","click","val","ocdialog","defaultButton","closeOnEscape","close","focus","filepicker","multiselect","arguments","mimetype","FilePickerType","Choose","path","legacyCallback","fn","getPath","node","root","startsWith","slice","nodes","map","builder","getFilePickerBuilder","forEach","button","addButton","setButtonFactory","_nodes$","_nodes$2","attributes","basename","target","push","multiSelect","file","CopyMove","Copy","icon","IconCopy","Move","IconMove","setMimeTypeFilter","filter","setFilter","_node$mtime","_node$attributes","_node$attributes2","_node$attributes3","_node$attributes4","_node$attributes5","fileid","mime","mtime","getTime","permissions","etag","hasPreview","mountType","quotaAvailableBytes","sharePermissions","nodeToLegacyFile","allowDirectories","allowDirectoryChooser","includes","setMultiSelect","startAt","build","pick","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","fail","_fileexistsshown","fileexists","original","replacement","controller","self","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","i","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","width","height","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","Util","humanFileSize","size","formatDate","lastModified","directory","urlSpec","x","y","c","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","e","blob","Blob","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","createElement","min","drawImage","toDataURL","resolve","readAsArrayBuffer","reject","getCroppedPreview","MimeType","getIconUrl","checkboxId","prop","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","remove","$primaryButton","closest","updatePrimaryButton","checkedCount","on","$checkbox","promise","defer","$messageTemplate","filePath","tmpl","jqXHR","$fileexistsTemplate","manageFromDocument","manageToken","global","emit","token","getToken","setToken","newToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","isAdmin","_oc_isadmin","load","loadTranslations","register","_unregister","unregister","translate","translatePlural","Handlebars","startSaving","selector","startAction","stop","finishedSaving","finishedAction","finishedSuccess","finishedError","delay","fadeOut","isPasswordConfirmationRequired","rejectCallback","confirmPassword","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","detach","theme","_theme","_handlers","_pushState","strParams","buildQueryString","history","pushState","location","pathname","navigator","userAgent","toLowerCase","parseInt","patterns","querySelectorAll","pattern","ii","style","fill","stroke","removeAttribute","setAttribute","replaceState","hash","_cancelPop","addOnPopStateHandler","handler","_parseHashQuery","pos","_decodeQuery","query","parseUrlQuery","parseQueryString","search","_onPopState","state","chunkify","tz","charAt","m","History","computerFileSize","string","s","trim","bytes","matches","match","parseFloat","isFinite","b","k","kb","mb","gb","g","tb","pb","p","timestamp","format","TESTING","debug","moment","relativeModifiedDate","diff","fromNow","getScrollBarWidth","_scrollBarWidth","inner","outer","position","top","left","visibility","overflow","appendChild","w1","offsetWidth","w2","clientWidth","removeChild","stripTime","date","Date","getFullYear","getMonth","getDate","naturalSortCompare","a","aa","bb","aNum","Number","bNum","localeCompare","getLanguage","waitFor","interval","internalCallback","setTimeout","isCookieSetToValue","cookies","cookie","_oc_debug","webroot","_oc_webroot","lastIndexOf","coreApps","menuSpeed","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","TAG_FAVORITE","fileIsBlacklisted","Config","blacklist_files_regex","appswebroots","config","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","_reloadCalled","_userIsNavigatingAway","timer","seconds","setInterval","clearInterval","reload","registerXHRForErrorProcessing","loadCallback","readyState","errorCallback","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","event","preventDefault","is","slideToggle","showMenu","unregisterMenu","off","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","queryString","components","part","decodeURIComponent","msg","Plugins","generateFilePath","generateUrl","get","namespaces","tail","set","getRootPath","getRootUrl","imagePath","redirect","targetURL","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","singleMatcher","RegExp","multiMatcher","decodeComponents","right","Array","concat","decode","tokens","splitOnFirst","separator","TypeError","separatorIndex","includeKeys","object","predicate","isArray","descriptor","getOwnPropertyDescriptor","enumerable","defineProperty","Reflect","ownKeys","isNullOrUndefined","strictUriEncode","replaceAll","charCodeAt","encodeFragmentIdentifier","Symbol","validateArrayFormatSeparator","encode","strict","encodedURI","replaceMap","exec","entries","keys","customDecodeURIComponent","keysSorter","sort","removeHash","hashStart","parseValue","parseNumbers","isNaN","parseBooleans","extract","queryStart","arrayFormat","arrayFormatSeparator","formatter","accumulator","isEncodedArray","newValue","item","test","arrayValue","flat","parserForArrayFormat","returnValue","parameter","parameter_","key2","value2","reduce","Boolean","shouldFilter","skipNull","skipEmptyString","index","keyValueSeparator","encoderForArrayFormat","objectCopy","parseUrl","url_","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","getHash","urlObjectForFragmentEncode","exclude","ArrowRight","NcButton","String","default","valueLoading","loading","required","invertedColors","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","_c","_self","$event","$emit","scopedSlots","_u","staticClass","proxy","_v","_s","LoginButton","NcPasswordField","NcTextField","NcNoteCard","username","redirectUrl","errors","messages","throttleDelay","autoCompleteAllowed","directLogin","emailStates","_Intl$DateTimeFormat","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","timezoneOffset","getTimezoneOffset","headline","productName","user","computed","isError","invalidPassword","userDisabled","errorLabel","apacheAuthFailed","csrfCheckFailed","internalException","loadingIcon","loginActionUrl","emailEnabled","every","loginText","mounted","$refs","inputField","methods","updateUsername","submit","ref","_e","_l","class","staticStyle","domProps","shake","emits","fillColor","_b","$attrs","NoValidCredentials","InformationIcon","LockOpenIcon","isHttps","isLocalhost","hasPublicKeyCredential","validCredentials","authenticate","loginForm","checkValidity","getAuthenticationData","publicKey","sign","completeAuthentication","catch","changeUsername","base64urlDecode","pad","atob","loginName","Axios","post","resp","startAuthentication","hasOwnProperty","challenge","Uint8Array","from","allowCredentials","arrayToBase64String","btoa","fromCharCode","credentials","rawId","authenticatorData","clientDataJSON","signature","userHandle","finishAuthentication","_ref","defaultRedirectUrl","resetPasswordLink","watch","axios","resetPasswordTarget","encrypted","proceed","encryption","directives","rawName","expression","composing","_i","$$a","$$el","$$c","checked","$$i","warning","clear","localStorage","sessionStorage","LoginForm","PasswordLessLoginForm","ResetPassword","UpdatePassword","loadState","passwordlessLogin","resetPassword","canResetPassword","resetPasswordUser","direct","hasPasswordless","countAlternativeLogins","alternativeLogins","PublicKeyCredential","hideLoginForm","passwordResetFinished","alternativeLogin","L10n","Vue","mixin","Nextcloud","extend","LoginView","$mount","exports","previousBackbone","VERSION","noConflict","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","iteratee","events","opts","names","_events","onApi","ctx","listening","_listeners","interop","listenTo","obj","_listenId","uniqueId","listeningTo","_listeningTo","Listening","tryCatchOn","handlers","offApi","stopListening","ids","isEmpty","remaining","_callback","cleanup","once","onceMap","listenToOnce","offer","args","triggerApi","objEvents","allEvents","all","triggerEvents","ev","l","a1","a2","a3","listener","unbind","Model","preinitialize","cid","cidPrefix","defaults","initialize","validationError","idAttribute","sync","escape","has","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","isEqual","prevId","_pending","hasChanged","changedAttributes","old","previous","previousAttributes","fetch","serverAttrs","wrapError","save","wait","validate","isNew","destroy","base","constructor","isValid","models","comparator","_reset","reset","setOptions","add","merge","addOptions","splice","array","at","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","isString","existing","_prepareModel","_addReference","orderChanged","some","_removeReference","previousModels","unshift","_byId","modelId","where","first","findWhere","isFunction","sortBy","pluck","callbackOpts","_forwardPristineError","values","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","ITERATOR_KEYSVALUES","_onModelEvent","$$iterator","iterator","kind","_collection","_kind","_index","next","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","render","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","delegate","eventName","undelegate","_createElement","className","_setAttributes","addUnderscoreMethods","Class","attribute","cb","defaultVal","addMethod","instance","isObject","modelMatcher","matcher","collect","foldl","inject","reduceRight","foldr","detect","select","any","include","contains","invoke","toArray","head","take","initial","rest","drop","last","without","difference","shuffle","chain","sample","partition","groupBy","countBy","indexBy","findIndex","findLastIndex","pairs","invert","omit","Base","mappings","functions","memo","dataType","contentType","_method","beforeSend","setRequestHeader","ajax","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","fragment","_extractParameters","execute","navigate","optional","param","checkUrl","routeStripper","rootStripper","pathStripper","started","atRoot","getSearch","matchRoot","decodeFragment","decodeURI","getFragment","_usePushState","_wantsHashChange","start","_trailingSlash","trailingSlash","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","_hasPushState","rootPath","display","tabIndex","iWindow","insertBefore","firstChild","contentWindow","open","attachEvent","_checkUrlInterval","loadUrl","removeEventListener","detachEvent","notfound","decodedFragment","_updateHash","protoProps","staticProps","child","__super__","_debug","factory","___CSS_LOADER_EXPORT___","module","_XML_CHAR_MAP","_escapeXml","ch","userName","namespace","property","parseClarkNotation","_renderPropSet","propName","propValue","mkcol","responseType","xhrProvider","onProgress","upload","send","Promise","fulfill","onreadystatechange","resultBody","parseMultiStatus","ontimeout","XMLHttpRequest","_parsePropNode","propNode","childNodes","subNodes","nodeType","textContent","xmlBody","doc","DOMParser","parseFromString","resolver","foo","responseIterator","evaluate","XPathResult","ANY_TYPE","responseNode","iterateNext","stringValue","propStatIterator","propStatNode","propIterator","namespaceURI","localName","baseParts","subString","scheme","propertyName","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","setApp","setUid","C","P","Yt","r","log","d","pow","toFixed","toLocaleString","N","NONE","CREATE","READ","UPDATE","DELETE","SHARE","ALL","Y","nc","oc","ocs","V","_nc_dav_properties","L","_nc_dav_namespaces","sr","or","R","Folder","File","J","X","crtime","owner","Q","NEW","FAILED","LOADING","LOCKED","D","_data","_attributes","_knownDavService","updateMtime","deleteProperty","Proxy","encodedSource","origin","extension","isDavRessource","move","rename","ye","super","ee","te","ur","setHeaders","requesttoken","u","dr","async","getDirectoryContents","details","includeSelf","filename","ve","be","lastmod","getcontentlength","O","isExist","isEmptyObject","f","isName","getAllMatches","startIndex","lastIndex","nameRegexp","re","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","buildOptions","defaultOptions","ne","ie","Nt","bt","Et","prettify","yt","vt","se","Pt","h","xt","oe","K","E","indentBy","suppressUnpairedNode","suppressEmptyNode","endsWith","suppressBooleanAttributes","entities","regex","Ft","Vt","oneListGroup","isAttribute","attrPrefixLen","St","processTextOrObjNode","Lt","indentate","Rt","tagEndChar","newLine","j2x","buildTextValNode","attrStr","buildObjectNode","repeat","arrayNodeName","buildAttrPairStr","replaceEntitiesValue","closeTag","Function","ArrayProto","ObjProto","SymbolProto","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","nativeKeys","nativeCreate","nativeIsView","isView","_isNaN","_isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","restArguments","func","isNull","isUndefined","isBoolean","isElement","tagTester","tag","nodelist","Int8Array","hasStringTagBug","isIE11","Map","isDataView","getInt8","isArrayBuffer","buffer","isArguments","isSymbol","isNumber","constant","createSizePropertyCheck","getSizeProperty","sizeProperty","shallowProperty","typedArrayPattern","collectNonEnumProps","emulatedSet","nonEnumIdx","proto","isMatch","_keys","_wrapped","toBufferView","bufferSource","byteOffset","valueOf","tagDataView","eq","aStack","bStack","deepEq","areArrays","aCtor","bCtor","allKeys","ie11fingerprint","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","setMethods","createAssigner","keysFunc","baseCreate","Ctor","extendOwn","tap","interceptor","toPath","deepGet","identity","optimizeCb","argCount","baseIteratee","Infinity","mapObject","currentKey","noop","propertyOf","times","accum","random","now","createEscaper","escaper","testRegexp","replaceRegexp","templateSettings","interpolate","noMatch","escapes","escapeChar","bareIdentifier","template","settings","oldSettings","offset","argument","variable","fallback","idCounter","prefix","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","placeholder","bound","callArgs","flatten","output","idx","len","memoize","hasher","cache","address","throttle","later","leading","throttled","_now","clearTimeout","debounce","immediate","passed","debounced","_args","wrap","wrapper","negate","compose","after","before","findKey","createPredicateIndexFinder","dir","sortedIndex","low","high","mid","createIndexFinder","predicateFind","createReduce","reducer","list","fromIndex","guard","contextPath","lastComputed","v","reStrSymbol","rand","temp","criteria","group","behavior","pass","keyInObj","compact","otherArrays","uniq","isSorted","seen","arrays","intersection","argsLength","unzip","range","step","chunk","chainResult","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","chunkIds","priority","notFulfilled","fulfilled","getter","__esModule","definition","chunkId","promises","globalThis","script","needAttach","scripts","charset","onScriptComplete","onerror","doneFns","parentNode","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","baseURI","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/settings-apps-view-4529.js b/dist/settings-apps-view-4529.js index a57dddd6b1c..77f65e9cd61 100644 --- a/dist/settings-apps-view-4529.js +++ b/dist/settings-apps-view-4529.js @@ -1,3 +1,3 @@ /*! For license information please see settings-apps-view-4529.js.LICENSE.txt */ -"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[4529],{92973:(t,e,a)=>{a.d(e,{l:()=>s});var n=a(53334);const s=Object.freeze({discover:(0,n.Tl)("settings","Discover"),installed:(0,n.Tl)("settings","Your apps"),enabled:(0,n.Tl)("settings","Active apps"),disabled:(0,n.Tl)("settings","Disabled apps"),updates:(0,n.Tl)("settings","Updates"),"app-bundles":(0,n.Tl)("settings","App bundles"),featured:(0,n.Tl)("settings","Featured apps"),supported:(0,n.Tl)("settings","Supported apps")})},45834:(e,a,n)=>{n.d(a,{A:()=>l});var s=n(85168),o=n(26287),r=n(99498),i=n(61338);const p=()=>o.A.get((0,r.KT)("core/navigation",2)+"/apps?format=json").then((t=>{let{data:e}=t;200===e.ocs.meta.statuscode&&((0,i.Ic)("nextcloud:app-menu.refresh",{apps:e.ocs.data}),window.dispatchEvent(new Event("resize")))})),l={computed:{appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},installing(){return this.$store.getters.loading("install")},isLoading(){return this.app&&this.$store.getters.loading(this.app.id)},enableButtonText(){return this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},forceEnableButtonText(){return this.app.needsDownload,t("settings","Allow untested app")},enableButtonTooltip(){return this.app.needsDownload?t("settings","The app will be downloaded from the App Store"):null},forceEnableButtonTooltip(){const e=t("settings","This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.");return this.app.needsDownload?e+" "+t("settings","The app will be downloaded from the App Store"):e}},data:()=>({groupCheckedAppsData:!1}),mounted(){this.app&&this.app.groups&&this.app.groups.length>0&&(this.groupCheckedAppsData=!0)},methods:{asyncFindGroup(t){return this.$store.dispatch("getGroups",{search:t,limit:5,offset:0})},isLimitedToGroups(t){return!(!this.app.groups.length&&!this.groupCheckedAppsData)},setGroupLimit(){this.groupCheckedAppsData||this.$store.dispatch("enableApp",{appId:this.app.id,groups:[]})},canLimitToGroups:t=>!(t.types&&t.types.includes("filesystem")||t.types.includes("prelogin")||t.types.includes("authentication")||t.types.includes("logging")||t.types.includes("prevent_group_restriction")),addGroupLimitation(t){const e=t.pop(),a=this.app.groups.concat([]).concat([e.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:a})},removeGroupLimitation(t){const e=this.app.groups.concat([]),a=e.indexOf(t.id);a>-1&&e.splice(a,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:e})},forceEnable(t){this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},enable(t){this.$store.dispatch("enableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},disable(t){this.$store.dispatch("disableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},remove(t){this.$store.dispatch("uninstallApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},install(t){this.$store.dispatch("enableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},update(t){this.$store.dispatch("updateApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))}}}},86438:(t,e,a)=>{a.d(e,{A:()=>s});var n=a(9165);const s=Object.freeze({discover:n.tZc,installed:n.Gbn,enabled:n.Tfj,disabled:n.hyP,bundles:n.nSK,supported:n.Yk,featured:n.ZL5,updates:n.XCd,auth:n.EYN,customization:n.CZ3,dashboard:n.edW,files:n.fEr,games:n.FeJ,integration:n.bur,monitoring:n.y48,multimedia:n.WI,office:n.Ku3,organization:n.TO3,search:n.U4M,security:n.JiW,social:n.Krx,tools:n.QKT,workflow:n.Dgm})},846:(t,e,a)=>{a.d(e,{T:()=>u});var n=a(85168),s=a(38613),o=a(53334),r=a(99498),i=a(65899),p=a(26287),l=a(36620),c=a(86438);const d=()=>(0,n.Qg)((0,o.Tl)("settings","An error occurred during the request. Unable to proceed.")),u=(0,i.nY)("settings-apps",{state:()=>({apps:[],categories:[],updateCount:(0,s.C)("settings","appstoreUpdateCount",0),loading:{apps:!1,categories:!1},loadingList:!1,gettingCategoriesPromise:null}),actions:{async loadCategories(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.categories.length>0)||t)try{this.loading.categories=!0;const{data:t}=await p.A.get((0,r.Jv)("settings/apps/categories"));for(const a of t){var e;a.icon=null!==(e=c.A[a.id])&&void 0!==e?e:""}this.$patch({categories:t})}catch(t){l.A.error(t),d()}finally{this.loading.categories=!1}},async loadApps(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.apps.length>0)||t)try{this.loading.apps=!0;const{data:t}=await p.A.get((0,r.Jv)("settings/apps/list"));this.$patch({apps:t.apps})}catch(t){l.A.error(t),d()}finally{this.loading.apps=!1}},getCategoryById(t){var e;return null!==(e=this.categories.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null},getAppById(t){var e;return null!==(e=this.apps.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null}}})},87090:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,".app-bundle-heading[data-v-24d746cb]{display:flex;align-items:center;margin:20px 10px 20px 0}.app-bundle-header[data-v-24d746cb]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}.apps-store-view[data-v-24d746cb]{display:flex;flex-wrap:wrap}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList.vue"],names:[],mappings:"AACA,qCACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAED,oCACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAED,kCACC,YAAA,CACA,cAAA",sourcesContent:["\n.app-bundle-heading {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin: 20px 10px 20px 0;\n}\n.app-bundle-header {\n\tmargin: 0 10px 0 50px;\n\tfont-weight: bold;\n\tfont-size: 20px;\n\tline-height: 30px;\n\tcolor: var(--color-text-light);\n}\n.apps-store-view {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n}\n"],sourceRoot:""}]);const i=r},70158:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,'.app-icon[data-v-73d4f990]{filter:var(--background-invert-if-bright)}.app-image img[data-v-73d4f990]{width:100%}.app-name--link[data-v-73d4f990]::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppItem.vue"],names:[],mappings:"AACA,2BACC,yCAAA,CAGD,gCACC,UAAA,CAGD,wCACE,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA",sourcesContent:["\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image img {\n\twidth: 100%;\n}\n\n.app-name--link::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n"],sourceRoot:""}]);const i=r},30993:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,".app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue"],names:[],mappings:"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA",sourcesContent:["\n.app-level-badge {\n\tcolor: var(--color-text-maxcontrast);\n\tbackground-color: transparent;\n\tborder: 1px solid var(--color-text-maxcontrast);\n\tborder-radius: var(--border-radius);\n\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: 6px;\n\tpadding: 3px 6px;\n\twidth: fit-content;\n\n\t&--supported {\n\t\tborder-color: var(--color-success);\n\t\tcolor: var(--color-success);\n\t}\n}\n"],sourceRoot:""}]);const i=r},84260:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,".app-discover[data-v-262838ca]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue"],names:[],mappings:"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA",sourcesContent:["\n.app-discover {\n\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\n\tmargin-inline: auto;\n\tpadding-inline: 54px;\n\t/* Padding required to make last element not bound to the bottom */\n\tpadding-block-end: var(--default-clickable-area, 44px);\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-clickable-area, 44px);\n}\n"],sourceRoot:""}]);const i=r},10321:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,".app-description[data-v-fccce5ae]{padding:12px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue"],names:[],mappings:"AACA,kCACC,YAAA",sourcesContent:["\n.app-description {\n\tpadding: 12px;\n}\n"],sourceRoot:""}]);const i=r},52341:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,'.app-details[data-v-59b4cf6b]{padding:20px}.app-details__actions-manage[data-v-59b4cf6b]{display:flex}.app-details__actions-manage input[data-v-59b4cf6b]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-59b4cf6b]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-59b4cf6b]{margin-top:15px}.app-details__section h4[data-v-59b4cf6b]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-59b4cf6b]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-59b4cf6b]{text-decoration:underline}.app-details__documentation li[data-v-59b4cf6b]{padding-inline-start:20px}.app-details__documentation li[data-v-59b4cf6b]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:"";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-59b4cf6b]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-59b4cf6b]:hover,.force[data-v-59b4cf6b]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue"],names:[],mappings:"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA",sourcesContent:['\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: "";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n'],sourceRoot:""}]);const i=r},38739:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,".app-sidebar-tabs__release h2[data-v-9da99928]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-9da99928] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-9da99928] h4{font-size:17px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue"],names:[],mappings:"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA",sourcesContent:["\n.app-sidebar-tabs__release {\n\th2 {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t\tfont-size: 24px;\n\t}\n\n\t&-text {\n\t\t// Overwrite changelog heading styles\n\t\t:deep(h3) {\n\t\t\tfont-size: 20px;\n\t\t}\n\t\t:deep(h4) {\n\t\t\tfont-size: 17px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const i=r},3323:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,".settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}","",{version:3,sources:["webpack://./apps/settings/src/components/Markdown.vue"],names:[],mappings:"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA",sourcesContent:["\n.settings-markdown::v-deep {\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: 600;\n\tline-height: 120%;\n\tmargin-top: 24px;\n\tmargin-bottom: 12px;\n\tcolor: var(--color-main-text);\n}\n\nh1 {\n\tfont-size: 36px;\n\tmargin-top: 48px;\n}\n\nh2 {\n\tfont-size: 28px;\n\tmargin-top: 48px;\n}\n\nh3 {\n\tfont-size: 24px;\n}\n\nh4 {\n\tfont-size: 21px;\n}\n\nh5 {\n\tfont-size: 17px;\n}\n\nh6 {\n\tfont-size: var(--default-font-size);\n}\n\npre {\n\twhite-space: pre;\n\toverflow-x: auto;\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: 1em 1.3em;\n\tmargin-bottom: 1em;\n}\n\np code {\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: .1em .3em;\n}\n\nli {\n\tposition: relative;\n}\n\nul, ol {\n\tpadding-left: 10px;\n\tmargin-left: 10px;\n}\n\nul li {\n\tlist-style-type: disc;\n}\n\nul > li > ul > li {\n\tlist-style-type: circle;\n}\n\nul > li > ul > li ul li {\n\tlist-style-type: square;\n}\n\nblockquote {\n\tpadding-left: 1em;\n\tborder-left: 4px solid var(--color-primary-element);\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n}\n"],sourceRoot:""}]);const i=r},2380:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,".app-sidebar--with-screenshot[data-v-ec35f1f8] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-ec35f1f8]{width:100%;height:100%}.app-sidebar__badges[data-v-ec35f1f8]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-ec35f1f8]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreSidebar.vue"],names:[],mappings:"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA",sourcesContent:["\n.app-sidebar {\n\t// If a screenshot is available it should cover the whole figure\n\t&--with-screenshot {\n\t\t:deep(.app-sidebar-header__figure) {\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__fallback-icon {\n\t\t// both 100% to center the icon\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&__badges {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tgap: 12px;\n\t}\n\n\t&__version {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]);const i=r},20922:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,"\n.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppScore.vue"],names:[],mappings:";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<span role="img"\n\t\t:aria-label="title"\n\t\t:title="title"\n\t\tclass="app-score__wrapper">\n\t\t<NcIconSvgWrapper v-for="index in fullStars"\n\t\t\t:key="`full-star-${index}`"\n\t\t\t:path="mdiStar"\n\t\t\tinline />\n\t\t<NcIconSvgWrapper v-if="hasHalfStar" :path="mdiStarHalfFull" inline />\n\t\t<NcIconSvgWrapper v-for="index in emptyStars"\n\t\t\t:key="`empty-star-${index}`"\n\t\t\t:path="mdiStarOutline"\n\t\t\tinline />\n\t</span>\n</template>\n<script lang="ts">\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from \'@mdi/js\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { defineComponent } from \'vue\'\n\nexport default defineComponent({\n\tname: \'AppScore\',\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t},\n\tprops: {\n\t\tscore: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\tmdiStar,\n\t\t\tmdiStarHalfFull,\n\t\t\tmdiStarOutline,\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\tconst appScore = (this.score * 5).toFixed(1)\n\t\t\treturn t(\'settings\', \'Community rating: {score}/5\', { score: appScore })\n\t\t},\n\t\tfullStars() {\n\t\t\treturn Math.floor(this.score * 5 + 0.25)\n\t\t},\n\t\temptyStars() {\n\t\t\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\n\t\t},\n\t\thasHalfStar() {\n\t\t\treturn (this.fullStars + this.emptyStars) < 5\n\t\t},\n\t},\n})\n<\/script>\n<style scoped>\n.app-score__wrapper {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n\n\t> * {\n\t\tvertical-align: text-bottom;\n\t}\n}\n</style>\n'],sourceRoot:""}]);const i=r},34707:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,"\n.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStore.vue"],names:[],mappings:";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA",sourcesContent:["\x3c!--\n\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n\t-\n\t- @author Julius Härtl <jus@bitgrid.net>\n\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n\t--\x3e\n\n<template>\n\t\x3c!-- Apps list --\x3e\n\t<NcAppContent class=\"app-settings-content\"\n\t\t:page-heading=\"appStoreLabel\">\n\t\t<h2 class=\"app-settings-content__label\" v-text=\"viewLabel\" />\n\n\t\t<AppStoreDiscoverSection v-if=\"currentCategory === 'discover'\" />\n\t\t<NcEmptyContent v-else-if=\"isLoading\"\n\t\t\tclass=\"empty-content__loading\"\n\t\t\t:name=\"t('settings', 'Loading app list')\">\n\t\t\t<template #icon>\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t\t<AppList v-else :category=\"currentCategory\" />\n\t</NcAppContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { translate as t } from '@nextcloud/l10n'\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\nimport { useRoute } from 'vue-router/composables'\n\nimport { useAppsStore } from '../store/apps-store'\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\n\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport AppList from '../components/AppList.vue'\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\n\nconst route = useRoute()\nconst store = useAppsStore()\n\n/**\n * ID of the current active category, default is `discover`\n */\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\n\nconst appStoreLabel = t('settings', 'App Store')\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\n\nwatchEffect(() => {\n\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\n})\n\n// TODO this part should be migrated to pinia\nconst instance = getCurrentInstance()\n/** Is the app list loading */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\nonBeforeMount(() => {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getAllApps')\n})\n<\/script>\n\n<style scoped>\n.empty-content__loading {\n\theight: 100%;\n}\n\n.app-settings-content__label {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n</style>\n"],sourceRoot:""}]);const i=r},47391:(t,e,a)=>{a.d(e,{A:()=>i});var n=a(71354),s=a.n(n),o=a(76314),r=a.n(o)()(s());r.push([t.id,"\n/* The categories-loading indicator */\n.categories--loading[data-v-54d629ed] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreNavigation.vue"],names:[],mappings:";AAwIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA",sourcesContent:['<template>\n\t\x3c!-- Categories & filters --\x3e\n\t<NcAppNavigation :aria-label="t(\'settings\', \'Apps\')">\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem id="app-category-discover"\n\t\t\t\t:to="{ name: \'apps\' }"\n\t\t\t\t:exact="true"\n\t\t\t\t:name="APPS_SECTION_ENUM.discover">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.discover" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-installed"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'installed\'} }"\n\t\t\t\t:exact="true"\n\t\t\t\t:name="APPS_SECTION_ENUM.installed">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.installed" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-enabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'enabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.enabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.enabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-disabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'disabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.disabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.disabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem v-if="updateCount > 0"\n\t\t\t\tid="app-category-updates"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'updates\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.updates">\n\t\t\t\t<template #counter>\n\t\t\t\t\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\n\t\t\t\t</template>\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.updates" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-your-bundles"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'app-bundles\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM[\'app-bundles\']">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.bundles" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\n\t\t\t<NcAppNavigationSpacer />\n\n\t\t\t\x3c!-- App store categories --\x3e\n\t\t\t<li v-if="appstoreEnabled && categoriesLoading" class="categories--loading">\n\t\t\t\t<NcLoadingIcon :size="20" :aria-label="t(\'settings\', \'Loading categories\')" />\n\t\t\t</li>\n\t\t\t<template v-else-if="appstoreEnabled && !categoriesLoading">\n\t\t\t\t<NcAppNavigationItem v-if="isSubscribed"\n\t\t\t\t\tid="app-category-supported"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'supported\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.supported">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.supported" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t\t<NcAppNavigationItem id="app-category-featured"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'featured\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.featured">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.featured" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t<NcAppNavigationItem v-for="category in categories"\n\t\t\t\t\t:id="`app-category-${category.id}`"\n\t\t\t\t\t:key="category.id"\n\t\t\t\t\t:name="category.displayName"\n\t\t\t\t\t:to="{\n\t\t\t\t\t\tname: \'apps-category\',\n\t\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t\t}">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="category.icon" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</template>\n\n\t\t\t<NcAppNavigationItem id="app-developer-docs"\n\t\t\t\t:name="t(\'settings\', \'Developer documentation ↗\')"\n\t\t\t\t:href="developerDocsUrl" />\n\t\t</template>\n\t</NcAppNavigation>\n</template>\n\n<script setup lang="ts">\nimport { loadState } from \'@nextcloud/initial-state\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { computed, onBeforeMount } from \'vue\'\nimport { APPS_SECTION_ENUM } from \'../constants/AppsConstants\'\nimport { useAppsStore } from \'../store/apps-store\'\n\nimport NcAppNavigation from \'@nextcloud/vue/dist/Components/NcAppNavigation.js\'\nimport NcAppNavigationItem from \'@nextcloud/vue/dist/Components/NcAppNavigationItem.js\'\nimport NcAppNavigationSpacer from \'@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js\'\nimport NcCounterBubble from \'@nextcloud/vue/dist/Components/NcCounterBubble.js\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport NcLoadingIcon from \'@nextcloud/vue/dist/Components/NcLoadingIcon.js\'\n\nimport APPSTORE_CATEGORY_ICONS from \'../constants/AppstoreCategoryIcons.ts\'\n\nconst updateCount = loadState<number>(\'settings\', \'appstoreUpdateCount\', 0)\nconst appstoreEnabled = loadState<boolean>(\'settings\', \'appstoreEnabled\', true)\nconst developerDocsUrl = loadState<string>(\'settings\', \'appstoreDeveloperDocs\', \'\')\n\nconst store = useAppsStore()\nconst categories = computed(() => store.categories)\nconst categoriesLoading = computed(() => store.loading.categories)\n\n/**\n * Check if the current instance has a support subscription from the Nextcloud GmbH\n *\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n */\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\n\n// load categories when component is mounted\nonBeforeMount(() => {\n\tstore.loadCategories()\n\tstore.loadApps()\n})\n<\/script>\n\n<style scoped>\n/* The categories-loading indicator */\n.categories--loading {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n</style>\n'],sourceRoot:""}]);const i=r},63358:(t,e,a)=>{a.d(e,{A:()=>y});var n=a(85471),s=a(6695),o=a(9165),r=a(53334);const i=(0,n.pM)({__name:"AppLevelBadge",props:{level:null},setup(t){const e=t,a=(0,n.EW)((()=>300===e.level)),i=(0,n.EW)((()=>200===e.level)),p=(0,n.EW)((()=>a.value?o.Yk:o.Tfj)),l=(0,n.EW)((()=>a.value?(0,r.Tl)("settings","Supported"):(0,r.Tl)("settings","Featured"))),c=(0,n.EW)((()=>a.value?(0,r.Tl)("settings","This app is supported via your current Nextcloud subscription."):(0,r.Tl)("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use.")));return{__sfc:!0,props:e,isSupported:a,isFeatured:i,badgeIcon:p,badgeText:l,badgeTitle:c,NcIconSvgWrapper:s.A}}});var p=a(85072),l=a.n(p),c=a(97825),d=a.n(c),u=a(77659),A=a.n(u),g=a(55056),v=a.n(g),m=a(10540),h=a.n(m),C=a(41113),f=a.n(C),b=a(30993),_={};_.styleTagTransform=f(),_.setAttributes=v(),_.insert=A().bind(null,"head"),_.domAPI=d(),_.insertStyleElement=h(),l()(b.A,_),b.A&&b.A.locals&&b.A.locals;const y=(0,a(14486).A)(i,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.isSupported||a.isFeatured?e("span",{staticClass:"app-level-badge",class:{"app-level-badge--supported":a.isSupported},attrs:{title:a.badgeTitle}},[e(a.NcIconSvgWrapper,{attrs:{path:a.badgeIcon,size:20,inline:""}}),t._v("\n\t"+t._s(a.badgeText)+"\n")],1):t._e()}),[],!1,null,"3590dbeb",null).exports},15769:(t,e,a)=>{a.d(e,{A:()=>_});var n=a(6695),s=a(9165),o=a(53334);const r=(0,a(85471).pM)({name:"AppScore",components:{NcIconSvgWrapper:n.A},props:{score:{type:Number,required:!0}},setup:()=>({mdiStar:s.ZL5,mdiStarHalfFull:s.tdF,mdiStarOutline:s.dF}),computed:{title(){const t=(5*this.score).toFixed(1);return(0,o.Tl)("settings","Community rating: {score}/5",{score:t})},fullStars(){return Math.floor(5*this.score+.25)},emptyStars(){return Math.min(Math.floor(5*(1-this.score)+.25),5-this.fullStars)},hasHalfStar(){return this.fullStars+this.emptyStars<5}}});var i=a(85072),p=a.n(i),l=a(97825),c=a.n(l),d=a(77659),u=a.n(d),A=a(55056),g=a.n(A),v=a(10540),m=a.n(v),h=a(41113),C=a.n(h),f=a(20922),b={};b.styleTagTransform=C(),b.setAttributes=g(),b.insert=u().bind(null,"head"),b.domAPI=c(),b.insertStyleElement=m(),p()(f.A,b),f.A&&f.A.locals&&f.A.locals;const _=(0,a(14486).A)(r,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("span",{staticClass:"app-score__wrapper",attrs:{role:"img","aria-label":t.title,title:t.title}},[t._l(t.fullStars,(function(a){return e("NcIconSvgWrapper",{key:"full-star-".concat(a),attrs:{path:t.mdiStar,inline:""}})})),t._v(" "),t.hasHalfStar?e("NcIconSvgWrapper",{attrs:{path:t.mdiStarHalfFull,inline:""}}):t._e(),t._v(" "),t._l(t.emptyStars,(function(a){return e("NcIconSvgWrapper",{key:"empty-star-".concat(a),attrs:{path:t.mdiStarOutline,inline:""}})}))],2)}),[],!1,null,"7d015114",null).exports},42986:(e,a,n)=>{n.r(a),n.d(a,{default:()=>nt});var s=n(85471),o=n(53334),r=n(24387),i=n(846),p=n(92973),l=n(18195),c=n(10833),d=n(46222),u=n(61338),A=n(15769),g=n(63358),v=n(45834);const m={name:"SvgFilterMixin",data:()=>({filterId:""}),computed:{filterUrl(){return"url(#".concat(this.filterId,")")}},mounted(){this.filterId="invertIconApps-"+Math.random().toString(36).substring(2)}};var h=n(14486);const C=(0,h.A)(m,void 0,void 0,!1,null,null,null).exports;var f=n(9518);const b={name:"AppItem",components:{AppLevelBadge:g.A,AppScore:A.A,NcButton:f.A},mixins:[v.A,C],props:{app:{type:Object,required:!0},category:{},listView:{type:Boolean,default:!0},useBundleView:{type:Boolean,default:!1},headers:{type:String,default:null}},data:()=>({isSelected:!1,scrolled:!1,screenshotLoaded:!1}),computed:{hasRating(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},dataItemTag(){return this.listView?"td":"div"}},watch:{"$route.params.id"(t){this.isSelected=this.app.id===t}},mounted(){if(this.isSelected=this.app.id===this.$route.params.id,this.app.releases&&this.app.screenshot){const t=new Image;t.onload=()=>{this.screenshotLoaded=!0},t.src=this.app.screenshot}},watchers:{},methods:{prefix:(t,e)=>t+"_"+e,getDataItemHeaders(t){return this.useBundleView?[this.headers,t].join(" "):null}}};var _=n(85072),y=n.n(_),x=n(97825),S=n.n(x),N=n(77659),w=n.n(N),I=n(55056),T=n.n(I),k=n(10540),E=n.n(k),B=n(41113),P=n.n(B),D=n(70158),L={};L.styleTagTransform=P(),L.setAttributes=T(),L.insert=w().bind(null,"head"),L.domAPI=S(),L.insertStyleElement=E(),y()(D.A,L),D.A&&D.A.locals&&D.A.locals;const O=(0,h.A)(b,(function(){var t=this,e=t._self._c;return e(t.listView?"tr":"li",{tag:"component",staticClass:"section",class:{selected:t.isSelected}},[e(t.dataItemTag,{tag:"component",staticClass:"app-image app-image-icon",attrs:{headers:t.getDataItemHeaders("app-table-col-icon")}},[t.listView&&!t.app.preview||!t.listView&&!t.screenshotLoaded?e("div",{staticClass:"icon-settings-dark"}):t.listView&&t.app.preview?e("svg",{attrs:{width:"32",height:"32",viewBox:"0 0 32 32"}},[e("image",{staticClass:"app-icon",attrs:{x:"0",y:"0",width:"32",height:"32",preserveAspectRatio:"xMinYMin meet","xlink:href":t.app.preview}})]):t._e(),t._v(" "),!t.listView&&t.app.screenshot&&t.screenshotLoaded?e("img",{attrs:{src:t.app.screenshot,alt:""}}):t._e()]),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-name",attrs:{headers:t.getDataItemHeaders("app-table-col-name")}},[e("router-link",{staticClass:"app-name--link",attrs:{to:{name:"apps-details",params:{category:t.category,id:t.app.id}},"aria-label":t.t("settings","Show details for {appName} app",{appName:t.app.name})}},[t._v("\n\t\t\t"+t._s(t.app.name)+"\n\t\t")])],1),t._v(" "),t.listView?t._e():e(t.dataItemTag,{tag:"component",staticClass:"app-summary",attrs:{headers:t.getDataItemHeaders("app-version")}},[t._v("\n\t\t"+t._s(t.app.summary)+"\n\t")]),t._v(" "),t.listView?e(t.dataItemTag,{tag:"component",staticClass:"app-version",attrs:{headers:t.getDataItemHeaders("app-table-col-version")}},[t.app.version?e("span",[t._v(t._s(t.app.version))]):t.app.appstoreData.releases[0].version?e("span",[t._v(t._s(t.app.appstoreData.releases[0].version))]):t._e()]):t._e(),t._v(" "),e(t.dataItemTag,{tag:"component",attrs:{headers:t.getDataItemHeaders("app-table-col-level")}},[e("AppLevelBadge",{attrs:{level:t.app.level}}),t._v(" "),t.hasRating&&!t.listView?e("AppScore",{attrs:{score:t.app.score}}):t._e()],1),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"actions",attrs:{headers:t.getDataItemHeaders("app-table-col-actions")}},[t.app.error?e("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.app.error)+"\n\t\t")]):t._e(),t._v(" "),t.isLoading?e("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?e("NcButton",{attrs:{type:"primary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.update(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Update to {update}",{update:t.app.update}))+"\n\t\t")]):t._e(),t._v(" "),t.app.canUnInstall?e("NcButton",{staticClass:"uninstall",attrs:{type:"tertiary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.remove(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active?e("NcButton",{attrs:{disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.disable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Disable"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active?t._e():e("NcButton",{attrs:{title:t.forceEnableButtonTooltip,"aria-label":t.forceEnableButtonTooltip,type:"secondary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.forceEnable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.forceEnableButtonText)+"\n\t\t")]):e("NcButton",{attrs:{title:t.enableButtonTooltip,"aria-label":t.enableButtonTooltip,type:"primary",disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.enable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.enableButtonText)+"\n\t\t")])],1)],1)}),[],!1,null,"73d4f990",null).exports;var R=n(98959);function W(t){if(!Number.isInteger(t)&&t!==Number.POSITIVE_INFINITY||!(t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");const e=new R.A;let a=0;const n=async(t,n,s)=>{a++;const o=(async()=>t(...s))();n(o);try{await o}catch{}a--,e.size>0&&e.dequeue()()},s=function(s){for(var o=arguments.length,r=new Array(o>1?o-1:0),i=1;i<o;i++)r[i-1]=arguments[i];return new Promise((o=>{((s,o,r)=>{e.enqueue(n.bind(void 0,s,o,r)),(async()=>{await Promise.resolve(),a<t&&e.size>0&&e.dequeue()()})()})(s,o,r)}))};return Object.defineProperties(s,{activeCount:{get:()=>a},pendingCount:{get:()=>e.size},clearQueue:{value:()=>{e.clear()}}}),s}var G=n(96763);const U={name:"AppList",components:{AppItem:O,NcButton:f.A},props:{category:{type:String,required:!0}},data:()=>({search:""}),computed:{counter(){return this.apps.filter((t=>t.update)).length},loading(){return this.$store.getters.loading("list")},hasPendingUpdate(){return this.apps.filter((t=>t.update)).length>0},showUpdateAll(){return this.hasPendingUpdate&&this.useListView},apps(){const t=this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase()))).sort((function(t,e){const a=""+(t.active?0:1)+(t.update?0:1)+t.name,n=""+(e.active?0:1)+(e.update?0:1)+e.name;return OC.Util.naturalSortCompare(a,n)}));return"installed"===this.category?t.filter((t=>t.installed)):"enabled"===this.category?t.filter((t=>t.active&&t.installed)):"disabled"===this.category?t.filter((t=>!t.active&&t.installed)):"app-bundles"===this.category?t.filter((t=>t.bundles)):"updates"===this.category?t.filter((t=>t.update)):"supported"===this.category?t.filter((t=>300===t.level)):"featured"===this.category?t.filter((t=>200===t.level)):t.filter((t=>t.appstore&&void 0!==t.category&&(t.category===this.category||t.category.indexOf(this.category)>-1)))},bundles(){return this.$store.getters.getAppBundles.filter((t=>this.bundleApps(t.id).length>0))},bundleApps:()=>function(t){return this.$store.getters.getAllApps.filter((e=>void 0!==e.bundleIds&&e.bundleIds.includes(t)))},searchApps(){return""===this.search?[]:this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase())&&!this.apps.find((e=>e.id===t.id))))},useAppStoreView(){return!this.useListView&&!this.useBundleView},useListView(){return"installed"===this.category||"enabled"===this.category||"disabled"===this.category||"updates"===this.category||"featured"===this.category||"supported"===this.category},useBundleView(){return"app-bundles"===this.category},allBundlesEnabled(){return t=>0===this.bundleApps(t).filter((t=>!t.active)).length},bundleToggleText(){return e=>this.allBundlesEnabled(e)?t("settings","Disable all"):t("settings","Download and enable all")}},beforeDestroy(){(0,u.al)("nextcloud:unified-search.search",this.setSearch),(0,u.al)("nextcloud:unified-search.reset",this.resetSearch)},mounted(){(0,u.B1)("nextcloud:unified-search.search",this.setSearch),(0,u.B1)("nextcloud:unified-search.reset",this.resetSearch)},methods:{setSearch(t){let{query:e}=t;this.search=e},resetSearch(){this.search=""},toggleBundle(t){return this.allBundlesEnabled(t)?this.disableBundle(t):this.enableBundle(t)},enableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("enableApp",{appId:e,groups:[]}).catch((t=>{G.error(t),OC.Notification.show(t)}))},disableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("disableApp",{appId:e,groups:[]}).catch((t=>{OC.Notification.show(t)}))},updateAll(){const t=W(1);this.apps.filter((t=>t.update)).map((e=>t((()=>this.$store.dispatch("updateApp",{appId:e.id})))))}}};var M=n(87090),z={};z.styleTagTransform=P(),z.setAttributes=T(),z.insert=w().bind(null,"head"),z.domAPI=S(),z.insertStyleElement=E(),y()(M.A,z),M.A&&M.A.locals&&M.A.locals;const F=(0,h.A)(U,(function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app-content-inner"}},[e("div",{staticClass:"apps-list",class:{installed:t.useBundleView||t.useListView,store:t.useAppStoreView},attrs:{id:"apps-list"}},[t.useListView?[t.showUpdateAll?e("div",{staticClass:"toolbar"},[t._v("\n\t\t\t\t"+t._s(t.n("settings","%n app has an update available","%n apps have an update available",t.counter))+"\n\t\t\t\t"),t.showUpdateAll?e("NcButton",{attrs:{id:"app-list-update-all",type:"primary"},on:{click:t.updateAll}},[t._v("\n\t\t\t\t\t"+t._s(t.n("settings","Update","Update all",t.counter))+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.showUpdateAll?t._e():e("div",{staticClass:"toolbar"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","All apps are up-to-date."))+"\n\t\t\t")]),t._v(" "),e("transition-group",{staticClass:"apps-list-container",attrs:{name:"app-list",tag:"table"}},[e("tr",{key:"app-list-view-header",staticClass:"apps-header"},[e("th",{staticClass:"app-image"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",{staticClass:"app-name"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",{staticClass:"app-version"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",{staticClass:"app-level"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",{staticClass:"actions"},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))],2)]:t._e(),t._v(" "),t.useBundleView?e("table",{staticClass:"apps-list-container"},[e("tr",{key:"app-list-view-header",staticClass:"apps-header"},[e("th",{staticClass:"app-image",attrs:{id:"app-table-col-icon"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",{staticClass:"app-name",attrs:{id:"app-table-col-name"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",{staticClass:"app-version",attrs:{id:"app-table-col-version"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",{staticClass:"app-level",attrs:{id:"app-table-col-level"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",{staticClass:"actions",attrs:{id:"app-table-col-actions"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.bundles,(function(a){return[e("tr",{key:a.id},[e("th",{attrs:{id:"app-table-rowgroup-".concat(a.id),colspan:"5",scope:"rowgroup"}},[e("div",{staticClass:"app-bundle-heading"},[e("span",{staticClass:"app-bundle-header"},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(a.name)+"\n\t\t\t\t\t\t\t")]),t._v(" "),e("NcButton",{attrs:{type:"secondary"},on:{click:function(e){return t.toggleBundle(a.id)}}},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("settings",t.bundleToggleText(a.id)))+"\n\t\t\t\t\t\t\t")])],1)])]),t._v(" "),t._l(t.bundleApps(a.id),(function(n){return e("AppItem",{key:a.id+n.id,attrs:{"use-bundle-view":!0,headers:"app-table-rowgroup-".concat(a.id),app:n,category:t.category}})}))]}))],2):t._e(),t._v(" "),t.useAppStoreView?e("ul",{staticClass:"apps-store-view"},t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category,"list-view":!1}})})),1):t._e()],2),t._v(" "),e("div",{staticClass:"apps-list installed",attrs:{id:"apps-list-search"}},[e("div",{staticClass:"apps-list-container"},[""!==t.search&&t.searchApps.length>0?[e("div",{staticClass:"section"},[e("div"),t._v(" "),e("td",{attrs:{colspan:"5"}},[e("h2",[t._v(t._s(t.t("settings","Results from other categories")))])])]),t._v(" "),t._l(t.searchApps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))]:t._e()],2)]),t._v(" "),""===t.search||t.loading||0!==t.searchApps.length||0!==t.apps.length?t._e():e("div",{staticClass:"emptycontent emptycontent-search",attrs:{id:"apps-list-empty"}},[e("div",{staticClass:"icon-settings-dark",attrs:{id:"app-list-empty-icon"}}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No apps found for your version")))])]),t._v(" "),e("div",{attrs:{id:"searchresults"}})])}),[],!1,null,"24d746cb",null).exports;var Y=n(9165),$=n(85168),V=n(99498),q=n(26287),H=n(6695),j=n(36620);const Q=t=>{var e;const a={...t};if(a.date&&(a.date=Date.parse(a.date)),a.expiryDate&&(a.expiryDate=Date.parse(a.expiryDate)),"post"===a.type)return a;if("showcase"===a.type)return a;if("carousel"===a.type)return a;throw new Error("Invalid argument, app discover element with type ".concat(null!==(e=t.type)&&void 0!==e?e:"unknown"," is unknown"))},K=(0,s.pM)({__name:"AppStoreDiscoverSection",setup(t){const e=(0,s.$V)((()=>n.e(8753).then(n.bind(n,8753)))),a=(0,s.$V)((()=>n.e(8484).then(n.bind(n,38484)))),r=(0,s.KR)(!1),i=(0,s.KR)([]),p=t=>{for(let e=t.length-1;e>0;e--){const a=Math.floor(Math.random()*(e+1));[t[e],t[a]]=[t[a],t[e]]}return t};return(0,s.KC)((async()=>{try{const{data:t}=await q.A.get((0,V.Jv)("/settings/api/apps/discover")),e=t.map(Q);i.value=p(e)}catch(t){r.value=!0,j.A.error(t),(0,$.Qg)((0,o.Tl)("settings","Could not load app discover section"))}})),{__sfc:!0,PostType:e,CarouselType:a,hasError:r,elements:i,shuffleArray:p,getComponent:t=>"post"===t?e:"carousel"===t?a:(0,s.pM)({mounted:()=>j.A.error("Unknown component requested ",t),render:t=>t("div",(0,o.Tl)("settings","Could not render element"))}),mdiEyeOff:Y.Bk0,t:o.Tl,NcEmptyContent:c.A,NcIconSvgWrapper:H.A,NcLoadingIcon:d.A}}});var J=n(84260),Z={};Z.styleTagTransform=P(),Z.setAttributes=T(),Z.insert=w().bind(null,"head"),Z.domAPI=S(),Z.insertStyleElement=E(),y()(J.A,Z),J.A&&J.A.locals&&J.A.locals;const X=(0,h.A)(K,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e("div",{staticClass:"app-discover"},[a.hasError?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Nothing to show"),description:a.t("settings","Could not load section content from app store.")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiEyeOff,size:64}})]},proxy:!0}],null,!1,638098482)}):0===a.elements.length?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Loading"),description:a.t("settings","Fetching the latest news…")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):t._l(a.elements,(function(n,s){var o;return e(a.getComponent(n.type),t._b({key:null!==(o=n.id)&&void 0!==o?o:s,tag:"component"},"component",n,!1))}))],2)}),[],!1,null,"262838ca",null).exports,tt=(0,s.pM)({__name:"AppStore",setup(t){const e=(0,r.lq)(),a=(0,i.T)(),n=(0,s.EW)((()=>{var t,a;return null!==(t=null===(a=e.params)||void 0===a?void 0:a.category)&&void 0!==t?t:"discover"})),u=(0,o.Tl)("settings","App Store"),A=(0,s.EW)((()=>{var t,e,s;return null!==(t=null!==(e=p.l[n.value])&&void 0!==e?e:null===(s=a.getCategoryById(n.value))||void 0===s?void 0:s.displayName)&&void 0!==t?t:u}));(0,s.nT)((()=>{window.document.title="".concat(A.value," - ").concat(u," - Nextcloud")}));const g=(0,s.nI)(),v=(0,s.EW)((()=>(null==g?void 0:g.proxy).$store.getters.loading("list")));return(0,s.KC)((()=>{(null==g?void 0:g.proxy).$store.dispatch("getCategories",{shouldRefetchCategories:!0}),(null==g?void 0:g.proxy).$store.dispatch("getAllApps")})),{__sfc:!0,route:e,store:a,currentCategory:n,appStoreLabel:u,viewLabel:A,instance:g,isLoading:v,t:o.Tl,NcAppContent:l.A,NcEmptyContent:c.A,NcLoadingIcon:d.A,AppList:F,AppStoreDiscoverSection:X}}});var et=n(34707),at={};at.styleTagTransform=P(),at.setAttributes=T(),at.insert=w().bind(null,"head"),at.domAPI=S(),at.insertStyleElement=E(),y()(et.A,at),et.A&&et.A.locals&&et.A.locals;const nt=(0,h.A)(tt,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppContent,{staticClass:"app-settings-content",attrs:{"page-heading":a.appStoreLabel}},[e("h2",{staticClass:"app-settings-content__label",domProps:{textContent:t._s(a.viewLabel)}}),t._v(" "),"discover"===a.currentCategory?e(a.AppStoreDiscoverSection):a.isLoading?e(a.NcEmptyContent,{staticClass:"empty-content__loading",attrs:{name:a.t("settings","Loading app list")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):e(a.AppList,{attrs:{category:a.currentCategory}})],1)}),[],!1,null,"a75d4530",null).exports},68409:(t,e,a)=>{a.r(e),a.d(e,{default:()=>E});var n=a(85471),s=a(38613),o=a(53334),r=a(92973),i=a(846),p=a(42530),l=a(52439),c=a(14645),d=a(70563),u=a(6695),A=a(46222),g=a(86438);const v=(0,n.pM)({__name:"AppStoreNavigation",setup(t){const e=(0,s.C)("settings","appstoreUpdateCount",0),a=(0,s.C)("settings","appstoreEnabled",!0),v=(0,s.C)("settings","appstoreDeveloperDocs",""),m=(0,i.T)(),h=(0,n.EW)((()=>m.categories)),C=(0,n.EW)((()=>m.loading.categories)),f=(0,n.EW)((()=>void 0!==m.apps.find((t=>{let{level:e}=t;return 300===e}))));return(0,n.KC)((()=>{m.loadCategories(),m.loadApps()})),{__sfc:!0,updateCount:e,appstoreEnabled:a,developerDocsUrl:v,store:m,categories:h,categoriesLoading:C,isSubscribed:f,t:o.Tl,APPS_SECTION_ENUM:r.l,NcAppNavigation:p.A,NcAppNavigationItem:l.A,NcAppNavigationSpacer:c.A,NcCounterBubble:d.A,NcIconSvgWrapper:u.A,NcLoadingIcon:A.A,APPSTORE_CATEGORY_ICONS:g.A}}});var m=a(85072),h=a.n(m),C=a(97825),f=a.n(C),b=a(77659),_=a.n(b),y=a(55056),x=a.n(y),S=a(10540),N=a.n(S),w=a(41113),I=a.n(w),T=a(47391),k={};k.styleTagTransform=I(),k.setAttributes=x(),k.insert=_().bind(null,"head"),k.domAPI=f(),k.insertStyleElement=N(),h()(T.A,k),T.A&&T.A.locals&&T.A.locals;const E=(0,a(14486).A)(v,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppNavigation,{attrs:{"aria-label":a.t("settings","Apps")},scopedSlots:t._u([{key:"list",fn:function(){return[e(a.NcAppNavigationItem,{attrs:{id:"app-category-discover",to:{name:"apps"},exact:!0,name:a.APPS_SECTION_ENUM.discover},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-installed",to:{name:"apps-category",params:{category:"installed"}},exact:!0,name:a.APPS_SECTION_ENUM.installed},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-enabled",to:{name:"apps-category",params:{category:"enabled"}},name:a.APPS_SECTION_ENUM.enabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-disabled",to:{name:"apps-category",params:{category:"disabled"}},name:a.APPS_SECTION_ENUM.disabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:!0}])}),t._v(" "),a.updateCount>0?e(a.NcAppNavigationItem,{attrs:{id:"app-category-updates",to:{name:"apps-category",params:{category:"updates"}},name:a.APPS_SECTION_ENUM.updates},scopedSlots:t._u([{key:"counter",fn:function(){return[e(a.NcCounterBubble,[t._v(t._s(a.updateCount))])]},proxy:!0},{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:!0}],null,!1,2824895104)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-your-bundles",to:{name:"apps-category",params:{category:"app-bundles"}},name:a.APPS_SECTION_ENUM["app-bundles"]},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationSpacer),t._v(" "),a.appstoreEnabled&&a.categoriesLoading?e("li",{staticClass:"categories--loading"},[e(a.NcLoadingIcon,{attrs:{size:20,"aria-label":a.t("settings","Loading categories")}})],1):a.appstoreEnabled&&!a.categoriesLoading?[a.isSubscribed?e(a.NcAppNavigationItem,{attrs:{id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"}},name:a.APPS_SECTION_ENUM.supported},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:!0}],null,!1,613663011)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"}},name:a.APPS_SECTION_ENUM.featured},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:!0}])}),t._v(" "),t._l(a.categories,(function(n){return e(a.NcAppNavigationItem,{key:n.id,attrs:{id:"app-category-".concat(n.id),name:n.displayName,to:{name:"apps-category",params:{category:n.id}}},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:n.icon}})]},proxy:!0}],null,!0)})}))]:t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-developer-docs",name:a.t("settings","Developer documentation ↗"),href:a.developerDocsUrl}})]},proxy:!0}])})}),[],!1,null,"54d629ed",null).exports},20615:(e,a,n)=>{n.r(a),n.d(a,{default:()=>at});var s=n(85471),o=n(53334),r=n(24387),i=n(846),p=n(62182),l=n(6695),c=n(15769),d=n(9165),u=n(18503),A=n(60023),g=n(42838),v=n.n(g);const m={name:"Markdown",props:{text:{type:String,default:""},minHeading:{type:Number,default:1}},computed:{renderMarkdown(){const t=new A.xI.Renderer;return t.link=function(t,e,a){let n;try{n=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0!==n.indexOf("http:")&&0!==n.indexOf("https:"))return"";let s='<a href="'+t+'" rel="noreferrer noopener"';return e&&(s+=' title="'+e+'"'),s+=">"+a+"</a>",s},t.heading=(t,e)=>(e=Math.min(6,e+(this.minHeading-1)),"<h".concat(e,">").concat(t,"</h").concat(e,">")),t.image=function(t,e,a){return a||e},t.blockquote=function(t){return t},v().sanitize((0,A.xI)(this.text.trim(),{renderer:t,gfm:!1,highlight:!1,tables:!1,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1}),{SAFE_FOR_JQUERY:!0,ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})}}};var h=n(85072),C=n.n(h),f=n(97825),b=n.n(f),_=n(77659),y=n.n(_),x=n(55056),S=n.n(x),N=n(10540),w=n.n(N),I=n(41113),T=n.n(I),k=n(3323),E={};E.styleTagTransform=T(),E.setAttributes=S(),E.insert=y().bind(null,"head"),E.domAPI=b(),E.insertStyleElement=w(),C()(k.A,E),k.A&&k.A.locals&&k.A.locals;var B=n(14486);const P=(0,B.A)(m,(function(){var t=this;return(0,t._self._c)("div",{staticClass:"settings-markdown",domProps:{innerHTML:t._s(t.renderMarkdown)}})}),[],!1,null,"7c5c8e59",null).exports,D=(0,s.pM)({__name:"AppDescriptionTab",props:{app:null},setup:t=>({__sfc:!0,mdiTextShort:d.azb,t:o.Tl,NcAppSidebarTab:u.A,NcIconSvgWrapper:l.A,Markdown:P})});var L=n(10321),O={};O.styleTagTransform=T(),O.setAttributes=S(),O.insert=y().bind(null,"head"),O.domAPI=b(),O.insertStyleElement=w(),C()(L.A,O),L.A&&L.A.locals&&L.A.locals;const R=(0,B.A)(D,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppSidebarTab,{attrs:{id:"desc",name:a.t("settings","Description"),order:0},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiTextShort}})]},proxy:!0}])},[t._v(" "),e("div",{staticClass:"app-description"},[e(a.Markdown,{attrs:{text:t.app.description,"min-heading":4}})],1)])}),[],!1,null,"fccce5ae",null).exports;var W=n(9518),G=n(4604),U=n(67607),M=n(45834),z=n(96763);const F={name:"AppDetailsTab",components:{NcAppSidebarTab:u.A,NcButton:W.A,NcDateTime:G.A,NcIconSvgWrapper:l.A,NcSelect:U.A},mixins:[M.A],props:{app:{type:Object,required:!0}},setup:()=>({store:(0,i.T)(),mdiBug:d.xhV,mdiFeatureSearch:d.NZe,mdiStar:d.ZL5,mdiTextBox:d.n1r,mdiTooltipQuestion:d.iNF}),data:()=>({groupCheckedAppsData:!1}),computed:{lastModified(){var t,e,a;return null!==(t=(null!==(e=null===(a=this.app.appstoreData)||void 0===a?void 0:a.releases)&&void 0!==e?e:[]).map((t=>{let{lastModified:e}=t;return Date.parse(e)})).sort().at(0))&&void 0!==t?t:null},appAuthors(){if(z.warn(this.app),!this.app)return"";const t=t=>t["@value"]?t["@value"]:t;return(Array.isArray(this.app.author)?this.app.author.map(t):[t(this.app.author)]).sort(((t,e)=>t.split(" ").at(-1).localeCompare(e.split(" ").at(-1)))).join(", ")},appstoreUrl(){return"https://apps.nextcloud.com/apps/".concat(this.app.id)},externalResources(){const e=[];return this.app.internal||e.push({id:"appstore",href:this.appstoreUrl,label:t("settings","View in store")}),this.app.website&&e.push({id:"website",href:this.app.website,label:t("settings","Visit website")}),this.app.documentation&&(this.app.documentation.user&&e.push({id:"doc-user",href:this.app.documentation.user,label:t("settings","Usage documentation")}),this.app.documentation.admin&&e.push({id:"doc-admin",href:this.app.documentation.admin,label:t("settings","Admin documentation")}),this.app.documentation.developer&&e.push({id:"doc-developer",href:this.app.documentation.developer,label:t("settings","Developer documentation")})),e},appCategories(){return[this.app.category].flat().map((t=>{var e,a;return null!==(e=null===(a=this.store.getCategoryById(t))||void 0===a?void 0:a.displayName)&&void 0!==e?e:t})).join(", ")},rateAppUrl(){return"".concat(this.appstoreUrl,"#comments")},appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},groups(){return this.$store.getters.getGroups.filter((t=>"disabled"!==t.id)).sort(((t,e)=>t.name.localeCompare(e.name)))}},mounted(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0)}};var Y=n(52341),$={};$.styleTagTransform=T(),$.setAttributes=S(),$.insert=y().bind(null,"head"),$.domAPI=b(),$.insertStyleElement=w(),C()(Y.A,$),Y.A&&Y.A.locals&&Y.A.locals;const V=(0,B.A)(F,(function(){var t,e,a,n=this,s=n._self._c;return s("NcAppSidebarTab",{attrs:{id:"details",name:n.t("settings","Details"),order:1},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTextBox}})]},proxy:!0}])},[n._v(" "),s("div",{staticClass:"app-details"},[s("div",{staticClass:"app-details__actions"},[n.app.active&&n.canLimitToGroups(n.app)?s("div",{staticClass:"app-details__actions-groups"},[s("input",{directives:[{name:"model",rawName:"v-model",value:n.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{id:"groups_enable_".concat(n.app.id),type:"checkbox"},domProps:{value:n.app.id,checked:Array.isArray(n.groupCheckedAppsData)?n._i(n.groupCheckedAppsData,n.app.id)>-1:n.groupCheckedAppsData},on:{change:[function(t){var e=n.groupCheckedAppsData,a=t.target,s=!!a.checked;if(Array.isArray(e)){var o=n.app.id,r=n._i(e,o);a.checked?r<0&&(n.groupCheckedAppsData=e.concat([o])):r>-1&&(n.groupCheckedAppsData=e.slice(0,r).concat(e.slice(r+1)))}else n.groupCheckedAppsData=s},n.setGroupLimit]}}),n._v(" "),s("label",{attrs:{for:"groups_enable_".concat(n.app.id)}},[n._v(n._s(n.t("settings","Limit to groups")))]),n._v(" "),s("input",{staticClass:"group_select",attrs:{type:"hidden",title:n.t("settings","All"),value:""}}),n._v(" "),s("br"),n._v(" "),s("label",{attrs:{for:"limitToGroups"}},[s("span",[n._v(n._s(n.t("settings","Limit app usage to groups")))])]),n._v(" "),n.isLimitedToGroups(n.app)?s("NcSelect",{attrs:{"input-id":"limitToGroups",options:n.groups,value:n.appGroups,limit:5,label:"name",multiple:!0,"close-on-select":!1},on:{"option:selected":n.addGroupLimitation,"option:deselected":n.removeGroupLimitation,search:n.asyncFindGroup}},[s("span",{attrs:{slot:"noResult"},slot:"noResult"},[n._v(n._s(n.t("settings","No results")))])]):n._e()],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__actions-manage"},[n.app.update?s("input",{staticClass:"update primary",attrs:{type:"button",value:n.t("settings","Update to {version}",{version:n.app.update}),disabled:n.installing||n.isLoading},on:{click:function(t){return n.update(n.app.id)}}}):n._e(),n._v(" "),n.app.canUnInstall?s("input",{staticClass:"uninstall",attrs:{type:"button",value:n.t("settings","Remove"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.remove(n.app.id)}}}):n._e(),n._v(" "),n.app.active?s("input",{staticClass:"enable",attrs:{type:"button",value:n.t("settings","Disable"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.disable(n.app.id)}}}):n._e(),n._v(" "),n.app.active||!n.app.canInstall&&!n.app.isCompatible?n.app.active||n.app.canInstall?n._e():s("input",{staticClass:"enable force",attrs:{title:n.forceEnableButtonTooltip,"aria-label":n.forceEnableButtonTooltip,type:"button",value:n.forceEnableButtonText,disabled:n.installing||n.isLoading},on:{click:function(t){return n.forceEnable(n.app.id)}}}):s("input",{staticClass:"enable primary",attrs:{title:n.enableButtonTooltip,"aria-label":n.enableButtonTooltip,type:"button",value:n.enableButtonText,disabled:!n.app.canInstall||n.installing||n.isLoading},on:{click:function(t){return n.enable(n.app.id)}}})])]),n._v(" "),s("ul",{staticClass:"app-details__dependencies"},[n.app.missingMinOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no minimum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.missingMaxOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no maximum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.canInstall?n._e():s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t\t"),s("ul",{staticClass:"missing-dependencies"},n._l(n.app.missingDependencies,(function(t,e){return s("li",{key:e},[n._v("\n\t\t\t\t\t\t"+n._s(t)+"\n\t\t\t\t\t")])})),0)])]),n._v(" "),n.lastModified?s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Latest updated"))+"\n\t\t\t")]),n._v(" "),s("NcDateTime",{attrs:{timestamp:n.lastModified}})],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Author"))+"\n\t\t\t")]),n._v(" "),s("p",{staticClass:"app-details__authors"},[n._v("\n\t\t\t\t"+n._s(n.appAuthors)+"\n\t\t\t")])]),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Categories"))+"\n\t\t\t")]),n._v(" "),s("p",[n._v("\n\t\t\t\t"+n._s(n.appCategories)+"\n\t\t\t")])]),n._v(" "),n.externalResources.length>0?s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Resources")))]),n._v(" "),s("ul",{staticClass:"app-details__documentation",attrs:{"aria-label":n.t("settings","Documentation")}},n._l(n.externalResources,(function(t){return s("li",{key:t.id},[s("a",{staticClass:"appslink",attrs:{href:t.href,target:"_blank",rel:"noreferrer noopener"}},[n._v("\n\t\t\t\t\t\t"+n._s(t.label)+" ↗\n\t\t\t\t\t")])])})),0)]):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Interact")))]),n._v(" "),s("div",{staticClass:"app-details__interact"},[s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(t=n.app.bugs)&&void 0!==t?t:"#","aria-label":n.t("settings","Report a bug"),title:n.t("settings","Report a bug")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiBug}})]},proxy:!0}])}),n._v(" "),s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(e=n.app.bugs)&&void 0!==e?e:"#","aria-label":n.t("settings","Request feature"),title:n.t("settings","Request feature")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiFeatureSearch}})]},proxy:!0}])}),n._v(" "),null!==(a=n.app.appstoreData)&&void 0!==a&&a.discussion?s("NcButton",{attrs:{href:n.app.appstoreData.discussion,"aria-label":n.t("settings","Ask questions or discuss"),title:n.t("settings","Ask questions or discuss")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTooltipQuestion}})]},proxy:!0}],null,!1,1288192462)}):n._e(),n._v(" "),n.app.internal?n._e():s("NcButton",{attrs:{href:n.rateAppUrl,"aria-label":n.t("settings","Rate the app"),title:n.t("settings","Rate")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiStar}})]},proxy:!0}],null,!1,422450625)})],1)])])])}),[],!1,null,"59b4cf6b",null).exports,q=(0,s.pM)({__name:"AppReleasesTab",props:{app:null},setup(t){const e=t,a=(0,s.EW)((()=>{var t,a;return Object.values(null!==(t=null===(a=e.app.releases[0])||void 0===a?void 0:a.translations)&&void 0!==t?t:{}).some((t=>{let{changelog:e}=t;return!!e}))}));return{__sfc:!0,props:e,hasChangelog:a,createChangelogFromRelease:t=>{var e,a,n,s;return null!==(e=null!==(a=null===(n=t.translations)||void 0===n||null===(n=n[(0,o.Z0)()])||void 0===n?void 0:n.changelog)&&void 0!==a?a:null===(s=t.translations)||void 0===s||null===(s=s.en)||void 0===s?void 0:s.changelog)&&void 0!==e?e:""},mdiClockFast:d.NWU,t:o.Tl,NcAppSidebarTab:u.A,NcIconSvgWrapper:l.A,Markdown:P}}});var H=n(38739),j={};j.styleTagTransform=T(),j.setAttributes=S(),j.insert=y().bind(null,"head"),j.domAPI=b(),j.insertStyleElement=w(),C()(H.A,j),H.A&&H.A.locals&&H.A.locals;const Q=(0,B.A)(q,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.hasChangelog?e(a.NcAppSidebarTab,{attrs:{id:"changelog",name:a.t("settings","Changelog"),order:2},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiClockFast,size:24}})]},proxy:!0}],null,!1,1849836872)},[t._v(" "),t._l(t.app.releases,(function(n){return e("div",{key:n.version,staticClass:"app-sidebar-tabs__release"},[e("h2",[t._v(t._s(n.version))]),t._v(" "),e(a.Markdown,{staticClass:"app-sidebar-tabs__release-text",attrs:{text:a.createChangelogFromRelease(n)}})],1)}))],2):t._e()}),[],!1,null,"9da99928",null).exports;var K=n(63358),J=n(86438),Z=n(36620);const X=(0,s.pM)({__name:"AppStoreSidebar",setup(t){const e=(0,r.lq)(),a=(0,r.rd)(),n=(0,i.T)(),u=(0,s.EW)((()=>{var t;return null!==(t=e.params.id)&&void 0!==t?t:""})),A=(0,s.EW)((()=>n.getAppById(u.value))),g=(0,s.EW)((()=>{var t;return(null===(t=A.value.appstoreData)||void 0===t?void 0:t.ratingNumOverall)>5})),v=(0,s.EW)((()=>{var t,e,a;return(null===(t=A.value.appstoreData)||void 0===t?void 0:t.ratingNumRecent)>5?A.value.appstoreData.ratingRecent:null!==(e=null===(a=A.value.appstoreData)||void 0===a?void 0:a.ratingOverall)&&void 0!==e?e:.5})),m=(0,s.EW)((()=>A.value)),{appIcon:h}=function(t){const e=(0,s.KR)(null),a=(0,s.EW)((()=>{var e,a,n;const s=null!==(e=[null!==(a=null===(n=t.value)||void 0===n?void 0:n.category)&&void 0!==a?a:[]].flat().map((t=>J.A[t])).filter((t=>!!t)).at(0))&&void 0!==e?e:d.CZ3;return s?'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="'.concat(s,'" /></svg>'):null}));return(0,s.nT)((async()=>{var n;if(null!==(n=t.value)&&void 0!==n&&n.preview){e.value=null;try{const a=await window.fetch(t.value.preview),n=await a.blob(),s=await n.text();e.value=s.replaceAll(/fill="#(fff|ffffff)([a-z0-9]{1,2})?"/gi,'fill="currentColor"')}catch(t){e.value=a.value,Z.A.error("Could not load app icon",{error:t})}}else e.value=a.value})),{appIcon:e}}(A),C=(0,s.EW)((()=>A.value?(0,o.Tl)("settings","Version {version}, {license}-licensed",{version:A.value.version,license:A.value.licence.toString().toUpperCase()}):"")),f=(0,s.KR)("details");(0,s.wB)([A],(()=>{f.value="details"}));const b=(0,s.KR)(!1),_=(0,s.EW)((()=>{var t;return(null===(t=A.value)||void 0===t?void 0:t.screenshot)&&b.value})),y=()=>{var t,e;if(null!==(t=A.value)&&void 0!==t&&t.releases&&null!==(e=A.value)&&void 0!==e&&e.screenshot){const t=new Image;t.onload=()=>{b.value=!0},t.src=A.value.screenshot}};return(0,s.wB)([A],y),(0,s.sV)(y),{__sfc:!0,route:e,router:a,store:n,appId:u,app:A,hasRating:g,rating:v,showSidebar:m,appIcon:h,licenseText:C,activeTab:f,hideAppDetails:()=>{a.push({name:"apps-category",params:{category:e.params.category}})},screenshotLoaded:b,hasScreenshot:_,loadScreenshot:y,NcAppSidebar:p.N,NcIconSvgWrapper:l.A,AppScore:c.A,AppDescriptionTab:R,AppDetailsTab:V,AppReleasesTab:Q,AppLevelBadge:K.A}}});var tt=n(2380),et={};et.styleTagTransform=T(),et.setAttributes=S(),et.insert=y().bind(null,"head"),et.domAPI=b(),et.insertStyleElement=w(),C()(tt.A,et),tt.A&&tt.A.locals&&tt.A.locals;const at=(0,B.A)(X,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.showSidebar?e(a.NcAppSidebar,{staticClass:"app-sidebar",class:{"app-sidebar--with-screenshot":a.hasScreenshot},attrs:{active:a.activeTab,background:a.hasScreenshot?a.app.screenshot:void 0,compact:!a.hasScreenshot,name:a.app.name,title:a.app.name,subname:a.licenseText,subtitle:a.licenseText},on:{"update:active":function(t){a.activeTab=t},close:a.hideAppDetails},scopedSlots:t._u([a.hasScreenshot?null:{key:"header",fn:function(){var t;return[e(a.NcIconSvgWrapper,{staticClass:"app-sidebar__fallback-icon",attrs:{svg:null!==(t=a.appIcon)&&void 0!==t?t:"",size:64}})]},proxy:!0},{key:"description",fn:function(){return[e("div",{staticClass:"app-sidebar__badges"},[e(a.AppLevelBadge,{attrs:{level:a.app.level}}),t._v(" "),a.hasRating?e(a.AppScore,{attrs:{score:a.rating}}):t._e()],1)]},proxy:!0}],null,!0)},[t._v(" "),t._v(" "),e(a.AppDescriptionTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppDetailsTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppReleasesTab,{attrs:{app:a.app}})],1):t._e()}),[],!1,null,"ec35f1f8",null).exports}}]); -//# sourceMappingURL=settings-apps-view-4529.js.map?v=bb61b58e95ee6934e7d9
\ No newline at end of file +"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[4529],{92973:(t,e,a)=>{a.d(e,{l:()=>s});var n=a(53334);const s=Object.freeze({discover:(0,n.Tl)("settings","Discover"),installed:(0,n.Tl)("settings","Your apps"),enabled:(0,n.Tl)("settings","Active apps"),disabled:(0,n.Tl)("settings","Disabled apps"),updates:(0,n.Tl)("settings","Updates"),"app-bundles":(0,n.Tl)("settings","App bundles"),featured:(0,n.Tl)("settings","Featured apps"),supported:(0,n.Tl)("settings","Supported apps")})},45834:(e,a,n)=>{n.d(a,{A:()=>l});var s=n(85168),i=n(26287),o=n(99498),r=n(61338);const p=()=>i.A.get((0,o.KT)("core/navigation",2)+"/apps?format=json").then((t=>{let{data:e}=t;200===e.ocs.meta.statuscode&&((0,r.Ic)("nextcloud:app-menu.refresh",{apps:e.ocs.data}),window.dispatchEvent(new Event("resize")))})),l={computed:{appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},installing(){return this.$store.getters.loading("install")},isLoading(){return this.app&&this.$store.getters.loading(this.app.id)},enableButtonText(){return this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},forceEnableButtonText(){return this.app.needsDownload,t("settings","Allow untested app")},enableButtonTooltip(){return this.app.needsDownload?t("settings","The app will be downloaded from the App Store"):null},forceEnableButtonTooltip(){const e=t("settings","This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.");return this.app.needsDownload?e+" "+t("settings","The app will be downloaded from the App Store"):e}},data:()=>({groupCheckedAppsData:!1}),mounted(){this.app&&this.app.groups&&this.app.groups.length>0&&(this.groupCheckedAppsData=!0)},methods:{asyncFindGroup(t){return this.$store.dispatch("getGroups",{search:t,limit:5,offset:0})},isLimitedToGroups(t){return!(!this.app.groups.length&&!this.groupCheckedAppsData)},setGroupLimit(){this.groupCheckedAppsData||this.$store.dispatch("enableApp",{appId:this.app.id,groups:[]})},canLimitToGroups:t=>!(t.types&&t.types.includes("filesystem")||t.types.includes("prelogin")||t.types.includes("authentication")||t.types.includes("logging")||t.types.includes("prevent_group_restriction")),addGroupLimitation(t){const e=t.pop(),a=this.app.groups.concat([]).concat([e.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:a})},removeGroupLimitation(t){const e=this.app.groups.concat([]),a=e.indexOf(t.id);a>-1&&e.splice(a,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:e})},forceEnable(t){this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},enable(t){this.$store.dispatch("enableApp",{appId:t,groups:[]}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},disable(t){this.$store.dispatch("disableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},remove(t){this.$store.dispatch("uninstallApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},install(t){this.$store.dispatch("enableApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))},update(t){this.$store.dispatch("updateApp",{appId:t}).then((t=>{p()})).catch((t=>{(0,s.Qg)(t)}))}}}},86438:(t,e,a)=>{a.d(e,{A:()=>s});var n=a(9165);const s=Object.freeze({discover:n.tZc,installed:n.Gbn,enabled:n.Tfj,disabled:n.hyP,bundles:n.nSK,supported:n.Yk,featured:n.ZL5,updates:n.XCd,auth:n.EYN,customization:n.CZ3,dashboard:n.edW,files:n.fEr,games:n.FeJ,integration:n.bur,monitoring:n.y48,multimedia:n.WI,office:n.Ku3,organization:n.TO3,search:n.U4M,security:n.JiW,social:n.Krx,tools:n.QKT,workflow:n.Dgm})},846:(t,e,a)=>{a.d(e,{T:()=>A});var n=a(85168),s=a(38613),i=a(53334),o=a(99498),r=a(65899),p=a(26287),l=a(36620),c=a(86438);const d=()=>(0,n.Qg)((0,i.Tl)("settings","An error occurred during the request. Unable to proceed.")),A=(0,r.nY)("settings-apps",{state:()=>({apps:[],categories:[],updateCount:(0,s.C)("settings","appstoreUpdateCount",0),loading:{apps:!1,categories:!1},loadingList:!1,gettingCategoriesPromise:null}),actions:{async loadCategories(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.categories.length>0)||t)try{this.loading.categories=!0;const{data:t}=await p.A.get((0,o.Jv)("settings/apps/categories"));for(const a of t){var e;a.icon=null!==(e=c.A[a.id])&&void 0!==e?e:""}this.$patch({categories:t})}catch(t){l.A.error(t),d()}finally{this.loading.categories=!1}},async loadApps(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!(this.apps.length>0)||t)try{this.loading.apps=!0;const{data:t}=await p.A.get((0,o.Jv)("settings/apps/list"));this.$patch({apps:t.apps})}catch(t){l.A.error(t),d()}finally{this.loading.apps=!1}},getCategoryById(t){var e;return null!==(e=this.categories.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null},getAppById(t){var e;return null!==(e=this.apps.find((e=>{let{id:a}=e;return a===t})))&&void 0!==e?e:null}}})},94025:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".apps-list[data-v-73184220]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-73184220]{transition:transform 1s}.apps-list #app-list-update-all[data-v-73184220]{margin-left:10px}.apps-list__toolbar[data-v-73184220]{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list--list-view[data-v-73184220]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-73184220]{width:100%}.apps-list__store-container[data-v-73184220]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-73184220]{display:flex;align-items:center;margin:20px 10px 20px 0}.apps-list__bundle-header[data-v-73184220]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}#apps-list-search .app-item h2[data-v-73184220]{margin-bottom:0}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList.vue"],names:[],mappings:"AAIA,4BACC,YAAA,CACA,cAAA,CACA,wBAAA,CAGA,kCACC,uBAAA,CAGD,iDACC,gBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,iBApBe,CAqBf,UAAA,CACA,6CAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,YAAA,CACA,kBAAA,CAGD,uCACC,mBAAA,CAEA,iBAAA,CAGD,4CACC,UAAA,CAGD,6CACC,YAAA,CACA,cAAA,CAGD,4CACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAGD,2CACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAMA,gDACC,eAAA",sourcesContent:["\n$toolbar-padding: 8px;\n$toolbar-height: 44px + $toolbar-padding * 2;\n\n.apps-list {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-content: flex-start;\n\n\t// For transition group\n\t&--move {\n\t\ttransition: transform 1s;\n\t}\n\n\t#app-list-update-all {\n\t\tmargin-left: 10px;\n\t}\n\n\t&__toolbar {\n\t\theight: $toolbar-height;\n\t\tpadding: $toolbar-padding;\n\t\t// Leave room for app-navigation-toggle\n\t\tpadding-left: $toolbar-height;\n\t\twidth: 100%;\n\t\tbackground-color: var(--color-main-background);\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t&--list-view {\n\t\tmargin-bottom: 100px;\n\t\t// For positioning link overlay on rows\n\t\tposition: relative;\n\t}\n\n\t&__list-container {\n\t\twidth: 100%;\n\t}\n\n\t&__store-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t&__bundle-heading {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 20px 10px 20px 0;\n\t}\n\n\t&__bundle-header {\n\t\tmargin: 0 10px 0 50px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n#apps-list-search {\n\t.app-item {\n\t\th2 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=o},56261:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,'.app-item[data-v-09f30db0]{position:relative}.app-item[data-v-09f30db0]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-09f30db0]{--app-item-padding: calc(var(--default-grid-baseline) * 2);--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2)}.app-item--list-view.app-item--selected[data-v-09f30db0]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-09f30db0]{vertical-align:middle;border-bottom:1px solid var(--color-border);padding:var(--app-item-padding);height:var(--app-item-height)}.app-item--list-view .app-image[data-v-09f30db0]{width:var(--default-clickable-area);height:auto;text-align:right}.app-item--list-view .app-image-icon svg[data-v-09f30db0],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-09f30db0]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-09f30db0]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-09f30db0]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-09f30db0]::after{content:"";position:absolute;left:0;right:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-09f30db0]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-09f30db0]{display:inline-block;top:4px;margin-right:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-09f30db0],.app-item--list-view .app-level[data-v-09f30db0]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-09f30db0]{display:none}}.app-item--store-view[data-v-09f30db0]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-09f30db0]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-09f30db0]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-09f30db0]{margin:5px 0}.app-item--store-view .app-name--link[data-v-09f30db0]::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0}.app-item--store-view .app-actions[data-v-09f30db0]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-09f30db0]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-09f30db0]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-09f30db0]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-09f30db0]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-09f30db0]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-09f30db0]{width:100%}}.app-icon[data-v-09f30db0]{filter:var(--background-invert-if-bright)}.app-image[data-v-09f30db0]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-09f30db0]{width:100%}.app-version[data-v-09f30db0]{color:var(--color-text-maxcontrast)}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppItem.vue"],names:[],mappings:"AAIA,2BACC,iBAAA,CAEA,iCACC,6CAAA,CAGD,sCACC,0DAAA,CACA,oFAAA,CAEA,yDACC,6CAAA,CAGD,wCACC,qBAAA,CACA,2CAAA,CACA,+BAAA,CACA,6BAAA,CAGD,iDACC,mCAAA,CACA,WAAA,CACA,gBAAA,CAGD,oIAEC,cAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,oBAAA,CAGD,gDACC,iCAAA,CAGD,sDACC,6BAAA,CACA,YAAA,CACA,kBAAA,CAMD,6DACC,UAAA,CACA,iBAAA,CACA,MAAA,CACA,OAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,iBAAA,CAKF,0CACC,oGAEC,YAAA,CAAA,CAKF,0CACC,mDACC,YAAA,CAAA,CAKH,uCACC,YAAA,CAEA,2EACC,UAAA,CACA,YAAA,CACA,oBAAA,CACA,UAAA,CAGD,2DACC,iBAAA,CACA,WAAA,CAEA,UAAA,CACA,WAAA,CACA,UAAA,CAGD,iDACC,YAAA,CAGD,8DACC,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CAGD,oDACC,aAAA,CAGD,2CApCD,uCAqCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA5CD,uCA6CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CApDD,uCAqDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA5DD,uCA6DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CApED,uCAqEE,SAAA,CAAA,CAGD,0CAxED,uCAyEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA",sourcesContent:["\n@use '../../../../../core/css/variables.scss' as variables;\n@use 'sass:math';\n\n.app-item {\n\tposition: relative;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&--list-view {\n\t\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\n\t\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\n\n\t\t&.app-item--selected {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t> * {\n\t\t\tvertical-align: middle;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t\tpadding: var(--app-item-padding);\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-image {\n\t\t\twidth: var(--default-clickable-area);\n\t\t\theight: auto;\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t.app-image-icon svg,\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\topacity: .5;\n\t\t\tbackground-size: cover;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t.app-name {\n\t\t\tpadding: 0 var(--app-item-padding);\n\t\t}\n\n\t\t.app-name--link {\n\t\t\theight: var(--app-item-height);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\n\t\t// So we need to manually position it relative to the table container and cell\n\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: var(--app-item-padding);\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: end;\n\n\t\t\t.icon-loading-small {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttop: 4px;\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t}\n\n\t\t/* hide app version and level on narrower screens */\n\t\t@media only screen and (max-width: 900px) {\n\t\t\t.app-version,\n\t\t\t.app-level {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\n\t\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\n\t\t\t.app-actions {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--store-view {\n\t\tpadding: 30px;\n\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t\tbackground-size: 45px;\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t.app-image-icon svg {\n\t\t\tposition: absolute;\n\t\t\tbottom: 43px;\n\t\t\t/* position halfway vertically */\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\t\t\topacity: .1;\n\t\t}\n\n\t\t.app-name {\n\t\t\tmargin: 5px 0;\n\t\t}\n\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t.app-actions {\n\t\t\tmargin: 10px 0;\n\t\t}\n\n\t\t@media only screen and (min-width: 1601px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1600px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1400px) {\n\t\t\twidth: 33%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 900px) {\n\t\t\twidth: 50%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: variables.$breakpoint-mobile) {\n\t\t\twidth: 50%;\n\t\t}\n\n\t\t@media only screen and (max-width: 480px) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image {\n\tposition: relative;\n\theight: 150px;\n\topacity: 1;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n}\n\n.app-version {\n\tcolor: var(--color-text-maxcontrast);\n}\n"],sourceRoot:""}]);const r=o},30993:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue"],names:[],mappings:"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA",sourcesContent:["\n.app-level-badge {\n\tcolor: var(--color-text-maxcontrast);\n\tbackground-color: transparent;\n\tborder: 1px solid var(--color-text-maxcontrast);\n\tborder-radius: var(--border-radius);\n\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: 6px;\n\tpadding: 3px 6px;\n\twidth: fit-content;\n\n\t&--supported {\n\t\tborder-color: var(--color-success);\n\t\tcolor: var(--color-success);\n\t}\n}\n"],sourceRoot:""}]);const r=o},44600:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-discover[data-v-618752df]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue"],names:[],mappings:"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA",sourcesContent:["\n.app-discover {\n\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\n\tmargin-inline: auto;\n\tpadding-inline: 54px;\n\t/* Padding required to make last element not bound to the bottom */\n\tpadding-block-end: var(--default-clickable-area, 44px);\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-clickable-area, 44px);\n}\n"],sourceRoot:""}]);const r=o},10321:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-description[data-v-fccce5ae]{padding:12px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue"],names:[],mappings:"AACA,kCACC,YAAA",sourcesContent:["\n.app-description {\n\tpadding: 12px;\n}\n"],sourceRoot:""}]);const r=o},8007:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,'.app-details[data-v-24864562]{padding:20px}.app-details__actions-manage[data-v-24864562]{display:flex}.app-details__actions-manage input[data-v-24864562]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-24864562]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-24864562]{margin-top:15px}.app-details__section h4[data-v-24864562]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-24864562]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-24864562]{text-decoration:underline}.app-details__documentation li[data-v-24864562]{padding-inline-start:20px}.app-details__documentation li[data-v-24864562]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:"";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-24864562]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-24864562]:hover,.force[data-v-24864562]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}.missing-dependencies[data-v-24864562]{list-style:initial;list-style-type:initial;list-style-position:inside}',"",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue"],names:[],mappings:"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA,CAGD,uCACC,kBAAA,CACA,uBAAA,CACA,0BAAA",sourcesContent:['\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: "";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n.missing-dependencies {\n\tlist-style: initial;\n\tlist-style-type: initial;\n\tlist-style-position: inside;\n}\n'],sourceRoot:""}]);const r=o},99992:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-sidebar-tabs__release h2[data-v-2261a93d]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-2261a93d] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-2261a93d] h4{font-size:17px}","",{version:3,sources:["webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue"],names:[],mappings:"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA",sourcesContent:["\n.app-sidebar-tabs__release {\n\th2 {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t\tfont-size: 24px;\n\t}\n\n\t&-text {\n\t\t// Overwrite changelog heading styles\n\t\t:deep(h3) {\n\t\t\tfont-size: 20px;\n\t\t}\n\t\t:deep(h4) {\n\t\t\tfont-size: 17px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=o},3323:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}","",{version:3,sources:["webpack://./apps/settings/src/components/Markdown.vue"],names:[],mappings:"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA",sourcesContent:["\n.settings-markdown::v-deep {\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: 600;\n\tline-height: 120%;\n\tmargin-top: 24px;\n\tmargin-bottom: 12px;\n\tcolor: var(--color-main-text);\n}\n\nh1 {\n\tfont-size: 36px;\n\tmargin-top: 48px;\n}\n\nh2 {\n\tfont-size: 28px;\n\tmargin-top: 48px;\n}\n\nh3 {\n\tfont-size: 24px;\n}\n\nh4 {\n\tfont-size: 21px;\n}\n\nh5 {\n\tfont-size: 17px;\n}\n\nh6 {\n\tfont-size: var(--default-font-size);\n}\n\npre {\n\twhite-space: pre;\n\toverflow-x: auto;\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: 1em 1.3em;\n\tmargin-bottom: 1em;\n}\n\np code {\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: .1em .3em;\n}\n\nli {\n\tposition: relative;\n}\n\nul, ol {\n\tpadding-left: 10px;\n\tmargin-left: 10px;\n}\n\nul li {\n\tlist-style-type: disc;\n}\n\nul > li > ul > li {\n\tlist-style-type: circle;\n}\n\nul > li > ul > li ul li {\n\tlist-style-type: square;\n}\n\nblockquote {\n\tpadding-left: 1em;\n\tborder-left: 4px solid var(--color-primary-element);\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n}\n"],sourceRoot:""}]);const r=o},47275:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,".app-sidebar--with-screenshot[data-v-31ecb666] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-31ecb666]{width:100%;height:100%}.app-sidebar__badges[data-v-31ecb666]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-31ecb666]{color:var(--color-text-maxcontrast)}","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreSidebar.vue"],names:[],mappings:"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA",sourcesContent:["\n.app-sidebar {\n\t// If a screenshot is available it should cover the whole figure\n\t&--with-screenshot {\n\t\t:deep(.app-sidebar-header__figure) {\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__fallback-icon {\n\t\t// both 100% to center the icon\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&__badges {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tgap: 12px;\n\t}\n\n\t&__version {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n"],sourceRoot:""}]);const r=o},20922:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppScore.vue"],names:[],mappings:";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<span role="img"\n\t\t:aria-label="title"\n\t\t:title="title"\n\t\tclass="app-score__wrapper">\n\t\t<NcIconSvgWrapper v-for="index in fullStars"\n\t\t\t:key="`full-star-${index}`"\n\t\t\t:path="mdiStar"\n\t\t\tinline />\n\t\t<NcIconSvgWrapper v-if="hasHalfStar" :path="mdiStarHalfFull" inline />\n\t\t<NcIconSvgWrapper v-for="index in emptyStars"\n\t\t\t:key="`empty-star-${index}`"\n\t\t\t:path="mdiStarOutline"\n\t\t\tinline />\n\t</span>\n</template>\n<script lang="ts">\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from \'@mdi/js\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { defineComponent } from \'vue\'\n\nexport default defineComponent({\n\tname: \'AppScore\',\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t},\n\tprops: {\n\t\tscore: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\tmdiStar,\n\t\t\tmdiStarHalfFull,\n\t\t\tmdiStarOutline,\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\tconst appScore = (this.score * 5).toFixed(1)\n\t\t\treturn t(\'settings\', \'Community rating: {score}/5\', { score: appScore })\n\t\t},\n\t\tfullStars() {\n\t\t\treturn Math.floor(this.score * 5 + 0.25)\n\t\t},\n\t\temptyStars() {\n\t\t\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\n\t\t},\n\t\thasHalfStar() {\n\t\t\treturn (this.fullStars + this.emptyStars) < 5\n\t\t},\n\t},\n})\n<\/script>\n<style scoped>\n.app-score__wrapper {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n\n\t> * {\n\t\tvertical-align: text-bottom;\n\t}\n}\n</style>\n'],sourceRoot:""}]);const r=o},34707:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStore.vue"],names:[],mappings:";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA",sourcesContent:["\x3c!--\n\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n\t-\n\t- @author Julius Härtl <jus@bitgrid.net>\n\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\n\t-\n\t--\x3e\n\n<template>\n\t\x3c!-- Apps list --\x3e\n\t<NcAppContent class=\"app-settings-content\"\n\t\t:page-heading=\"appStoreLabel\">\n\t\t<h2 class=\"app-settings-content__label\" v-text=\"viewLabel\" />\n\n\t\t<AppStoreDiscoverSection v-if=\"currentCategory === 'discover'\" />\n\t\t<NcEmptyContent v-else-if=\"isLoading\"\n\t\t\tclass=\"empty-content__loading\"\n\t\t\t:name=\"t('settings', 'Loading app list')\">\n\t\t\t<template #icon>\n\t\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t\t<AppList v-else :category=\"currentCategory\" />\n\t</NcAppContent>\n</template>\n\n<script setup lang=\"ts\">\nimport { translate as t } from '@nextcloud/l10n'\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\nimport { useRoute } from 'vue-router/composables'\n\nimport { useAppsStore } from '../store/apps-store'\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\n\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\nimport AppList from '../components/AppList.vue'\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\n\nconst route = useRoute()\nconst store = useAppsStore()\n\n/**\n * ID of the current active category, default is `discover`\n */\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\n\nconst appStoreLabel = t('settings', 'App Store')\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\n\nwatchEffect(() => {\n\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\n})\n\n// TODO this part should be migrated to pinia\nconst instance = getCurrentInstance()\n/** Is the app list loading */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\nonBeforeMount(() => {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(instance?.proxy as any).$store.dispatch('getAllApps')\n})\n<\/script>\n\n<style scoped>\n.empty-content__loading {\n\theight: 100%;\n}\n\n.app-settings-content__label {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n</style>\n"],sourceRoot:""}]);const r=o},23921:(t,e,a)=>{a.d(e,{A:()=>r});var n=a(71354),s=a.n(n),i=a(76314),o=a.n(i)()(s());o.push([t.id,"\n/* The categories-loading indicator */\n.categories--loading[data-v-d15221f2] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/views/AppStoreNavigation.vue"],names:[],mappings:";AAsIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA",sourcesContent:['<template>\n\t\x3c!-- Categories & filters --\x3e\n\t<NcAppNavigation :aria-label="t(\'settings\', \'Apps\')">\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem id="app-category-discover"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'discover\'} }"\n\t\t\t\t:name="APPS_SECTION_ENUM.discover">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.discover" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-installed"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'installed\'} }"\n\t\t\t\t:name="APPS_SECTION_ENUM.installed">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.installed" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-enabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'enabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.enabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.enabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-disabled"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'disabled\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.disabled">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.disabled" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem v-if="updateCount > 0"\n\t\t\t\tid="app-category-updates"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'updates\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM.updates">\n\t\t\t\t<template #counter>\n\t\t\t\t\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\n\t\t\t\t</template>\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.updates" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\t\t\t<NcAppNavigationItem id="app-category-your-bundles"\n\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'app-bundles\' } }"\n\t\t\t\t:name="APPS_SECTION_ENUM[\'app-bundles\']">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.bundles" />\n\t\t\t\t</template>\n\t\t\t</NcAppNavigationItem>\n\n\t\t\t<NcAppNavigationSpacer />\n\n\t\t\t\x3c!-- App store categories --\x3e\n\t\t\t<li v-if="appstoreEnabled && categoriesLoading" class="categories--loading">\n\t\t\t\t<NcLoadingIcon :size="20" :aria-label="t(\'settings\', \'Loading categories\')" />\n\t\t\t</li>\n\t\t\t<template v-else-if="appstoreEnabled && !categoriesLoading">\n\t\t\t\t<NcAppNavigationItem v-if="isSubscribed"\n\t\t\t\t\tid="app-category-supported"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'supported\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.supported">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.supported" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t\t<NcAppNavigationItem id="app-category-featured"\n\t\t\t\t\t:to="{ name: \'apps-category\', params: { category: \'featured\' } }"\n\t\t\t\t\t:name="APPS_SECTION_ENUM.featured">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="APPSTORE_CATEGORY_ICONS.featured" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\n\t\t\t\t<NcAppNavigationItem v-for="category in categories"\n\t\t\t\t\t:id="`app-category-${category.id}`"\n\t\t\t\t\t:key="category.id"\n\t\t\t\t\t:name="category.displayName"\n\t\t\t\t\t:to="{\n\t\t\t\t\t\tname: \'apps-category\',\n\t\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t\t}">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path="category.icon" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</template>\n\n\t\t\t<NcAppNavigationItem id="app-developer-docs"\n\t\t\t\t:name="t(\'settings\', \'Developer documentation ↗\')"\n\t\t\t\t:href="developerDocsUrl" />\n\t\t</template>\n\t</NcAppNavigation>\n</template>\n\n<script setup lang="ts">\nimport { loadState } from \'@nextcloud/initial-state\'\nimport { translate as t } from \'@nextcloud/l10n\'\nimport { computed, onBeforeMount } from \'vue\'\nimport { APPS_SECTION_ENUM } from \'../constants/AppsConstants\'\nimport { useAppsStore } from \'../store/apps-store\'\n\nimport NcAppNavigation from \'@nextcloud/vue/dist/Components/NcAppNavigation.js\'\nimport NcAppNavigationItem from \'@nextcloud/vue/dist/Components/NcAppNavigationItem.js\'\nimport NcAppNavigationSpacer from \'@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js\'\nimport NcCounterBubble from \'@nextcloud/vue/dist/Components/NcCounterBubble.js\'\nimport NcIconSvgWrapper from \'@nextcloud/vue/dist/Components/NcIconSvgWrapper.js\'\nimport NcLoadingIcon from \'@nextcloud/vue/dist/Components/NcLoadingIcon.js\'\n\nimport APPSTORE_CATEGORY_ICONS from \'../constants/AppstoreCategoryIcons.ts\'\n\nconst updateCount = loadState<number>(\'settings\', \'appstoreUpdateCount\', 0)\nconst appstoreEnabled = loadState<boolean>(\'settings\', \'appstoreEnabled\', true)\nconst developerDocsUrl = loadState<string>(\'settings\', \'appstoreDeveloperDocs\', \'\')\n\nconst store = useAppsStore()\nconst categories = computed(() => store.categories)\nconst categoriesLoading = computed(() => store.loading.categories)\n\n/**\n * Check if the current instance has a support subscription from the Nextcloud GmbH\n *\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n */\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\n\n// load categories when component is mounted\nonBeforeMount(() => {\n\tstore.loadCategories()\n\tstore.loadApps()\n})\n<\/script>\n\n<style scoped>\n/* The categories-loading indicator */\n.categories--loading {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n</style>\n'],sourceRoot:""}]);const r=o},64747:(t,e,a)=>{a.d(e,{A:()=>S});var n=a(15769),s=a(63358),i=a(45834);const o={name:"SvgFilterMixin",data:()=>({filterId:""}),computed:{filterUrl(){return"url(#".concat(this.filterId,")")}},mounted(){this.filterId="invertIconApps-"+Math.random().toString(36).substring(2)}};var r=a(14486);const p=(0,r.A)(o,void 0,void 0,!1,null,null,null).exports;var l=a(9518);const c={name:"AppItem",components:{AppLevelBadge:s.A,AppScore:n.A,NcButton:l.A},mixins:[i.A,p],props:{app:{type:Object,required:!0},category:{type:String,required:!0},listView:{type:Boolean,default:!0},useBundleView:{type:Boolean,default:!1},headers:{type:String,default:null},inline:{type:Boolean,default:!1}},data:()=>({isSelected:!1,scrolled:!1,screenshotLoaded:!1}),computed:{hasRating(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},dataItemTag(){return this.listView?"td":"div"},withSidebar(){return!!this.$route.params.id}},watch:{"$route.params.id"(t){this.isSelected=this.app.id===t}},mounted(){if(this.isSelected=this.app.id===this.$route.params.id,this.app.releases&&this.app.screenshot){const t=new Image;t.onload=()=>{this.screenshotLoaded=!0},t.src=this.app.screenshot}},watchers:{},methods:{prefix:(t,e)=>t+"_"+e,getDataItemHeaders(t){return this.useBundleView?[this.headers,t].join(" "):null}}};var d=a(85072),A=a.n(d),u=a(97825),g=a.n(u),v=a(77659),m=a.n(v),h=a(55056),C=a.n(h),b=a(10540),f=a.n(b),_=a(41113),y=a.n(_),x=a(56261),w={};w.styleTagTransform=y(),w.setAttributes=C(),w.insert=m().bind(null,"head"),w.domAPI=g(),w.insertStyleElement=f(),A()(x.A,w),x.A&&x.A.locals&&x.A.locals;const S=(0,r.A)(c,(function(){var t=this,e=t._self._c;return e(t.listView?"tr":t.inline?"article":"li",{tag:"component",staticClass:"app-item",class:{"app-item--list-view":t.listView,"app-item--store-view":!t.listView,"app-item--selected":t.isSelected,"app-item--with-sidebar":t.withSidebar}},[e(t.dataItemTag,{tag:"component",staticClass:"app-image app-image-icon",attrs:{headers:t.getDataItemHeaders("app-table-col-icon")}},[t.listView&&!t.app.preview||!t.listView&&!t.screenshotLoaded?e("div",{staticClass:"icon-settings-dark"}):t.listView&&t.app.preview?e("svg",{attrs:{width:"32",height:"32",viewBox:"0 0 32 32"}},[e("image",{staticClass:"app-icon",attrs:{x:"0",y:"0",width:"32",height:"32",preserveAspectRatio:"xMinYMin meet","xlink:href":t.app.preview}})]):t._e(),t._v(" "),!t.listView&&t.app.screenshot&&t.screenshotLoaded?e("img",{attrs:{src:t.app.screenshot,alt:""}}):t._e()]),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-name",attrs:{headers:t.getDataItemHeaders("app-table-col-name")}},[e("router-link",{staticClass:"app-name--link",attrs:{to:{name:"apps-details",params:{category:t.category,id:t.app.id}},"aria-label":t.t("settings","Show details for {appName} app",{appName:t.app.name})}},[t._v("\n\t\t\t"+t._s(t.app.name)+"\n\t\t")])],1),t._v(" "),t.listView?t._e():e(t.dataItemTag,{tag:"component",staticClass:"app-summary",attrs:{headers:t.getDataItemHeaders("app-version")}},[t._v("\n\t\t"+t._s(t.app.summary)+"\n\t")]),t._v(" "),t.listView?e(t.dataItemTag,{tag:"component",staticClass:"app-version",attrs:{headers:t.getDataItemHeaders("app-table-col-version")}},[t.app.version?e("span",[t._v(t._s(t.app.version))]):t.app.appstoreData.releases[0].version?e("span",[t._v(t._s(t.app.appstoreData.releases[0].version))]):t._e()]):t._e(),t._v(" "),e(t.dataItemTag,{tag:"component",staticClass:"app-level",attrs:{headers:t.getDataItemHeaders("app-table-col-level")}},[e("AppLevelBadge",{attrs:{level:t.app.level}}),t._v(" "),t.hasRating&&!t.listView?e("AppScore",{attrs:{score:t.app.score}}):t._e()],1),t._v(" "),t.inline?t._e():e(t.dataItemTag,{tag:"component",staticClass:"app-actions",attrs:{headers:t.getDataItemHeaders("app-table-col-actions")}},[t.app.error?e("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.app.error)+"\n\t\t")]):t._e(),t._v(" "),t.isLoading?e("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?e("NcButton",{attrs:{type:"primary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.update(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Update to {update}",{update:t.app.update}))+"\n\t\t")]):t._e(),t._v(" "),t.app.canUnInstall?e("NcButton",{staticClass:"uninstall",attrs:{type:"tertiary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.remove(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Remove"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active?e("NcButton",{attrs:{disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.disable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.t("settings","Disable"))+"\n\t\t")]):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active?t._e():e("NcButton",{attrs:{title:t.forceEnableButtonTooltip,"aria-label":t.forceEnableButtonTooltip,type:"secondary",disabled:t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.forceEnable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.forceEnableButtonText)+"\n\t\t")]):e("NcButton",{attrs:{title:t.enableButtonTooltip,"aria-label":t.enableButtonTooltip,type:"primary",disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(e){return e.stopPropagation(),t.enable(t.app.id)}}},[t._v("\n\t\t\t"+t._s(t.enableButtonText)+"\n\t\t")])],1)],1)}),[],!1,null,"09f30db0",null).exports},63358:(t,e,a)=>{a.d(e,{A:()=>y});var n=a(85471),s=a(6695),i=a(9165),o=a(53334);const r=(0,n.pM)({__name:"AppLevelBadge",props:{level:null},setup(t){const e=t,a=(0,n.EW)((()=>300===e.level)),r=(0,n.EW)((()=>200===e.level)),p=(0,n.EW)((()=>a.value?i.Yk:i.Tfj)),l=(0,n.EW)((()=>a.value?(0,o.Tl)("settings","Supported"):(0,o.Tl)("settings","Featured"))),c=(0,n.EW)((()=>a.value?(0,o.Tl)("settings","This app is supported via your current Nextcloud subscription."):(0,o.Tl)("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use.")));return{__sfc:!0,props:e,isSupported:a,isFeatured:r,badgeIcon:p,badgeText:l,badgeTitle:c,NcIconSvgWrapper:s.A}}});var p=a(85072),l=a.n(p),c=a(97825),d=a.n(c),A=a(77659),u=a.n(A),g=a(55056),v=a.n(g),m=a(10540),h=a.n(m),C=a(41113),b=a.n(C),f=a(30993),_={};_.styleTagTransform=b(),_.setAttributes=v(),_.insert=u().bind(null,"head"),_.domAPI=d(),_.insertStyleElement=h(),l()(f.A,_),f.A&&f.A.locals&&f.A.locals;const y=(0,a(14486).A)(r,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.isSupported||a.isFeatured?e("span",{staticClass:"app-level-badge",class:{"app-level-badge--supported":a.isSupported},attrs:{title:a.badgeTitle}},[e(a.NcIconSvgWrapper,{attrs:{path:a.badgeIcon,size:20,inline:""}}),t._v("\n\t"+t._s(a.badgeText)+"\n")],1):t._e()}),[],!1,null,"3590dbeb",null).exports},15769:(t,e,a)=>{a.d(e,{A:()=>_});var n=a(6695),s=a(9165),i=a(53334);const o=(0,a(85471).pM)({name:"AppScore",components:{NcIconSvgWrapper:n.A},props:{score:{type:Number,required:!0}},setup:()=>({mdiStar:s.ZL5,mdiStarHalfFull:s.tdF,mdiStarOutline:s.dF}),computed:{title(){const t=(5*this.score).toFixed(1);return(0,i.Tl)("settings","Community rating: {score}/5",{score:t})},fullStars(){return Math.floor(5*this.score+.25)},emptyStars(){return Math.min(Math.floor(5*(1-this.score)+.25),5-this.fullStars)},hasHalfStar(){return this.fullStars+this.emptyStars<5}}});var r=a(85072),p=a.n(r),l=a(97825),c=a.n(l),d=a(77659),A=a.n(d),u=a(55056),g=a.n(u),v=a(10540),m=a.n(v),h=a(41113),C=a.n(h),b=a(20922),f={};f.styleTagTransform=C(),f.setAttributes=g(),f.insert=A().bind(null,"head"),f.domAPI=c(),f.insertStyleElement=m(),p()(b.A,f),b.A&&b.A.locals&&b.A.locals;const _=(0,a(14486).A)(o,(function(){var t=this,e=t._self._c;return t._self._setupProxy,e("span",{staticClass:"app-score__wrapper",attrs:{role:"img","aria-label":t.title,title:t.title}},[t._l(t.fullStars,(function(a){return e("NcIconSvgWrapper",{key:"full-star-".concat(a),attrs:{path:t.mdiStar,inline:""}})})),t._v(" "),t.hasHalfStar?e("NcIconSvgWrapper",{attrs:{path:t.mdiStarHalfFull,inline:""}}):t._e(),t._v(" "),t._l(t.emptyStars,(function(a){return e("NcIconSvgWrapper",{key:"empty-star-".concat(a),attrs:{path:t.mdiStarOutline,inline:""}})}))],2)}),[],!1,null,"7d015114",null).exports},8073:(e,a,n)=>{n.r(a),n.d(a,{default:()=>Q});var s=n(85471),i=n(53334),o=n(24387),r=n(846),p=n(92973),l=n(18195),c=n(10833),d=n(46222),A=n(61338),u=n(64747),g=n(98959);function v(t){if(!Number.isInteger(t)&&t!==Number.POSITIVE_INFINITY||!(t>0))throw new TypeError("Expected `concurrency` to be a number from 1 and up");const e=new g.A;let a=0;const n=async(t,n,s)=>{a++;const i=(async()=>t(...s))();n(i);try{await i}catch{}a--,e.size>0&&e.dequeue()()},s=function(s){for(var i=arguments.length,o=new Array(i>1?i-1:0),r=1;r<i;r++)o[r-1]=arguments[r];return new Promise((i=>{((s,i,o)=>{e.enqueue(n.bind(void 0,s,i,o)),(async()=>{await Promise.resolve(),a<t&&e.size>0&&e.dequeue()()})()})(s,i,o)}))};return Object.defineProperties(s,{activeCount:{get:()=>a},pendingCount:{get:()=>e.size},clearQueue:{value:()=>{e.clear()}}}),s}var m=n(9518),h=n(96763);const C={name:"AppList",components:{AppItem:u.A,NcButton:m.A},props:{category:{type:String,required:!0}},data:()=>({search:""}),computed:{counter(){return this.apps.filter((t=>t.update)).length},loading(){return this.$store.getters.loading("list")},hasPendingUpdate(){return this.apps.filter((t=>t.update)).length>0},showUpdateAll(){return this.hasPendingUpdate&&this.useListView},apps(){const t=this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase()))).sort((function(t,e){const a=""+(t.active?0:1)+(t.update?0:1)+t.name,n=""+(e.active?0:1)+(e.update?0:1)+e.name;return OC.Util.naturalSortCompare(a,n)}));return"installed"===this.category?t.filter((t=>t.installed)):"enabled"===this.category?t.filter((t=>t.active&&t.installed)):"disabled"===this.category?t.filter((t=>!t.active&&t.installed)):"app-bundles"===this.category?t.filter((t=>t.bundles)):"updates"===this.category?t.filter((t=>t.update)):"supported"===this.category?t.filter((t=>300===t.level)):"featured"===this.category?t.filter((t=>200===t.level)):t.filter((t=>t.appstore&&void 0!==t.category&&(t.category===this.category||t.category.indexOf(this.category)>-1)))},bundles(){return this.$store.getters.getAppBundles.filter((t=>this.bundleApps(t.id).length>0))},bundleApps:()=>function(t){return this.$store.getters.getAllApps.filter((e=>void 0!==e.bundleIds&&e.bundleIds.includes(t)))},searchApps(){return""===this.search?[]:this.$store.getters.getAllApps.filter((t=>-1!==t.name.toLowerCase().search(this.search.toLowerCase())&&!this.apps.find((e=>e.id===t.id))))},useAppStoreView(){return!this.useListView&&!this.useBundleView},useListView(){return"installed"===this.category||"enabled"===this.category||"disabled"===this.category||"updates"===this.category||"featured"===this.category||"supported"===this.category},useBundleView(){return"app-bundles"===this.category},allBundlesEnabled(){return t=>0===this.bundleApps(t).filter((t=>!t.active)).length},bundleToggleText(){return e=>this.allBundlesEnabled(e)?t("settings","Disable all"):t("settings","Download and enable all")}},beforeDestroy(){(0,A.al)("nextcloud:unified-search.search",this.setSearch),(0,A.al)("nextcloud:unified-search.reset",this.resetSearch)},mounted(){(0,A.B1)("nextcloud:unified-search.search",this.setSearch),(0,A.B1)("nextcloud:unified-search.reset",this.resetSearch)},methods:{setSearch(t){let{query:e}=t;this.search=e},resetSearch(){this.search=""},toggleBundle(t){return this.allBundlesEnabled(t)?this.disableBundle(t):this.enableBundle(t)},enableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("enableApp",{appId:e,groups:[]}).catch((t=>{h.error(t),OC.Notification.show(t)}))},disableBundle(t){const e=this.bundleApps(t).map((t=>t.id));this.$store.dispatch("disableApp",{appId:e,groups:[]}).catch((t=>{OC.Notification.show(t)}))},updateAll(){const t=v(1);this.apps.filter((t=>t.update)).map((e=>t((()=>this.$store.dispatch("updateApp",{appId:e.id})))))}}};var b=n(85072),f=n.n(b),_=n(97825),y=n.n(_),x=n(77659),w=n.n(x),S=n(55056),N=n.n(S),k=n(10540),I=n.n(k),T=n(41113),E=n.n(T),B=n(94025),D={};D.styleTagTransform=E(),D.setAttributes=N(),D.insert=w().bind(null,"head"),D.domAPI=y(),D.insertStyleElement=I(),f()(B.A,D),B.A&&B.A.locals&&B.A.locals;var P=n(14486);const L=(0,P.A)(C,(function(){var t=this,e=t._self._c;return e("div",{attrs:{id:"app-content-inner"}},[e("div",{staticClass:"apps-list",class:{"apps-list--list-view":t.useBundleView||t.useListView,"apps-list--store-view":t.useAppStoreView},attrs:{id:"apps-list"}},[t.useListView?[t.showUpdateAll?e("div",{staticClass:"apps-list__toolbar"},[t._v("\n\t\t\t\t"+t._s(t.n("settings","%n app has an update available","%n apps have an update available",t.counter))+"\n\t\t\t\t"),t.showUpdateAll?e("NcButton",{attrs:{id:"app-list-update-all",type:"primary"},on:{click:t.updateAll}},[t._v("\n\t\t\t\t\t"+t._s(t.n("settings","Update","Update all",t.counter))+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.showUpdateAll?t._e():e("div",{staticClass:"apps-list__toolbar"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","All apps are up-to-date."))+"\n\t\t\t")]),t._v(" "),e("TransitionGroup",{staticClass:"apps-list__list-container",attrs:{name:"apps-list",tag:"table"}},[e("tr",{key:"app-list-view-header"},[e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))],2)]:t._e(),t._v(" "),t.useBundleView?e("table",{staticClass:"apps-list__list-container"},[e("tr",{key:"app-list-view-header"},[e("th",{attrs:{id:"app-table-col-icon"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-name"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-version"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-level"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",{attrs:{id:"app-table-col-actions"}},[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.bundles,(function(a){return[e("tr",{key:a.id},[e("th",{attrs:{id:"app-table-rowgroup-".concat(a.id),colspan:"5",scope:"rowgroup"}},[e("div",{staticClass:"apps-list__bundle-heading"},[e("span",{staticClass:"apps-list__bundle-header"},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(a.name)+"\n\t\t\t\t\t\t\t")]),t._v(" "),e("NcButton",{attrs:{type:"secondary"},on:{click:function(e){return t.toggleBundle(a.id)}}},[t._v("\n\t\t\t\t\t\t\t\t"+t._s(t.t("settings",t.bundleToggleText(a.id)))+"\n\t\t\t\t\t\t\t")])],1)])]),t._v(" "),t._l(t.bundleApps(a.id),(function(n){return e("AppItem",{key:a.id+n.id,attrs:{"use-bundle-view":!0,headers:"app-table-rowgroup-".concat(a.id),app:n,category:t.category}})}))]}))],2):t._e(),t._v(" "),t.useAppStoreView?e("ul",{staticClass:"apps-list__store-container"},t._l(t.apps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category,"list-view":!1}})})),1):t._e()],2),t._v(" "),e("div",{staticClass:"apps-list apps-list--list-view",attrs:{id:"apps-list-search"}},[e("div",{staticClass:"apps-list__list-container"},[""!==t.search&&t.searchApps.length>0?e("table",{staticClass:"apps-list__list-container"},[e("caption",{staticClass:"apps-list__bundle-header"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Results from other categories"))+"\n\t\t\t\t")]),t._v(" "),e("tr",{key:"app-list-view-header"},[e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Icon")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Name")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Version")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Level")))])]),t._v(" "),e("th",[e("span",{staticClass:"hidden-visually"},[t._v(t._s(t.t("settings","Actions")))])])]),t._v(" "),t._l(t.searchApps,(function(a){return e("AppItem",{key:a.id,attrs:{app:a,category:t.category}})}))],2):t._e()])]),t._v(" "),""===t.search||t.loading||0!==t.searchApps.length||0!==t.apps.length?t._e():e("div",{staticClass:"emptycontent emptycontent-search",attrs:{id:"apps-list-empty"}},[e("div",{staticClass:"icon-settings-dark",attrs:{id:"app-list-empty-icon"}}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No apps found for your version")))])])])}),[],!1,null,"73184220",null).exports;var O=n(9165),R=n(85168),G=n(99498),W=n(26287),U=n(6695),M=n(36620);const F=t=>{var e;const a={...t};if(a.date&&(a.date=Date.parse(a.date)),a.expiryDate&&(a.expiryDate=Date.parse(a.expiryDate)),"post"===a.type)return a;if("showcase"===a.type)return a;if("carousel"===a.type)return a;throw new Error("Invalid argument, app discover element with type ".concat(null!==(e=t.type)&&void 0!==e?e:"unknown"," is unknown"))},Y=t=>{const e=Date.now();return!(t.date&&t.date>e||t.expiryDate&&t.expiryDate<e)},z=(0,s.pM)({__name:"AppStoreDiscoverSection",setup(t){const e=(0,s.$V)((()=>n.e(1544).then(n.bind(n,21544)))),a=(0,s.$V)((()=>Promise.all([n.e(1544),n.e(3865)]).then(n.bind(n,73865)))),o=(0,s.$V)((()=>Promise.all([n.e(1544),n.e(8630)]).then(n.bind(n,48630)))),r=(0,s.KR)(!1),p=(0,s.KR)([]),l=t=>{for(let e=t.length-1;e>0;e--){const a=Math.floor(Math.random()*(e+1));[t[e],t[a]]=[t[a],t[e]]}return t};return(0,s.KC)((async()=>{try{const{data:t}=await W.A.get((0,G.Jv)("/settings/api/apps/discover"));if(0===t.length)return M.A.info("No app discover elements available (empty response)"),void(r.value=!0);const e=t.map(F).filter(Y),a=l(e);a.sort(((t,e)=>{var a,n;return(null!==(a=t.order)&&void 0!==a?a:1/0)<(null!==(n=e.order)&&void 0!==n?n:1/0)?-1:1})),p.value=a}catch(t){r.value=!0,M.A.error(t),(0,R.Qg)((0,i.Tl)("settings","Could not load app discover section"))}})),{__sfc:!0,PostType:e,CarouselType:a,ShowcaseType:o,hasError:r,elements:p,shuffleArray:l,getComponent:t=>"post"===t?e:"carousel"===t?a:"showcase"===t?o:(0,s.pM)({mounted:()=>M.A.error("Unknown component requested ",t),render:t=>t("div",(0,i.Tl)("settings","Could not render element"))}),mdiEyeOff:O.Bk0,t:i.Tl,NcEmptyContent:c.A,NcIconSvgWrapper:U.A,NcLoadingIcon:d.A}}});var $=n(44600),V={};V.styleTagTransform=E(),V.setAttributes=N(),V.insert=w().bind(null,"head"),V.domAPI=y(),V.insertStyleElement=I(),f()($.A,V),$.A&&$.A.locals&&$.A.locals;const q=(0,P.A)(z,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e("div",{staticClass:"app-discover"},[a.hasError?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Nothing to show"),description:a.t("settings","Could not load section content from app store.")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiEyeOff,size:64}})]},proxy:!0}],null,!1,638098482)}):0===a.elements.length?e(a.NcEmptyContent,{attrs:{name:a.t("settings","Loading"),description:a.t("settings","Fetching the latest news…")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):t._l(a.elements,(function(n,s){var i;return e(a.getComponent(n.type),t._b({key:null!==(i=n.id)&&void 0!==i?i:s,tag:"component"},"component",n,!1))}))],2)}),[],!1,null,"618752df",null).exports,H=(0,s.pM)({__name:"AppStore",setup(t){const e=(0,o.lq)(),a=(0,r.T)(),n=(0,s.EW)((()=>{var t,a;return null!==(t=null===(a=e.params)||void 0===a?void 0:a.category)&&void 0!==t?t:"discover"})),A=(0,i.Tl)("settings","App Store"),u=(0,s.EW)((()=>{var t,e,s;return null!==(t=null!==(e=p.l[n.value])&&void 0!==e?e:null===(s=a.getCategoryById(n.value))||void 0===s?void 0:s.displayName)&&void 0!==t?t:A}));(0,s.nT)((()=>{window.document.title="".concat(u.value," - ").concat(A," - Nextcloud")}));const g=(0,s.nI)(),v=(0,s.EW)((()=>(null==g?void 0:g.proxy).$store.getters.loading("list")));return(0,s.KC)((()=>{(null==g?void 0:g.proxy).$store.dispatch("getCategories",{shouldRefetchCategories:!0}),(null==g?void 0:g.proxy).$store.dispatch("getAllApps")})),{__sfc:!0,route:e,store:a,currentCategory:n,appStoreLabel:A,viewLabel:u,instance:g,isLoading:v,t:i.Tl,NcAppContent:l.A,NcEmptyContent:c.A,NcLoadingIcon:d.A,AppList:L,AppStoreDiscoverSection:q}}});var j=n(34707),K={};K.styleTagTransform=E(),K.setAttributes=N(),K.insert=w().bind(null,"head"),K.domAPI=y(),K.insertStyleElement=I(),f()(j.A,K),j.A&&j.A.locals&&j.A.locals;const Q=(0,P.A)(H,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppContent,{staticClass:"app-settings-content",attrs:{"page-heading":a.appStoreLabel}},[e("h2",{staticClass:"app-settings-content__label",domProps:{textContent:t._s(a.viewLabel)}}),t._v(" "),"discover"===a.currentCategory?e(a.AppStoreDiscoverSection):a.isLoading?e(a.NcEmptyContent,{staticClass:"empty-content__loading",attrs:{name:a.t("settings","Loading app list")},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcLoadingIcon,{attrs:{size:64}})]},proxy:!0}])}):e(a.AppList,{attrs:{category:a.currentCategory}})],1)}),[],!1,null,"a75d4530",null).exports},12336:(t,e,a)=>{a.r(e),a.d(e,{default:()=>E});var n=a(85471),s=a(38613),i=a(53334),o=a(92973),r=a(846),p=a(42530),l=a(52439),c=a(14645),d=a(70563),A=a(6695),u=a(46222),g=a(86438);const v=(0,n.pM)({__name:"AppStoreNavigation",setup(t){const e=(0,s.C)("settings","appstoreUpdateCount",0),a=(0,s.C)("settings","appstoreEnabled",!0),v=(0,s.C)("settings","appstoreDeveloperDocs",""),m=(0,r.T)(),h=(0,n.EW)((()=>m.categories)),C=(0,n.EW)((()=>m.loading.categories)),b=(0,n.EW)((()=>void 0!==m.apps.find((t=>{let{level:e}=t;return 300===e}))));return(0,n.KC)((()=>{m.loadCategories(),m.loadApps()})),{__sfc:!0,updateCount:e,appstoreEnabled:a,developerDocsUrl:v,store:m,categories:h,categoriesLoading:C,isSubscribed:b,t:i.Tl,APPS_SECTION_ENUM:o.l,NcAppNavigation:p.A,NcAppNavigationItem:l.A,NcAppNavigationSpacer:c.A,NcCounterBubble:d.A,NcIconSvgWrapper:A.A,NcLoadingIcon:u.A,APPSTORE_CATEGORY_ICONS:g.A}}});var m=a(85072),h=a.n(m),C=a(97825),b=a.n(C),f=a(77659),_=a.n(f),y=a(55056),x=a.n(y),w=a(10540),S=a.n(w),N=a(41113),k=a.n(N),I=a(23921),T={};T.styleTagTransform=k(),T.setAttributes=x(),T.insert=_().bind(null,"head"),T.domAPI=b(),T.insertStyleElement=S(),h()(I.A,T),I.A&&I.A.locals&&I.A.locals;const E=(0,a(14486).A)(v,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppNavigation,{attrs:{"aria-label":a.t("settings","Apps")},scopedSlots:t._u([{key:"list",fn:function(){return[e(a.NcAppNavigationItem,{attrs:{id:"app-category-discover",to:{name:"apps-category",params:{category:"discover"}},name:a.APPS_SECTION_ENUM.discover},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-installed",to:{name:"apps-category",params:{category:"installed"}},name:a.APPS_SECTION_ENUM.installed},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-enabled",to:{name:"apps-category",params:{category:"enabled"}},name:a.APPS_SECTION_ENUM.enabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-disabled",to:{name:"apps-category",params:{category:"disabled"}},name:a.APPS_SECTION_ENUM.disabled},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:!0}])}),t._v(" "),a.updateCount>0?e(a.NcAppNavigationItem,{attrs:{id:"app-category-updates",to:{name:"apps-category",params:{category:"updates"}},name:a.APPS_SECTION_ENUM.updates},scopedSlots:t._u([{key:"counter",fn:function(){return[e(a.NcCounterBubble,[t._v(t._s(a.updateCount))])]},proxy:!0},{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:!0}],null,!1,2824895104)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-your-bundles",to:{name:"apps-category",params:{category:"app-bundles"}},name:a.APPS_SECTION_ENUM["app-bundles"]},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:!0}])}),t._v(" "),e(a.NcAppNavigationSpacer),t._v(" "),a.appstoreEnabled&&a.categoriesLoading?e("li",{staticClass:"categories--loading"},[e(a.NcLoadingIcon,{attrs:{size:20,"aria-label":a.t("settings","Loading categories")}})],1):a.appstoreEnabled&&!a.categoriesLoading?[a.isSubscribed?e(a.NcAppNavigationItem,{attrs:{id:"app-category-supported",to:{name:"apps-category",params:{category:"supported"}},name:a.APPS_SECTION_ENUM.supported},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:!0}],null,!1,613663011)}):t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"}},name:a.APPS_SECTION_ENUM.featured},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:!0}])}),t._v(" "),t._l(a.categories,(function(n){return e(a.NcAppNavigationItem,{key:n.id,attrs:{id:"app-category-".concat(n.id),name:n.displayName,to:{name:"apps-category",params:{category:n.id}}},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:n.icon}})]},proxy:!0}],null,!0)})}))]:t._e(),t._v(" "),e(a.NcAppNavigationItem,{attrs:{id:"app-developer-docs",name:a.t("settings","Developer documentation ↗"),href:a.developerDocsUrl}})]},proxy:!0}])})}),[],!1,null,"d15221f2",null).exports},83625:(e,a,n)=>{n.r(a),n.d(a,{default:()=>at});var s=n(85471),i=n(53334),o=n(24387),r=n(846),p=n(62182),l=n(6695),c=n(15769),d=n(9165),A=n(18503),u=n(60023),g=n(42838),v=n.n(g);const m={name:"Markdown",props:{text:{type:String,default:""},minHeading:{type:Number,default:1}},computed:{renderMarkdown(){const t=new u.xI.Renderer;return t.link=function(t,e,a){let n;try{n=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0!==n.indexOf("http:")&&0!==n.indexOf("https:"))return"";let s='<a href="'+t+'" rel="noreferrer noopener"';return e&&(s+=' title="'+e+'"'),s+=">"+a+"</a>",s},t.heading=(t,e)=>(e=Math.min(6,e+(this.minHeading-1)),"<h".concat(e,">").concat(t,"</h").concat(e,">")),t.image=function(t,e,a){return a||e},t.blockquote=function(t){return t},v().sanitize((0,u.xI)(this.text.trim(),{renderer:t,gfm:!1,highlight:!1,tables:!1,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1}),{SAFE_FOR_JQUERY:!0,ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})}}};var h=n(85072),C=n.n(h),b=n(97825),f=n.n(b),_=n(77659),y=n.n(_),x=n(55056),w=n.n(x),S=n(10540),N=n.n(S),k=n(41113),I=n.n(k),T=n(3323),E={};E.styleTagTransform=I(),E.setAttributes=w(),E.insert=y().bind(null,"head"),E.domAPI=f(),E.insertStyleElement=N(),C()(T.A,E),T.A&&T.A.locals&&T.A.locals;var B=n(14486);const D=(0,B.A)(m,(function(){var t=this;return(0,t._self._c)("div",{staticClass:"settings-markdown",domProps:{innerHTML:t._s(t.renderMarkdown)}})}),[],!1,null,"7c5c8e59",null).exports,P=(0,s.pM)({__name:"AppDescriptionTab",props:{app:null},setup:t=>({__sfc:!0,mdiTextShort:d.azb,t:i.Tl,NcAppSidebarTab:A.A,NcIconSvgWrapper:l.A,Markdown:D})});var L=n(10321),O={};O.styleTagTransform=I(),O.setAttributes=w(),O.insert=y().bind(null,"head"),O.domAPI=f(),O.insertStyleElement=N(),C()(L.A,O),L.A&&L.A.locals&&L.A.locals;const R=(0,B.A)(P,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return e(a.NcAppSidebarTab,{attrs:{id:"desc",name:a.t("settings","Description"),order:0},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiTextShort}})]},proxy:!0}])},[t._v(" "),e("div",{staticClass:"app-description"},[e(a.Markdown,{attrs:{text:t.app.description,"min-heading":4}})],1)])}),[],!1,null,"fccce5ae",null).exports;var G=n(9518),W=n(4604),U=n(67607),M=n(45834),F=n(96763);const Y={name:"AppDetailsTab",components:{NcAppSidebarTab:A.A,NcButton:G.A,NcDateTime:W.A,NcIconSvgWrapper:l.A,NcSelect:U.A},mixins:[M.A],props:{app:{type:Object,required:!0}},setup:()=>({store:(0,r.T)(),mdiBug:d.xhV,mdiFeatureSearch:d.NZe,mdiStar:d.ZL5,mdiTextBox:d.n1r,mdiTooltipQuestion:d.iNF}),data:()=>({groupCheckedAppsData:!1}),computed:{lastModified(){var t,e,a;return null!==(t=(null!==(e=null===(a=this.app.appstoreData)||void 0===a?void 0:a.releases)&&void 0!==e?e:[]).map((t=>{let{lastModified:e}=t;return Date.parse(e)})).sort().at(0))&&void 0!==t?t:null},appAuthors(){if(F.warn(this.app),!this.app)return"";const t=t=>t["@value"]?t["@value"]:t;return(Array.isArray(this.app.author)?this.app.author.map(t):[t(this.app.author)]).sort(((t,e)=>t.split(" ").at(-1).localeCompare(e.split(" ").at(-1)))).join(", ")},appstoreUrl(){return"https://apps.nextcloud.com/apps/".concat(this.app.id)},externalResources(){const e=[];return this.app.internal||e.push({id:"appstore",href:this.appstoreUrl,label:t("settings","View in store")}),this.app.website&&e.push({id:"website",href:this.app.website,label:t("settings","Visit website")}),this.app.documentation&&(this.app.documentation.user&&e.push({id:"doc-user",href:this.app.documentation.user,label:t("settings","Usage documentation")}),this.app.documentation.admin&&e.push({id:"doc-admin",href:this.app.documentation.admin,label:t("settings","Admin documentation")}),this.app.documentation.developer&&e.push({id:"doc-developer",href:this.app.documentation.developer,label:t("settings","Developer documentation")})),e},appCategories(){return[this.app.category].flat().map((t=>{var e,a;return null!==(e=null===(a=this.store.getCategoryById(t))||void 0===a?void 0:a.displayName)&&void 0!==e?e:t})).join(", ")},rateAppUrl(){return"".concat(this.appstoreUrl,"#comments")},appGroups(){return this.app.groups.map((t=>({id:t,name:t})))},groups(){return this.$store.getters.getGroups.filter((t=>"disabled"!==t.id)).sort(((t,e)=>t.name.localeCompare(e.name)))}},mounted(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0)}};var z=n(8007),$={};$.styleTagTransform=I(),$.setAttributes=w(),$.insert=y().bind(null,"head"),$.domAPI=f(),$.insertStyleElement=N(),C()(z.A,$),z.A&&z.A.locals&&z.A.locals;const V=(0,B.A)(Y,(function(){var t,e,a,n=this,s=n._self._c;return s("NcAppSidebarTab",{attrs:{id:"details",name:n.t("settings","Details"),order:1},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTextBox}})]},proxy:!0}])},[n._v(" "),s("div",{staticClass:"app-details"},[s("div",{staticClass:"app-details__actions"},[n.app.active&&n.canLimitToGroups(n.app)?s("div",{staticClass:"app-details__actions-groups"},[s("input",{directives:[{name:"model",rawName:"v-model",value:n.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{id:"groups_enable_".concat(n.app.id),type:"checkbox"},domProps:{value:n.app.id,checked:Array.isArray(n.groupCheckedAppsData)?n._i(n.groupCheckedAppsData,n.app.id)>-1:n.groupCheckedAppsData},on:{change:[function(t){var e=n.groupCheckedAppsData,a=t.target,s=!!a.checked;if(Array.isArray(e)){var i=n.app.id,o=n._i(e,i);a.checked?o<0&&(n.groupCheckedAppsData=e.concat([i])):o>-1&&(n.groupCheckedAppsData=e.slice(0,o).concat(e.slice(o+1)))}else n.groupCheckedAppsData=s},n.setGroupLimit]}}),n._v(" "),s("label",{attrs:{for:"groups_enable_".concat(n.app.id)}},[n._v(n._s(n.t("settings","Limit to groups")))]),n._v(" "),s("input",{staticClass:"group_select",attrs:{type:"hidden",title:n.t("settings","All"),value:""}}),n._v(" "),s("br"),n._v(" "),s("label",{attrs:{for:"limitToGroups"}},[s("span",[n._v(n._s(n.t("settings","Limit app usage to groups")))])]),n._v(" "),n.isLimitedToGroups(n.app)?s("NcSelect",{attrs:{"input-id":"limitToGroups",options:n.groups,value:n.appGroups,limit:5,label:"name",multiple:!0,"close-on-select":!1},on:{"option:selected":n.addGroupLimitation,"option:deselected":n.removeGroupLimitation,search:n.asyncFindGroup}},[s("span",{attrs:{slot:"noResult"},slot:"noResult"},[n._v(n._s(n.t("settings","No results")))])]):n._e()],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__actions-manage"},[n.app.update?s("input",{staticClass:"update primary",attrs:{type:"button",value:n.t("settings","Update to {version}",{version:n.app.update}),disabled:n.installing||n.isLoading},on:{click:function(t){return n.update(n.app.id)}}}):n._e(),n._v(" "),n.app.canUnInstall?s("input",{staticClass:"uninstall",attrs:{type:"button",value:n.t("settings","Remove"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.remove(n.app.id)}}}):n._e(),n._v(" "),n.app.active?s("input",{staticClass:"enable",attrs:{type:"button",value:n.t("settings","Disable"),disabled:n.installing||n.isLoading},on:{click:function(t){return n.disable(n.app.id)}}}):n._e(),n._v(" "),n.app.active||!n.app.canInstall&&!n.app.isCompatible?n.app.active||n.app.canInstall?n._e():s("input",{staticClass:"enable force",attrs:{title:n.forceEnableButtonTooltip,"aria-label":n.forceEnableButtonTooltip,type:"button",value:n.forceEnableButtonText,disabled:n.installing||n.isLoading},on:{click:function(t){return n.forceEnable(n.app.id)}}}):s("input",{staticClass:"enable primary",attrs:{title:n.enableButtonTooltip,"aria-label":n.enableButtonTooltip,type:"button",value:n.enableButtonText,disabled:!n.app.canInstall||n.installing||n.isLoading},on:{click:function(t){return n.enable(n.app.id)}}})])]),n._v(" "),s("ul",{staticClass:"app-details__dependencies"},[n.app.missingMinOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no minimum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.missingMaxOwnCloudVersion?s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app has no maximum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t\t")]):n._e(),n._v(" "),n.app.canInstall?n._e():s("li",[n._v("\n\t\t\t\t"+n._s(n.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t\t"),s("ul",{staticClass:"missing-dependencies"},n._l(n.app.missingDependencies,(function(t,e){return s("li",{key:e},[n._v("\n\t\t\t\t\t\t"+n._s(t)+"\n\t\t\t\t\t")])})),0)])]),n._v(" "),n.lastModified?s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Latest updated"))+"\n\t\t\t")]),n._v(" "),s("NcDateTime",{attrs:{timestamp:n.lastModified}})],1):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Author"))+"\n\t\t\t")]),n._v(" "),s("p",{staticClass:"app-details__authors"},[n._v("\n\t\t\t\t"+n._s(n.appAuthors)+"\n\t\t\t")])]),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v("\n\t\t\t\t"+n._s(n.t("settings","Categories"))+"\n\t\t\t")]),n._v(" "),s("p",[n._v("\n\t\t\t\t"+n._s(n.appCategories)+"\n\t\t\t")])]),n._v(" "),n.externalResources.length>0?s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Resources")))]),n._v(" "),s("ul",{staticClass:"app-details__documentation",attrs:{"aria-label":n.t("settings","Documentation")}},n._l(n.externalResources,(function(t){return s("li",{key:t.id},[s("a",{staticClass:"appslink",attrs:{href:t.href,target:"_blank",rel:"noreferrer noopener"}},[n._v("\n\t\t\t\t\t\t"+n._s(t.label)+" ↗\n\t\t\t\t\t")])])})),0)]):n._e(),n._v(" "),s("div",{staticClass:"app-details__section"},[s("h4",[n._v(n._s(n.t("settings","Interact")))]),n._v(" "),s("div",{staticClass:"app-details__interact"},[s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(t=n.app.bugs)&&void 0!==t?t:"#","aria-label":n.t("settings","Report a bug"),title:n.t("settings","Report a bug")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiBug}})]},proxy:!0}])}),n._v(" "),s("NcButton",{attrs:{disabled:!n.app.bugs,href:null!==(e=n.app.bugs)&&void 0!==e?e:"#","aria-label":n.t("settings","Request feature"),title:n.t("settings","Request feature")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiFeatureSearch}})]},proxy:!0}])}),n._v(" "),null!==(a=n.app.appstoreData)&&void 0!==a&&a.discussion?s("NcButton",{attrs:{href:n.app.appstoreData.discussion,"aria-label":n.t("settings","Ask questions or discuss"),title:n.t("settings","Ask questions or discuss")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiTooltipQuestion}})]},proxy:!0}],null,!1,1288192462)}):n._e(),n._v(" "),n.app.internal?n._e():s("NcButton",{attrs:{href:n.rateAppUrl,"aria-label":n.t("settings","Rate the app"),title:n.t("settings","Rate")},scopedSlots:n._u([{key:"icon",fn:function(){return[s("NcIconSvgWrapper",{attrs:{path:n.mdiStar}})]},proxy:!0}],null,!1,422450625)})],1)])])])}),[],!1,null,"24864562",null).exports,q=(0,s.pM)({__name:"AppReleasesTab",props:{app:null},setup(t){const e=t,a=(0,s.EW)((()=>{var t,a;return Object.values(null!==(t=null===(a=e.app.releases)||void 0===a||null===(a=a[0])||void 0===a?void 0:a.translations)&&void 0!==t?t:{}).some((t=>{let{changelog:e}=t;return!!e}))}));return{__sfc:!0,props:e,hasChangelog:a,createChangelogFromRelease:t=>{var e,a,n,s;return null!==(e=null!==(a=null===(n=t.translations)||void 0===n||null===(n=n[(0,i.Z0)()])||void 0===n?void 0:n.changelog)&&void 0!==a?a:null===(s=t.translations)||void 0===s||null===(s=s.en)||void 0===s?void 0:s.changelog)&&void 0!==e?e:""},mdiClockFast:d.NWU,t:i.Tl,NcAppSidebarTab:A.A,NcIconSvgWrapper:l.A,Markdown:D}}});var H=n(99992),j={};j.styleTagTransform=I(),j.setAttributes=w(),j.insert=y().bind(null,"head"),j.domAPI=f(),j.insertStyleElement=N(),C()(H.A,j),H.A&&H.A.locals&&H.A.locals;const K=(0,B.A)(q,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.hasChangelog?e(a.NcAppSidebarTab,{attrs:{id:"changelog",name:a.t("settings","Changelog"),order:2},scopedSlots:t._u([{key:"icon",fn:function(){return[e(a.NcIconSvgWrapper,{attrs:{path:a.mdiClockFast,size:24}})]},proxy:!0}],null,!1,1849836872)},[t._v(" "),t._l(t.app.releases,(function(n){return e("div",{key:n.version,staticClass:"app-sidebar-tabs__release"},[e("h2",[t._v(t._s(n.version))]),t._v(" "),e(a.Markdown,{staticClass:"app-sidebar-tabs__release-text",attrs:{text:a.createChangelogFromRelease(n)}})],1)}))],2):t._e()}),[],!1,null,"2261a93d",null).exports;var Q=n(63358),J=n(86438),Z=n(36620);const X=(0,s.pM)({__name:"AppStoreSidebar",setup(t){const e=(0,o.lq)(),a=(0,o.rd)(),n=(0,r.T)(),A=(0,s.EW)((()=>{var t;return null!==(t=e.params.id)&&void 0!==t?t:""})),u=(0,s.EW)((()=>n.getAppById(A.value))),g=(0,s.EW)((()=>{var t;return(null===(t=u.value.appstoreData)||void 0===t?void 0:t.ratingNumOverall)>5})),v=(0,s.EW)((()=>{var t,e,a;return(null===(t=u.value.appstoreData)||void 0===t?void 0:t.ratingNumRecent)>5?u.value.appstoreData.ratingRecent:null!==(e=null===(a=u.value.appstoreData)||void 0===a?void 0:a.ratingOverall)&&void 0!==e?e:.5})),m=(0,s.EW)((()=>null!==u.value)),{appIcon:h}=function(t){const e=(0,s.KR)(null),a=(0,s.EW)((()=>{var e,a,n;const s=null!==(e=[null!==(a=null===(n=t.value)||void 0===n?void 0:n.category)&&void 0!==a?a:[]].flat().map((t=>J.A[t])).filter((t=>!!t)).at(0))&&void 0!==e?e:d.CZ3;return s?'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="'.concat(s,'" /></svg>'):null}));return(0,s.nT)((async()=>{var n;if(null!==(n=t.value)&&void 0!==n&&n.preview){e.value=null;try{const a=await window.fetch(t.value.preview),n=await a.blob(),s=await n.text();e.value=s.replaceAll(/fill="#(fff|ffffff)([a-z0-9]{1,2})?"/gi,'fill="currentColor"')}catch(t){e.value=a.value,Z.A.error("Could not load app icon",{error:t})}}else e.value=a.value})),{appIcon:e}}(u),C=(0,s.EW)((()=>u.value?(0,i.Tl)("settings","Version {version}, {license}-licensed",{version:u.value.version,license:u.value.licence.toString().toUpperCase()}):"")),b=(0,s.KR)("details");(0,s.wB)([u],(()=>{b.value="details"}));const f=(0,s.KR)(!1),_=(0,s.EW)((()=>{var t;return(null===(t=u.value)||void 0===t?void 0:t.screenshot)&&f.value})),y=()=>{var t,e;if(null!==(t=u.value)&&void 0!==t&&t.releases&&null!==(e=u.value)&&void 0!==e&&e.screenshot){const t=new Image;t.onload=()=>{f.value=!0},t.src=u.value.screenshot}};return(0,s.wB)([u],y),(0,s.sV)(y),{__sfc:!0,route:e,router:a,store:n,appId:A,app:u,hasRating:g,rating:v,showSidebar:m,appIcon:h,licenseText:C,activeTab:b,hideAppDetails:()=>{a.push({name:"apps-category",params:{category:e.params.category}})},screenshotLoaded:f,hasScreenshot:_,loadScreenshot:y,NcAppSidebar:p.N,NcIconSvgWrapper:l.A,AppScore:c.A,AppDescriptionTab:R,AppDetailsTab:V,AppReleasesTab:K,AppLevelBadge:Q.A}}});var tt=n(47275),et={};et.styleTagTransform=I(),et.setAttributes=w(),et.insert=y().bind(null,"head"),et.domAPI=f(),et.insertStyleElement=N(),C()(tt.A,et),tt.A&&tt.A.locals&&tt.A.locals;const at=(0,B.A)(X,(function(){var t=this,e=t._self._c,a=t._self._setupProxy;return a.showSidebar?e(a.NcAppSidebar,{staticClass:"app-sidebar",class:{"app-sidebar--with-screenshot":a.hasScreenshot},attrs:{active:a.activeTab,background:a.hasScreenshot?a.app.screenshot:void 0,compact:!a.hasScreenshot,name:a.app.name,title:a.app.name,subname:a.licenseText,subtitle:a.licenseText},on:{"update:active":function(t){a.activeTab=t},close:a.hideAppDetails},scopedSlots:t._u([a.hasScreenshot?null:{key:"header",fn:function(){var t;return[e(a.NcIconSvgWrapper,{staticClass:"app-sidebar__fallback-icon",attrs:{svg:null!==(t=a.appIcon)&&void 0!==t?t:"",size:64}})]},proxy:!0},{key:"description",fn:function(){return[e("div",{staticClass:"app-sidebar__badges"},[e(a.AppLevelBadge,{attrs:{level:a.app.level}}),t._v(" "),a.hasRating?e(a.AppScore,{attrs:{score:a.rating}}):t._e()],1)]},proxy:!0}],null,!0)},[t._v(" "),t._v(" "),e(a.AppDescriptionTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppDetailsTab,{attrs:{app:a.app}}),t._v(" "),e(a.AppReleasesTab,{attrs:{app:a.app}})],1):t._e()}),[],!1,null,"31ecb666",null).exports}}]); +//# sourceMappingURL=settings-apps-view-4529.js.map?v=114316009107c5c2ca02
\ No newline at end of file diff --git a/dist/settings-apps-view-4529.js.map b/dist/settings-apps-view-4529.js.map index 4f2a8f714de..543acd155fd 100644 --- a/dist/settings-apps-view-4529.js.map +++ b/dist/settings-apps-view-4529.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-apps-view-4529.js?v=bb61b58e95ee6934e7d9","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/constants/AppsConstants.js","webpack:///nextcloud/apps/settings/src/service/rebuild-navigation.js","webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/constants/AppstoreCategoryIcons.ts","webpack:///nextcloud/apps/settings/src/store/apps-store.ts","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=style&index=0&id=24d746cb&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=73d4f990&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=style&index=0&id=59b4cf6b&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=style&index=0&id=9da99928&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=style&index=0&id=ec35f1f8&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=style&index=0&id=54d629ed&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?d837","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?74e8","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?4d91","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?26fd","webpack:///nextcloud/apps/settings/src/views/AppStore.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/SvgFilterMixin.vue?5bcd","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?0391","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?a9a1","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?af1e","webpack:///nextcloud/node_modules/p-limit/index.js","webpack:///nextcloud/apps/settings/src/components/AppList.vue","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList.vue?1bf2","webpack://nextcloud/./apps/settings/src/components/AppList.vue?8acf","webpack://nextcloud/./apps/settings/src/components/AppList.vue?ee21","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue","webpack:///nextcloud/apps/settings/src/utils/appDiscoverTypeParser.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?677b","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?0759","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?9deb","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?47b2","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?8376","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?6e6f","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?c49c","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?26cf","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?d299","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?4cfb","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?311d","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?9ed4","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?ef45","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?d4df","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?6f6f","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?d492","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/composables/useAppIcon.ts","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?b22e","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?5373"],"sourcesContent":["/**\n * @copyright 2022, Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @author Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/** Enum of verification constants, according to Apps */\nexport const APPS_SECTION_ENUM = Object.freeze({\n\tdiscover: t('settings', 'Discover'),\n\tinstalled: t('settings', 'Your apps'),\n\tenabled: t('settings', 'Active apps'),\n\tdisabled: t('settings', 'Disabled apps'),\n\tupdates: t('settings', 'Updates'),\n\t'app-bundles': t('settings', 'App bundles'),\n\tfeatured: t('settings', 'Featured apps'),\n\tsupported: t('settings', 'Supported apps'), // From subscription\n})\n","import axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { emit } from '@nextcloud/event-bus'\n\nexport default () => {\n\treturn axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')\n\t\t.then(({ data }) => {\n\t\t\tif (data.ocs.meta.statuscode !== 200) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\temit('nextcloud:app-menu.refresh', { apps: data.ocs.data })\n\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t})\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport rebuildNavigation from '../service/rebuild-navigation.js'\n\nexport default {\n\tcomputed: {\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tinstalling() {\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable')\n\t\t},\n\t\tforceEnableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Allow untested app')\n\t\t\t}\n\t\t\treturn t('settings', 'Allow untested app')\n\t\t},\n\t\tenableButtonTooltip() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t\tforceEnableButtonTooltip() {\n\t\t\tconst base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.')\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn base + ' ' + t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn base\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.app && this.app.groups && this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasyncFindGroup(query) {\n\t\t\treturn this.$store.dispatch('getGroups', { search: query, limit: 5, offset: 0 })\n\t\t},\n\t\tisLimitedToGroups(app) {\n\t\t\tif (this.app.groups.length || this.groupCheckedAppsData) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (!this.groupCheckedAppsData) {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: [] })\n\t\t\t}\n\t\t},\n\t\tcanLimitToGroups(app) {\n\t\t\tif ((app.types && app.types.includes('filesystem'))\n\t\t\t\t\t|| app.types.includes('prelogin')\n\t\t\t\t\t|| app.types.includes('authentication')\n\t\t\t\t\t|| app.types.includes('logging')\n\t\t\t\t\t|| app.types.includes('prevent_group_restriction')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\taddGroupLimitation(groupArray) {\n\t\t\tconst group = groupArray.pop()\n\t\t\tconst groups = this.app.groups.concat([]).concat([group.id])\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups })\n\t\t},\n\t\tremoveGroupLimitation(group) {\n\t\t\tconst currentGroups = this.app.groups.concat([])\n\t\t\tconst index = currentGroups.indexOf(group.id)\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentGroups.splice(index, 1)\n\t\t\t}\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })\n\t\t},\n\t\tforceEnable(appId) {\n\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tenable(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tdisable(appId) {\n\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tremove(appId) {\n\t\t\tthis.$store.dispatch('uninstallApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tinstall(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tupdate(appId) {\n\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { mdiAccount, mdiAccountMultiple, mdiArchive, mdiCheck, mdiClipboardFlow, mdiClose, mdiCog, mdiControllerClassic, mdiDownload, mdiFileDocumentEdit, mdiFolder, mdiKey, mdiMagnify, mdiMonitorEye, mdiMultimedia, mdiOfficeBuilding, mdiOpenInApp, mdiSecurity, mdiStar, mdiStarCircleOutline, mdiStarShooting, mdiTools, mdiViewDashboard, } from '@mdi/js';\n/**\n * SVG paths used for appstore category icons\n */\nexport default Object.freeze({\n // system special categories\n discover: mdiStarCircleOutline,\n installed: mdiAccount,\n enabled: mdiCheck,\n disabled: mdiClose,\n bundles: mdiArchive,\n supported: mdiStarShooting,\n featured: mdiStar,\n updates: mdiDownload,\n // generic categories\n auth: mdiKey,\n customization: mdiCog,\n dashboard: mdiViewDashboard,\n files: mdiFolder,\n games: mdiControllerClassic,\n integration: mdiOpenInApp,\n monitoring: mdiMonitorEye,\n multimedia: mdiMultimedia,\n office: mdiFileDocumentEdit,\n organization: mdiOfficeBuilding,\n search: mdiMagnify,\n security: mdiSecurity,\n social: mdiAccountMultiple,\n tools: mdiTools,\n workflow: mdiClipboardFlow,\n});\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { showError } from '@nextcloud/dialogs';\nimport { loadState } from '@nextcloud/initial-state';\nimport { translate as t } from '@nextcloud/l10n';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport axios from '@nextcloud/axios';\nimport logger from '../logger';\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts';\nconst showApiError = () => showError(t('settings', 'An error occurred during the request. Unable to proceed.'));\nexport const useAppsStore = defineStore('settings-apps', {\n state: () => ({\n apps: [],\n categories: [],\n updateCount: loadState('settings', 'appstoreUpdateCount', 0),\n loading: {\n apps: false,\n categories: false,\n },\n loadingList: false,\n gettingCategoriesPromise: null,\n }),\n actions: {\n async loadCategories(force = false) {\n if (this.categories.length > 0 && !force) {\n return;\n }\n try {\n this.loading.categories = true;\n const { data: categories } = await axios.get(generateUrl('settings/apps/categories'));\n for (const category of categories) {\n category.icon = APPSTORE_CATEGORY_ICONS[category.id] ?? '';\n }\n this.$patch({\n categories,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.categories = false;\n }\n },\n async loadApps(force = false) {\n if (this.apps.length > 0 && !force) {\n return;\n }\n try {\n this.loading.apps = true;\n const { data } = await axios.get(generateUrl('settings/apps/list'));\n this.$patch({\n apps: data.apps,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.apps = false;\n }\n },\n getCategoryById(categoryId) {\n return this.categories.find(({ id }) => id === categoryId) ?? null;\n },\n getAppById(appId) {\n return this.apps.find(({ id }) => id === appId) ?? null;\n },\n },\n});\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-bundle-heading[data-v-24d746cb]{display:flex;align-items:center;margin:20px 10px 20px 0}.app-bundle-header[data-v-24d746cb]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}.apps-store-view[data-v-24d746cb]{display:flex;flex-wrap:wrap}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList.vue\"],\"names\":[],\"mappings\":\"AACA,qCACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAED,oCACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAED,kCACC,YAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.app-bundle-heading {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmargin: 20px 10px 20px 0;\\n}\\n.app-bundle-header {\\n\\tmargin: 0 10px 0 50px;\\n\\tfont-weight: bold;\\n\\tfont-size: 20px;\\n\\tline-height: 30px;\\n\\tcolor: var(--color-text-light);\\n}\\n.apps-store-view {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-icon[data-v-73d4f990]{filter:var(--background-invert-if-bright)}.app-image img[data-v-73d4f990]{width:100%}.app-name--link[data-v-73d4f990]::after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppItem.vue\"],\"names\":[],\"mappings\":\"AACA,2BACC,yCAAA,CAGD,gCACC,UAAA,CAGD,wCACE,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n.app-icon {\\n\\tfilter: var(--background-invert-if-bright);\\n}\\n\\n.app-image img {\\n\\twidth: 100%;\\n}\\n\\n.app-name--link::after {\\n content: '';\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA\",\"sourcesContent\":[\"\\n.app-level-badge {\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tbackground-color: transparent;\\n\\tborder: 1px solid var(--color-text-maxcontrast);\\n\\tborder-radius: var(--border-radius);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tgap: 6px;\\n\\tpadding: 3px 6px;\\n\\twidth: fit-content;\\n\\n\\t&--supported {\\n\\t\\tborder-color: var(--color-success);\\n\\t\\tcolor: var(--color-success);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover[data-v-262838ca]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA\",\"sourcesContent\":[\"\\n.app-discover {\\n\\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\\n\\tmargin-inline: auto;\\n\\tpadding-inline: 54px;\\n\\t/* Padding required to make last element not bound to the bottom */\\n\\tpadding-block-end: var(--default-clickable-area, 44px);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: var(--default-clickable-area, 44px);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-description[data-v-fccce5ae]{padding:12px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA\",\"sourcesContent\":[\"\\n.app-description {\\n\\tpadding: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-details[data-v-59b4cf6b]{padding:20px}.app-details__actions-manage[data-v-59b4cf6b]{display:flex}.app-details__actions-manage input[data-v-59b4cf6b]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-59b4cf6b]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-59b4cf6b]{margin-top:15px}.app-details__section h4[data-v-59b4cf6b]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-59b4cf6b]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-59b4cf6b]{text-decoration:underline}.app-details__documentation li[data-v-59b4cf6b]{padding-inline-start:20px}.app-details__documentation li[data-v-59b4cf6b]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:\"\";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-59b4cf6b]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-59b4cf6b]:hover,.force[data-v-59b4cf6b]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue\"],\"names\":[],\"mappings\":\"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA\",\"sourcesContent\":[\"\\n.app-details {\\n\\tpadding: 20px;\\n\\n\\t&__actions {\\n\\t\\t// app management\\n\\t\\t&-manage {\\n\\t\\t\\t// if too many, shrink them and ellipsis\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tinput {\\n\\t\\t\\t\\tflex: 0 1 auto;\\n\\t\\t\\t\\tmin-width: 0;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t&__authors {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__section {\\n\\t\\tmargin-top: 15px;\\n\\n\\t\\th4 {\\n\\t\\t\\tfont-size: 16px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin-block-end: 5px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__interact {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__documentation {\\n\\t\\ta {\\n\\t\\t\\ttext-decoration: underline;\\n\\t\\t}\\n\\t\\tli {\\n\\t\\t\\tpadding-inline-start: 20px;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\twidth: 5px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 100%;\\n\\t\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t\\t\\tcontent: \\\"\\\";\\n\\t\\t\\t\\tfloat: inline-start;\\n\\t\\t\\t\\tmargin-inline-start: -13px;\\n\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\ttop: 10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n.force {\\n\\tcolor: var(--color-error);\\n\\tborder-color: var(--color-error);\\n\\tbackground: var(--color-main-background);\\n}\\n.force:hover,\\n.force:active {\\n\\tcolor: var(--color-main-background);\\n\\tborder-color: var(--color-error) !important;\\n\\tbackground: var(--color-error);\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-sidebar-tabs__release h2[data-v-9da99928]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-9da99928] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-9da99928] h4{font-size:17px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue\"],\"names\":[],\"mappings\":\"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA\",\"sourcesContent\":[\"\\n.app-sidebar-tabs__release {\\n\\th2 {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\n\\t&-text {\\n\\t\\t// Overwrite changelog heading styles\\n\\t\\t:deep(h3) {\\n\\t\\t\\tfont-size: 20px;\\n\\t\\t}\\n\\t\\t:deep(h4) {\\n\\t\\t\\tfont-size: 17px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Markdown.vue\"],\"names\":[],\"mappings\":\"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.settings-markdown::v-deep {\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n\\tfont-weight: 600;\\n\\tline-height: 120%;\\n\\tmargin-top: 24px;\\n\\tmargin-bottom: 12px;\\n\\tcolor: var(--color-main-text);\\n}\\n\\nh1 {\\n\\tfont-size: 36px;\\n\\tmargin-top: 48px;\\n}\\n\\nh2 {\\n\\tfont-size: 28px;\\n\\tmargin-top: 48px;\\n}\\n\\nh3 {\\n\\tfont-size: 24px;\\n}\\n\\nh4 {\\n\\tfont-size: 21px;\\n}\\n\\nh5 {\\n\\tfont-size: 17px;\\n}\\n\\nh6 {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\npre {\\n\\twhite-space: pre;\\n\\toverflow-x: auto;\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 1em 1.3em;\\n\\tmargin-bottom: 1em;\\n}\\n\\np code {\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: .1em .3em;\\n}\\n\\nli {\\n\\tposition: relative;\\n}\\n\\nul, ol {\\n\\tpadding-left: 10px;\\n\\tmargin-left: 10px;\\n}\\n\\nul li {\\n\\tlist-style-type: disc;\\n}\\n\\nul > li > ul > li {\\n\\tlist-style-type: circle;\\n}\\n\\nul > li > ul > li ul li {\\n\\tlist-style-type: square;\\n}\\n\\nblockquote {\\n\\tpadding-left: 1em;\\n\\tborder-left: 4px solid var(--color-primary-element);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\n\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-sidebar--with-screenshot[data-v-ec35f1f8] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-ec35f1f8]{width:100%;height:100%}.app-sidebar__badges[data-v-ec35f1f8]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-ec35f1f8]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreSidebar.vue\"],\"names\":[],\"mappings\":\"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA\",\"sourcesContent\":[\"\\n.app-sidebar {\\n\\t// If a screenshot is available it should cover the whole figure\\n\\t&--with-screenshot {\\n\\t\\t:deep(.app-sidebar-header__figure) {\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t}\\n\\t}\\n\\n\\t&__fallback-icon {\\n\\t\\t// both 100% to center the icon\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t}\\n\\n\\t&__badges {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__version {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\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.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppScore.vue\"],\"names\":[],\"mappings\":\";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\\n -\\n - @license AGPL-3.0-or-later\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<span role=\\\"img\\\"\\n\\t\\t:aria-label=\\\"title\\\"\\n\\t\\t:title=\\\"title\\\"\\n\\t\\tclass=\\\"app-score__wrapper\\\">\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in fullStars\\\"\\n\\t\\t\\t:key=\\\"`full-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStar\\\"\\n\\t\\t\\tinline />\\n\\t\\t<NcIconSvgWrapper v-if=\\\"hasHalfStar\\\" :path=\\\"mdiStarHalfFull\\\" inline />\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in emptyStars\\\"\\n\\t\\t\\t:key=\\\"`empty-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStarOutline\\\"\\n\\t\\t\\tinline />\\n\\t</span>\\n</template>\\n<script lang=\\\"ts\\\">\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from '@mdi/js'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { defineComponent } from 'vue'\\n\\nexport default defineComponent({\\n\\tname: 'AppScore',\\n\\tcomponents: {\\n\\t\\tNcIconSvgWrapper,\\n\\t},\\n\\tprops: {\\n\\t\\tscore: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\tsetup() {\\n\\t\\treturn {\\n\\t\\t\\tmdiStar,\\n\\t\\t\\tmdiStarHalfFull,\\n\\t\\t\\tmdiStarOutline,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\ttitle() {\\n\\t\\t\\tconst appScore = (this.score * 5).toFixed(1)\\n\\t\\t\\treturn t('settings', 'Community rating: {score}/5', { score: appScore })\\n\\t\\t},\\n\\t\\tfullStars() {\\n\\t\\t\\treturn Math.floor(this.score * 5 + 0.25)\\n\\t\\t},\\n\\t\\temptyStars() {\\n\\t\\t\\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\\n\\t\\t},\\n\\t\\thasHalfStar() {\\n\\t\\t\\treturn (this.fullStars + this.emptyStars) < 5\\n\\t\\t},\\n\\t},\\n})\\n</script>\\n<style scoped>\\n.app-score__wrapper {\\n\\tdisplay: inline-flex;\\n\\tcolor: var(--color-favorite, #a08b00);\\n\\n\\t> * {\\n\\t\\tvertical-align: text-bottom;\\n\\t}\\n}\\n</style>\\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.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStore.vue\"],\"names\":[],\"mappings\":\";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA\",\"sourcesContent\":[\"<!--\\n\\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n\\t-\\n\\t- @author Julius Härtl <jus@bitgrid.net>\\n\\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\\n\\t-\\n\\t- @license AGPL-3.0-or-later\\n\\t-\\n\\t- This program is free software: you can redistribute it and/or modify\\n\\t- it under the terms of the GNU Affero General Public License as\\n\\t- published by the Free Software Foundation, either version 3 of the\\n\\t- License, or (at your option) any later version.\\n\\t-\\n\\t- This program is distributed in the hope that it will be useful,\\n\\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\\n\\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n\\t- GNU Affero General Public License for more details.\\n\\t-\\n\\t- You should have received a copy of the GNU Affero General Public License\\n\\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\\n\\t-\\n\\t-->\\n\\n<template>\\n\\t<!-- Apps list -->\\n\\t<NcAppContent class=\\\"app-settings-content\\\"\\n\\t\\t:page-heading=\\\"appStoreLabel\\\">\\n\\t\\t<h2 class=\\\"app-settings-content__label\\\" v-text=\\\"viewLabel\\\" />\\n\\n\\t\\t<AppStoreDiscoverSection v-if=\\\"currentCategory === 'discover'\\\" />\\n\\t\\t<NcEmptyContent v-else-if=\\\"isLoading\\\"\\n\\t\\t\\tclass=\\\"empty-content__loading\\\"\\n\\t\\t\\t:name=\\\"t('settings', 'Loading app list')\\\">\\n\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"64\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</NcEmptyContent>\\n\\t\\t<AppList v-else :category=\\\"currentCategory\\\" />\\n\\t</NcAppContent>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\\nimport { useRoute } from 'vue-router/composables'\\n\\nimport { useAppsStore } from '../store/apps-store'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\n\\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport AppList from '../components/AppList.vue'\\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\\n\\nconst route = useRoute()\\nconst store = useAppsStore()\\n\\n/**\\n * ID of the current active category, default is `discover`\\n */\\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\\n\\nconst appStoreLabel = t('settings', 'App Store')\\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\\n\\nwatchEffect(() => {\\n\\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\\n})\\n\\n// TODO this part should be migrated to pinia\\nconst instance = getCurrentInstance()\\n/** Is the app list loading */\\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\\nonBeforeMount(() => {\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getAllApps')\\n})\\n</script>\\n\\n<style scoped>\\n.empty-content__loading {\\n\\theight: 100%;\\n}\\n\\n.app-settings-content__label {\\n\\tmargin-block-start: var(--app-navigation-padding);\\n\\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\\n\\tmin-height: var(--default-clickable-area);\\n\\tline-height: var(--default-clickable-area);\\n\\tvertical-align: center;\\n}\\n</style>\\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/* The categories-loading indicator */\n.categories--loading[data-v-54d629ed] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreNavigation.vue\"],\"names\":[],\"mappings\":\";AAwIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<!-- Categories & filters -->\\n\\t<NcAppNavigation :aria-label=\\\"t('settings', 'Apps')\\\">\\n\\t\\t<template #list>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-discover\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps' }\\\"\\n\\t\\t\\t\\t:exact=\\\"true\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.discover\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.discover\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-installed\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'installed'} }\\\"\\n\\t\\t\\t\\t:exact=\\\"true\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.installed\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.installed\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-enabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'enabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.enabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.enabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-disabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'disabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.disabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.disabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem v-if=\\\"updateCount > 0\\\"\\n\\t\\t\\t\\tid=\\\"app-category-updates\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'updates' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.updates\\\">\\n\\t\\t\\t\\t<template #counter>\\n\\t\\t\\t\\t\\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.updates\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-your-bundles\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'app-bundles' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM['app-bundles']\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.bundles\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t<NcAppNavigationSpacer />\\n\\n\\t\\t\\t<!-- App store categories -->\\n\\t\\t\\t<li v-if=\\\"appstoreEnabled && categoriesLoading\\\" class=\\\"categories--loading\\\">\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"20\\\" :aria-label=\\\"t('settings', 'Loading categories')\\\" />\\n\\t\\t\\t</li>\\n\\t\\t\\t<template v-else-if=\\\"appstoreEnabled && !categoriesLoading\\\">\\n\\t\\t\\t\\t<NcAppNavigationItem v-if=\\\"isSubscribed\\\"\\n\\t\\t\\t\\t\\tid=\\\"app-category-supported\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'supported' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.supported\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.supported\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-featured\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'featured' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.featured\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.featured\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t\\t<NcAppNavigationItem v-for=\\\"category in categories\\\"\\n\\t\\t\\t\\t\\t:id=\\\"`app-category-${category.id}`\\\"\\n\\t\\t\\t\\t\\t:key=\\\"category.id\\\"\\n\\t\\t\\t\\t\\t:name=\\\"category.displayName\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{\\n\\t\\t\\t\\t\\t\\tname: 'apps-category',\\n\\t\\t\\t\\t\\t\\tparams: { category: category.id },\\n\\t\\t\\t\\t\\t}\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"category.icon\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t</template>\\n\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-developer-docs\\\"\\n\\t\\t\\t\\t:name=\\\"t('settings', 'Developer documentation ↗')\\\"\\n\\t\\t\\t\\t:href=\\\"developerDocsUrl\\\" />\\n\\t\\t</template>\\n\\t</NcAppNavigation>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { loadState } from '@nextcloud/initial-state'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, onBeforeMount } from 'vue'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\nimport { useAppsStore } from '../store/apps-store'\\n\\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\\nimport NcAppNavigationSpacer from '@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js'\\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\n\\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts'\\n\\nconst updateCount = loadState<number>('settings', 'appstoreUpdateCount', 0)\\nconst appstoreEnabled = loadState<boolean>('settings', 'appstoreEnabled', true)\\nconst developerDocsUrl = loadState<string>('settings', 'appstoreDeveloperDocs', '')\\n\\nconst store = useAppsStore()\\nconst categories = computed(() => store.categories)\\nconst categoriesLoading = computed(() => store.loading.categories)\\n\\n/**\\n * Check if the current instance has a support subscription from the Nextcloud GmbH\\n *\\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\\n */\\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\\n\\n// load categories when component is mounted\\nonBeforeMount(() => {\\n\\tstore.loadCategories()\\n\\tstore.loadApps()\\n})\\n</script>\\n\\n<style scoped>\\n/* The categories-loading indicator */\\n.categories--loading {\\n\\tflex: 1;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.isSupported || _setup.isFeatured)?_c('span',{staticClass:\"app-level-badge\",class:{ 'app-level-badge--supported': _setup.isSupported },attrs:{\"title\":_setup.badgeTitle}},[_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.badgeIcon,\"size\":20,\"inline\":\"\"}}),_vm._v(\"\\n\\t\"+_vm._s(_setup.badgeText)+\"\\n\")],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppLevelBadge.vue?vue&type=template&id=3590dbeb&scoped=true\"\nimport script from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3590dbeb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',{staticClass:\"app-score__wrapper\",attrs:{\"role\":\"img\",\"aria-label\":_vm.title,\"title\":_vm.title}},[_vm._l((_vm.fullStars),function(index){return _c('NcIconSvgWrapper',{key:`full-star-${index}`,attrs:{\"path\":_vm.mdiStar,\"inline\":\"\"}})}),_vm._v(\" \"),(_vm.hasHalfStar)?_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStarHalfFull,\"inline\":\"\"}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.emptyStars),function(index){return _c('NcIconSvgWrapper',{key:`empty-star-${index}`,attrs:{\"path\":_vm.mdiStarOutline,\"inline\":\"\"}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=7d015114&scoped=true\"\nimport script from \"./AppScore.vue?vue&type=script&lang=ts\"\nexport * from \"./AppScore.vue?vue&type=script&lang=ts\"\nimport style0 from \"./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7d015114\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppContent,{staticClass:\"app-settings-content\",attrs:{\"page-heading\":_setup.appStoreLabel}},[_c('h2',{staticClass:\"app-settings-content__label\",domProps:{\"textContent\":_vm._s(_setup.viewLabel)}}),_vm._v(\" \"),(_setup.currentCategory === 'discover')?_c(_setup.AppStoreDiscoverSection):(_setup.isLoading)?_c(_setup.NcEmptyContent,{staticClass:\"empty-content__loading\",attrs:{\"name\":_setup.t('settings', 'Loading app list')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_c(_setup.AppList,{attrs:{\"category\":_setup.currentCategory}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'SvgFilterMixin',\n\tdata() {\n\t\treturn {\n\t\t\tfilterId: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tfilterUrl() {\n\t\t\treturn `url(#${this.filterId})`\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.filterId = 'invertIconApps-' + Math.random().toString(36).substring(2)\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\nexport * from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<component :is=\"listView ? `tr` : `li`\"\n\t\tclass=\"section\"\n\t\t:class=\"{ selected: isSelected }\">\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-image app-image-icon\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-icon`)\">\n\t\t\t<div v-if=\"(listView && !app.preview) || (!listView && !screenshotLoaded)\" class=\"icon-settings-dark\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\tviewBox=\"0 0 32 32\">\n\t\t\t\t<image x=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"32\"\n\t\t\t\t\theight=\"32\"\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin meet\"\n\t\t\t\t\t:xlink:href=\"app.preview\"\n\t\t\t\t\tclass=\"app-icon\" />\n\t\t\t</svg>\n\n\t\t\t<img v-if=\"!listView && app.screenshot && screenshotLoaded\" :src=\"app.screenshot\" alt=\"\">\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-name\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-name`)\">\n\t\t\t<router-link class=\"app-name--link\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcategory: category,\n\t\t\t\t\t\tid: app.id\n\t\t\t\t\t},\n\t\t\t\t}\"\n\t\t\t\t:aria-label=\"t('settings', 'Show details for {appName} app', { appName:app.name })\">\n\t\t\t\t{{ app.name }}\n\t\t\t</router-link>\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"!listView\"\n\t\t\tclass=\"app-summary\"\n\t\t\t:headers=\"getDataItemHeaders(`app-version`)\">\n\t\t\t{{ app.summary }}\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"listView\"\n\t\t\tclass=\"app-version\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-version`)\">\n\t\t\t<span v-if=\"app.version\">{{ app.version }}</span>\n\t\t\t<span v-else-if=\"app.appstoreData.releases[0].version\">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</component>\n\n\t\t<component :is=\"dataItemTag\" :headers=\"getDataItemHeaders(`app-table-col-level`)\">\n\t\t\t<AppLevelBadge :level=\"app.level\" />\n\t\t\t<AppScore v-if=\"hasRating && !listView\" :score=\"app.score\" />\n\t\t</component>\n\t\t<component :is=\"dataItemTag\" :headers=\"getDataItemHeaders(`app-table-col-actions`)\" class=\"actions\">\n\t\t\t<div v-if=\"app.error\" class=\"warning\">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if=\"isLoading\" class=\"icon icon-loading-small\" />\n\t\t\t<NcButton v-if=\"app.update\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"update(app.id)\">\n\t\t\t\t{{ t('settings', 'Update to {update}', {update:app.update}) }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.canUnInstall\"\n\t\t\t\tclass=\"uninstall\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"remove(app.id)\">\n\t\t\t\t{{ t('settings', 'Remove') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.active\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t\t{{ t('settings','Disable') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t@click.stop=\"enable(app.id)\">\n\t\t\t\t{{ enableButtonText }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-else-if=\"!app.active\"\n\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t\t\t{{ forceEnableButtonText }}\n\t\t\t</NcButton>\n\t\t</component>\n\t</component>\n</template>\n\n<script>\nimport AppScore from './AppScore.vue'\nimport AppLevelBadge from './AppLevelBadge.vue'\nimport AppManagement from '../../mixins/AppManagement.js'\nimport SvgFilterMixin from '../SvgFilterMixin.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppLevelBadge,\n\t\tAppScore,\n\t\tNcButton,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tuseBundleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\theaders: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t\tdataItemTag() {\n\t\t\treturn this.listView ? 'td' : 'div'\n\t\t},\n\t},\n\twatch: {\n\t\t'$route.params.id'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = () => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\n\t\tgetDataItemHeaders(columnName) {\n\t\t\treturn this.useBundleView ? [this.headers, columnName].join(' ') : null\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image img {\n\twidth: 100%;\n}\n\n.app-name--link::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=73d4f990&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=73d4f990&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=73d4f990&scoped=true\"\nimport script from \"./AppItem.vue?vue&type=script&lang=js\"\nexport * from \"./AppItem.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppItem.vue?vue&type=style&index=0&id=73d4f990&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73d4f990\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.listView ? `tr` : `li`,{tag:\"component\",staticClass:\"section\",class:{ selected: _vm.isSelected }},[_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-image app-image-icon\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-icon`)}},[((_vm.listView && !_vm.app.preview) || (!_vm.listView && !_vm.screenshotLoaded))?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.listView && _vm.app.preview)?_c('svg',{attrs:{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"0 0 32 32\"}},[_c('image',{staticClass:\"app-icon\",attrs:{\"x\":\"0\",\"y\":\"0\",\"width\":\"32\",\"height\":\"32\",\"preserveAspectRatio\":\"xMinYMin meet\",\"xlink:href\":_vm.app.preview}})]):_vm._e(),_vm._v(\" \"),(!_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded)?_c('img',{attrs:{\"src\":_vm.app.screenshot,\"alt\":\"\"}}):_vm._e()]),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-name\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-name`)}},[_c('router-link',{staticClass:\"app-name--link\",attrs:{\"to\":{\n\t\t\t\tname: 'apps-details',\n\t\t\t\tparams: {\n\t\t\t\t\tcategory: _vm.category,\n\t\t\t\t\tid: _vm.app.id\n\t\t\t\t},\n\t\t\t},\"aria-label\":_vm.t('settings', 'Show details for {appName} app', { appName:_vm.app.name })}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.name)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(!_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-summary\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-version`)}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.summary)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-version\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-version`)}},[(_vm.app.version)?_c('span',[_vm._v(_vm._s(_vm.app.version))]):(_vm.app.appstoreData.releases[0].version)?_c('span',[_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-level`)}},[_c('AppLevelBadge',{attrs:{\"level\":_vm.app.level}}),_vm._v(\" \"),(_vm.hasRating && !_vm.listView)?_c('AppScore',{attrs:{\"score\":_vm.app.score}}):_vm._e()],1),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"actions\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-actions`)}},[(_vm.app.error)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.error)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isLoading)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('NcButton',{attrs:{\"type\":\"primary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.update(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Update to {update}', {update:_vm.app.update}))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('NcButton',{staticClass:\"uninstall\",attrs:{\"type\":\"tertiary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.remove(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('NcButton',{attrs:{\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings','Disable'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('NcButton',{attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"primary\",\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.enable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.enableButtonText)+\"\\n\\t\\t\")]):(!_vm.app.active)?_c('NcButton',{attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"secondary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.forceEnable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.forceEnableButtonText)+\"\\n\\t\\t\")]):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content-inner\">\n\t\t<div id=\"apps-list\" class=\"apps-list\" :class=\"{installed: (useBundleView || useListView), store: useAppStoreView}\">\n\t\t\t<template v-if=\"useListView\">\n\t\t\t\t<div v-if=\"showUpdateAll\" class=\"toolbar\">\n\t\t\t\t\t{{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }}\n\t\t\t\t\t<NcButton v-if=\"showUpdateAll\"\n\t\t\t\t\t\tid=\"app-list-update-all\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t@click=\"updateAll\">\n\t\t\t\t\t\t{{ n('settings', 'Update', 'Update all', counter) }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"!showUpdateAll\" class=\"toolbar\">\n\t\t\t\t\t{{ t('settings', 'All apps are up-to-date.') }}\n\t\t\t\t</div>\n\n\t\t\t\t<transition-group name=\"app-list\" tag=\"table\" class=\"apps-list-container\">\n\t\t\t\t\t<tr key=\"app-list-view-header\" class=\"apps-header\">\n\t\t\t\t\t\t<th class=\"app-image\">\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th class=\"app-name\">\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th class=\"app-version\">\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th class=\"app-level\">\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th class=\"actions\">\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</transition-group>\n\t\t\t</template>\n\n\t\t\t<table v-if=\"useBundleView\"\n\t\t\t\tclass=\"apps-list-container\">\n\t\t\t\t<tr key=\"app-list-view-header\" class=\"apps-header\">\n\t\t\t\t\t<th id=\"app-table-col-icon\" class=\"app-image\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-name\" class=\"app-name\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-version\" class=\"app-version\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-level\" class=\"app-level\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-actions\" class=\"actions\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t\t<template v-for=\"bundle in bundles\">\n\t\t\t\t\t<tr :key=\"bundle.id\">\n\t\t\t\t\t\t<th :id=\"`app-table-rowgroup-${bundle.id}`\" colspan=\"5\" scope=\"rowgroup\">\n\t\t\t\t\t\t\t<div class=\"app-bundle-heading\">\n\t\t\t\t\t\t\t\t<span class=\"app-bundle-header\">\n\t\t\t\t\t\t\t\t\t{{ bundle.name }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<NcButton type=\"secondary\" @click=\"toggleBundle(bundle.id)\">\n\t\t\t\t\t\t\t\t\t{{ t('settings', bundleToggleText(bundle.id)) }}\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in bundleApps(bundle.id)\"\n\t\t\t\t\t\t:key=\"bundle.id + app.id\"\n\t\t\t\t\t\t:use-bundle-view=\"true\"\n\t\t\t\t\t\t:headers=\"`app-table-rowgroup-${bundle.id}`\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</table>\n\t\t\t<ul v-if=\"useAppStoreView\" class=\"apps-store-view\">\n\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t:list-view=\"false\" />\n\t\t\t</ul>\n\t\t</div>\n\n\t\t<div id=\"apps-list-search\" class=\"apps-list installed\">\n\t\t\t<div class=\"apps-list-container\">\n\t\t\t\t<template v-if=\"search !== '' && searchApps.length > 0\">\n\t\t\t\t\t<div class=\"section\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t<td colspan=\"5\">\n\t\t\t\t\t\t\t<h2>{{ t('settings', 'Results from other categories') }}</h2>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AppItem v-for=\"app in searchApps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"search !== '' && !loading && searchApps.length === 0 && apps.length === 0\" id=\"apps-list-empty\" class=\"emptycontent emptycontent-search\">\n\t\t\t<div id=\"app-list-empty-icon\" class=\"icon-settings-dark\" />\n\t\t\t<h2>{{ t('settings', 'No apps found for your version') }}</h2>\n\t\t</div>\n\n\t\t<div id=\"searchresults\" />\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport AppItem from './AppList/AppItem.vue'\nimport pLimit from 'p-limit'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearch: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcounter() {\n\t\t\treturn this.apps.filter(app => app.update).length\n\t\t},\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\thasPendingUpdate() {\n\t\t\treturn this.apps.filter(app => app.update).length > 0\n\t\t},\n\t\tshowUpdateAll() {\n\t\t\treturn this.hasPendingUpdate && this.useListView\n\t\t},\n\t\tapps() {\n\t\t\tconst apps = this.$store.getters.getAllApps\n\t\t\t\t.filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1)\n\t\t\t\t.sort(function(a, b) {\n\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name\n\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name\n\t\t\t\t\treturn OC.Util.naturalSortCompare(sortStringA, sortStringB)\n\t\t\t\t})\n\n\t\t\tif (this.category === 'installed') {\n\t\t\t\treturn apps.filter(app => app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'enabled') {\n\t\t\t\treturn apps.filter(app => app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'disabled') {\n\t\t\t\treturn apps.filter(app => !app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'app-bundles') {\n\t\t\t\treturn apps.filter(app => app.bundles)\n\t\t\t}\n\t\t\tif (this.category === 'updates') {\n\t\t\t\treturn apps.filter(app => app.update)\n\t\t\t}\n\t\t\tif (this.category === 'supported') {\n\t\t\t\t// For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n\t\t\t\treturn apps.filter(app => app.level === 300)\n\t\t\t}\n\t\t\tif (this.category === 'featured') {\n\t\t\t\t// An app level of `200` will be set for apps featured on the app store\n\t\t\t\treturn apps.filter(app => app.level === 200)\n\t\t\t}\n\t\t\t// filter app store categories\n\t\t\treturn apps.filter(app => {\n\t\t\t\treturn app.appstore && app.category !== undefined\n\t\t\t\t\t&& (app.category === this.category || app.category.indexOf(this.category) > -1)\n\t\t\t})\n\t\t},\n\t\tbundles() {\n\t\t\treturn this.$store.getters.getAppBundles.filter(bundle => this.bundleApps(bundle.id).length > 0)\n\t\t},\n\t\tbundleApps() {\n\t\t\treturn function(bundle) {\n\t\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t\t.filter(app => {\n\t\t\t\t\t\treturn app.bundleIds !== undefined && app.bundleIds.includes(bundle)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tsearchApps() {\n\t\t\tif (this.search === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t.filter(app => {\n\t\t\t\t\tif (app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) {\n\t\t\t\t\t\treturn (!this.apps.find(_app => _app.id === app.id))\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tuseAppStoreView() {\n\t\t\treturn !this.useListView && !this.useBundleView\n\t\t},\n\t\tuseListView() {\n\t\t\treturn (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured' || this.category === 'supported')\n\t\t},\n\t\tuseBundleView() {\n\t\t\treturn (this.category === 'app-bundles')\n\t\t},\n\t\tallBundlesEnabled() {\n\t\t\treturn (id) => {\n\t\t\t\treturn this.bundleApps(id).filter(app => !app.active).length === 0\n\t\t\t}\n\t\t},\n\t\tbundleToggleText() {\n\t\t\treturn (id) => {\n\t\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\t\treturn t('settings', 'Disable all')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Download and enable all')\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmounted() {\n\t\tsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tsetSearch({ query }) {\n\t\t\tthis.search = query\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search = ''\n\t\t},\n\t\ttoggleBundle(id) {\n\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\treturn this.disableBundle(id)\n\t\t\t}\n\t\t\treturn this.enableBundle(id)\n\t\t},\n\t\tenableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('enableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tdisableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('disableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tupdateAll() {\n\t\t\tconst limit = pLimit(1)\n\t\t\tthis.apps\n\t\t\t\t.filter(app => app.update)\n\t\t\t\t.map(app => limit(() => this.$store.dispatch('updateApp', { appId: app.id })),\n\t\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-bundle-heading {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 20px 10px 20px 0;\n\t}\n\t.app-bundle-header {\n\t\tmargin: 0 10px 0 50px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-text-light);\n\t}\n\t.apps-store-view {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=style&index=0&id=24d746cb&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=style&index=0&id=24d746cb&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=24d746cb&scoped=true\"\nimport script from \"./AppList.vue?vue&type=script&lang=js\"\nexport * from \"./AppList.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppList.vue?vue&type=style&index=0&id=24d746cb&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24d746cb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app-content-inner\"}},[_c('div',{staticClass:\"apps-list\",class:{installed: (_vm.useBundleView || _vm.useListView), store: _vm.useAppStoreView},attrs:{\"id\":\"apps-list\"}},[(_vm.useListView)?[(_vm.showUpdateAll)?_c('div',{staticClass:\"toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', '%n app has an update available', '%n apps have an update available', _vm.counter))+\"\\n\\t\\t\\t\\t\"),(_vm.showUpdateAll)?_c('NcButton',{attrs:{\"id\":\"app-list-update-all\",\"type\":\"primary\"},on:{\"click\":_vm.updateAll}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', 'Update', 'Update all', _vm.counter))+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(!_vm.showUpdateAll)?_c('div',{staticClass:\"toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'All apps are up-to-date.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"apps-list-container\",attrs:{\"name\":\"app-list\",\"tag\":\"table\"}},[_c('tr',{key:\"app-list-view-header\",staticClass:\"apps-header\"},[_c('th',{staticClass:\"app-image\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',{staticClass:\"app-name\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',{staticClass:\"app-version\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',{staticClass:\"app-level\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',{staticClass:\"actions\"},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})],2)]:_vm._e(),_vm._v(\" \"),(_vm.useBundleView)?_c('table',{staticClass:\"apps-list-container\"},[_c('tr',{key:\"app-list-view-header\",staticClass:\"apps-header\"},[_c('th',{staticClass:\"app-image\",attrs:{\"id\":\"app-table-col-icon\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',{staticClass:\"app-name\",attrs:{\"id\":\"app-table-col-name\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',{staticClass:\"app-version\",attrs:{\"id\":\"app-table-col-version\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',{staticClass:\"app-level\",attrs:{\"id\":\"app-table-col-level\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',{staticClass:\"actions\",attrs:{\"id\":\"app-table-col-actions\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.bundles),function(bundle){return [_c('tr',{key:bundle.id},[_c('th',{attrs:{\"id\":`app-table-rowgroup-${bundle.id}`,\"colspan\":\"5\",\"scope\":\"rowgroup\"}},[_c('div',{staticClass:\"app-bundle-heading\"},[_c('span',{staticClass:\"app-bundle-header\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(bundle.name)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"secondary\"},on:{\"click\":function($event){return _vm.toggleBundle(bundle.id)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', _vm.bundleToggleText(bundle.id)))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])],1)])]),_vm._v(\" \"),_vm._l((_vm.bundleApps(bundle.id)),function(app){return _c('AppItem',{key:bundle.id + app.id,attrs:{\"use-bundle-view\":true,\"headers\":`app-table-rowgroup-${bundle.id}`,\"app\":app,\"category\":_vm.category}})})]})],2):_vm._e(),_vm._v(\" \"),(_vm.useAppStoreView)?_c('ul',{staticClass:\"apps-store-view\"},_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":false}})}),1):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"apps-list installed\",attrs:{\"id\":\"apps-list-search\"}},[_c('div',{staticClass:\"apps-list-container\"},[(_vm.search !== '' && _vm.searchApps.length > 0)?[_c('div',{staticClass:\"section\"},[_c('div'),_vm._v(\" \"),_c('td',{attrs:{\"colspan\":\"5\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Results from other categories')))])])]),_vm._v(\" \"),_vm._l((_vm.searchApps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})]:_vm._e()],2)]),_vm._v(\" \"),(_vm.search !== '' && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0)?_c('div',{staticClass:\"emptycontent emptycontent-search\",attrs:{\"id\":\"apps-list-empty\"}},[_c('div',{staticClass:\"icon-settings-dark\",attrs:{\"id\":\"app-list-empty-icon\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No apps found for your version')))])]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"searchresults\"}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"app-discover\"},[(_setup.hasError)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Nothing to show'),\"description\":_setup.t('settings', 'Could not load section content from app store.')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiEyeOff,\"size\":64}})]},proxy:true}],null,false,638098482)}):(_setup.elements.length === 0)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Loading'),\"description\":_setup.t('settings', 'Fetching the latest news…')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_vm._l((_setup.elements),function(entry,index){return _c(_setup.getComponent(entry.type),_vm._b({key:entry.id ?? index,tag:\"component\"},'component',entry,false))})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/**\n * Helper to transform the JSON API results to proper frontend objects (app discover section elements)\n *\n * @param element The JSON API element to transform\n */\nexport const apiTypeParser = (element) => {\n const appElement = { ...element };\n if (appElement.date) {\n appElement.date = Date.parse(appElement.date);\n }\n if (appElement.expiryDate) {\n appElement.expiryDate = Date.parse(appElement.expiryDate);\n }\n if (appElement.type === 'post') {\n return appElement;\n }\n else if (appElement.type === 'showcase') {\n return appElement;\n }\n else if (appElement.type === 'carousel') {\n return appElement;\n }\n throw new Error(`Invalid argument, app discover element with type ${element.type ?? 'unknown'} is unknown`);\n};\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreDiscoverSection.vue?vue&type=template&id=262838ca&scoped=true\"\nimport script from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=262838ca&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"262838ca\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStore.vue?vue&type=template&id=a75d4530&scoped=true\"\nimport script from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a75d4530\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppNavigation,{attrs:{\"aria-label\":_setup.t('settings', 'Apps')},scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-discover\",\"to\":{ name: 'apps' },\"exact\":true,\"name\":_setup.APPS_SECTION_ENUM.discover},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-installed\",\"to\":{ name: 'apps-category', params: { category: 'installed'} },\"exact\":true,\"name\":_setup.APPS_SECTION_ENUM.installed},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-enabled\",\"to\":{ name: 'apps-category', params: { category: 'enabled' } },\"name\":_setup.APPS_SECTION_ENUM.enabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-disabled\",\"to\":{ name: 'apps-category', params: { category: 'disabled' } },\"name\":_setup.APPS_SECTION_ENUM.disabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:true}])}),_vm._v(\" \"),(_setup.updateCount > 0)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-updates\",\"to\":{ name: 'apps-category', params: { category: 'updates' } },\"name\":_setup.APPS_SECTION_ENUM.updates},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [_c(_setup.NcCounterBubble,[_vm._v(_vm._s(_setup.updateCount))])]},proxy:true},{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:true}],null,false,2824895104)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-your-bundles\",\"to\":{ name: 'apps-category', params: { category: 'app-bundles' } },\"name\":_setup.APPS_SECTION_ENUM['app-bundles']},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationSpacer),_vm._v(\" \"),(_setup.appstoreEnabled && _setup.categoriesLoading)?_c('li',{staticClass:\"categories--loading\"},[_c(_setup.NcLoadingIcon,{attrs:{\"size\":20,\"aria-label\":_setup.t('settings', 'Loading categories')}})],1):(_setup.appstoreEnabled && !_setup.categoriesLoading)?[(_setup.isSubscribed)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-supported\",\"to\":{ name: 'apps-category', params: { category: 'supported' } },\"name\":_setup.APPS_SECTION_ENUM.supported},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:true}],null,false,613663011)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-featured\",\"to\":{ name: 'apps-category', params: { category: 'featured' } },\"name\":_setup.APPS_SECTION_ENUM.featured},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:true}])}),_vm._v(\" \"),_vm._l((_setup.categories),function(category){return _c(_setup.NcAppNavigationItem,{key:category.id,attrs:{\"id\":`app-category-${category.id}`,\"name\":category.displayName,\"to\":{\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":category.icon}})]},proxy:true}],null,true)})})]:_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-developer-docs\",\"name\":_setup.t('settings', 'Developer documentation ↗'),\"href\":_setup.developerDocsUrl}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=54d629ed&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=54d629ed&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreNavigation.vue?vue&type=template&id=54d629ed&scoped=true\"\nimport script from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreNavigation.vue?vue&type=style&index=0&id=54d629ed&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"54d629ed\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.showSidebar)?_c(_setup.NcAppSidebar,{staticClass:\"app-sidebar\",class:{ 'app-sidebar--with-screenshot': _setup.hasScreenshot },attrs:{\"active\":_setup.activeTab,\"background\":_setup.hasScreenshot ? _setup.app.screenshot : undefined,\"compact\":!_setup.hasScreenshot,\"name\":_setup.app.name,\"title\":_setup.app.name,\"subname\":_setup.licenseText,\"subtitle\":_setup.licenseText},on:{\"update:active\":function($event){_setup.activeTab=$event},\"close\":_setup.hideAppDetails},scopedSlots:_vm._u([(!_setup.hasScreenshot)?{key:\"header\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{staticClass:\"app-sidebar__fallback-icon\",attrs:{\"svg\":_setup.appIcon ?? '',\"size\":64}})]},proxy:true}:null,{key:\"description\",fn:function(){return [_c('div',{staticClass:\"app-sidebar__badges\"},[_c(_setup.AppLevelBadge,{attrs:{\"level\":_setup.app.level}}),_vm._v(\" \"),(_setup.hasRating)?_c(_setup.AppScore,{attrs:{\"score\":_setup.rating}}):_vm._e()],1)]},proxy:true}],null,true)},[_vm._v(\" \"),_vm._v(\" \"),_c(_setup.AppDescriptionTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppDetailsTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppReleasesTab,{attrs:{\"app\":_setup.app}})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"settings-markdown\" v-html=\"renderMarkdown\" />\n</template>\n\n<script>\nimport { marked } from 'marked'\nimport dompurify from 'dompurify'\n\nexport default {\n\tname: 'Markdown',\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tminHeading: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n\tcomputed: {\n\t\trenderMarkdown() {\n\t\t\tconst renderer = new marked.Renderer()\n\t\t\trenderer.link = function(href, title, text) {\n\t\t\t\tlet prot\n\t\t\t\ttry {\n\t\t\t\t\tprot = decodeURIComponent(unescape(href))\n\t\t\t\t\t\t.replace(/[^\\w:]/g, '')\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tlet out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"'\n\t\t\t\tif (title) {\n\t\t\t\t\tout += ' title=\"' + title + '\"'\n\t\t\t\t}\n\t\t\t\tout += '>' + text + '</a>'\n\t\t\t\treturn out\n\t\t\t}\n\t\t\trenderer.heading = (text, level) => {\n\t\t\t\tlevel = Math.min(6, level + (this.minHeading - 1))\n\t\t\t\treturn `<h${level}>${text}</h${level}>`\n\t\t\t}\n\t\t\trenderer.image = function(href, title, text) {\n\t\t\t\tif (text) {\n\t\t\t\t\treturn text\n\t\t\t\t}\n\t\t\t\treturn title\n\t\t\t}\n\t\t\trenderer.blockquote = function(quote) {\n\t\t\t\treturn quote\n\t\t\t}\n\t\t\treturn dompurify.sanitize(\n\t\t\t\tmarked(this.text.trim(), {\n\t\t\t\t\trenderer,\n\t\t\t\t\tgfm: false,\n\t\t\t\t\thighlight: false,\n\t\t\t\t\ttables: false,\n\t\t\t\t\tbreaks: false,\n\t\t\t\t\tpedantic: false,\n\t\t\t\t\tsanitize: true,\n\t\t\t\t\tsmartLists: true,\n\t\t\t\t\tsmartypants: false,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tSAFE_FOR_JQUERY: true,\n\t\t\t\t\tALLOWED_TAGS: [\n\t\t\t\t\t\t'h1',\n\t\t\t\t\t\t'h2',\n\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t'strong',\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t'ul',\n\t\t\t\t\t\t'ol',\n\t\t\t\t\t\t'li',\n\t\t\t\t\t\t'em',\n\t\t\t\t\t\t'del',\n\t\t\t\t\t\t'blockquote',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.settings-markdown::v-deep {\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 120%;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t\tmargin-top: 48px;\n\t}\n\n\th2 {\n\t\tfont-size: 28px;\n\t\tmargin-top: 48px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\tpre {\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t}\n\n\tul li {\n\t\tlist-style-type: disc;\n\t}\n\n\tul > li > ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\tul > li > ul > li ul li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=7c5c8e59&scoped=true\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7c5c8e59\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"settings-markdown\",domProps:{\"innerHTML\":_vm._s(_vm.renderMarkdown)}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.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(_setup.NcAppSidebarTab,{attrs:{\"id\":\"desc\",\"name\":_setup.t('settings', 'Description'),\"order\":0},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiTextShort}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-description\"},[_c(_setup.Markdown,{attrs:{\"text\":_vm.app.description,\"min-heading\":4}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDescriptionTab.vue?vue&type=template&id=fccce5ae&scoped=true\"\nimport script from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fccce5ae\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSidebarTab',{attrs:{\"id\":\"details\",\"name\":_vm.t('settings', 'Details'),\"order\":1},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTextBox}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-details\"},[_c('div',{staticClass:\"app-details__actions\"},[(_vm.app.active && _vm.canLimitToGroups(_vm.app))?_c('div',{staticClass:\"app-details__actions-groups\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.groupCheckedAppsData),expression:\"groupCheckedAppsData\"}],staticClass:\"groups-enable__checkbox checkbox\",attrs:{\"id\":`groups_enable_${_vm.app.id}`,\"type\":\"checkbox\"},domProps:{\"value\":_vm.app.id,\"checked\":Array.isArray(_vm.groupCheckedAppsData)?_vm._i(_vm.groupCheckedAppsData,_vm.app.id)>-1:(_vm.groupCheckedAppsData)},on:{\"change\":[function($event){var $$a=_vm.groupCheckedAppsData,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.app.id,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.groupCheckedAppsData=$$a.concat([$$v]))}else{$$i>-1&&(_vm.groupCheckedAppsData=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.groupCheckedAppsData=$$c}},_vm.setGroupLimit]}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":`groups_enable_${_vm.app.id}`}},[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\" \"),_c('input',{staticClass:\"group_select\",attrs:{\"type\":\"hidden\",\"title\":_vm.t('settings', 'All'),\"value\":\"\"}}),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"limitToGroups\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Limit app usage to groups')))])]),_vm._v(\" \"),(_vm.isLimitedToGroups(_vm.app))?_c('NcSelect',{attrs:{\"input-id\":\"limitToGroups\",\"options\":_vm.groups,\"value\":_vm.appGroups,\"limit\":5,\"label\":\"name\",\"multiple\":true,\"close-on-select\":false},on:{\"option:selected\":_vm.addGroupLimitation,\"option:deselected\":_vm.removeGroupLimitation,\"search\":_vm.asyncFindGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__actions-manage\"},[(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {version}', { version: _vm.app.update }),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{staticClass:\"enable primary\",attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.enable(_vm.app.id)}}}):(!_vm.app.active && !_vm.app.canInstall)?_c('input',{staticClass:\"enable force\",attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__dependencies\"},[(_vm.app.missingMinOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.missingMaxOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.canInstall)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:'))+\"\\n\\t\\t\\t\\t\"),_c('ul',{staticClass:\"missing-dependencies\"},_vm._l((_vm.app.missingDependencies),function(dep,index){return _c('li',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(dep)+\"\\n\\t\\t\\t\\t\\t\")])}),0)]):_vm._e()]),_vm._v(\" \"),(_vm.lastModified)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Latest updated'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcDateTime',{attrs:{\"timestamp\":_vm.lastModified}})],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Author'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"app-details__authors\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appAuthors)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Categories'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appCategories)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),(_vm.externalResources.length > 0)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Resources')))]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__documentation\",attrs:{\"aria-label\":_vm.t('settings', 'Documentation')}},_vm._l((_vm.externalResources),function(resource){return _c('li',{key:resource.id},[_c('a',{staticClass:\"appslink\",attrs:{\"href\":resource.href,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(resource.label)+\" ↗\\n\\t\\t\\t\\t\\t\")])])}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Interact')))]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__interact\"},[_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Report a bug'),\"title\":_vm.t('settings', 'Report a bug')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiBug}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Request feature'),\"title\":_vm.t('settings', 'Request feature')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiFeatureSearch}})]},proxy:true}])}),_vm._v(\" \"),(_vm.app.appstoreData?.discussion)?_c('NcButton',{attrs:{\"href\":_vm.app.appstoreData.discussion,\"aria-label\":_vm.t('settings', 'Ask questions or discuss'),\"title\":_vm.t('settings', 'Ask questions or discuss')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTooltipQuestion}})]},proxy:true}],null,false,1288192462)}):_vm._e(),_vm._v(\" \"),(!_vm.app.internal)?_c('NcButton',{attrs:{\"href\":_vm.rateAppUrl,\"aria-label\":_vm.t('settings', 'Rate the app'),\"title\":_vm.t('settings', 'Rate')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStar}})]},proxy:true}],null,false,422450625)}):_vm._e()],1)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcAppSidebarTab id=\"details\"\n\t\t:name=\"t('settings', 'Details')\"\n\t\t:order=\"1\">\n\t\t<template #icon>\n\t\t\t<NcIconSvgWrapper :path=\"mdiTextBox\" />\n\t\t</template>\n\t\t<div class=\"app-details\">\n\t\t\t<div class=\"app-details__actions\">\n\t\t\t\t<div v-if=\"app.active && canLimitToGroups(app)\" class=\"app-details__actions-groups\">\n\t\t\t\t\t<input :id=\"`groups_enable_${app.id}`\"\n\t\t\t\t\t\tv-model=\"groupCheckedAppsData\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t:value=\"app.id\"\n\t\t\t\t\t\tclass=\"groups-enable__checkbox checkbox\"\n\t\t\t\t\t\t@change=\"setGroupLimit\">\n\t\t\t\t\t<label :for=\"`groups_enable_${app.id}`\">{{ t('settings', 'Limit to groups') }}</label>\n\t\t\t\t\t<input type=\"hidden\"\n\t\t\t\t\t\tclass=\"group_select\"\n\t\t\t\t\t\t:title=\"t('settings', 'All')\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t<br>\n\t\t\t\t\t<label for=\"limitToGroups\">\n\t\t\t\t\t\t<span>{{ t('settings', 'Limit app usage to groups') }}</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t<NcSelect v-if=\"isLimitedToGroups(app)\"\n\t\t\t\t\t\tinput-id=\"limitToGroups\"\n\t\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t\t:value=\"appGroups\"\n\t\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t@option:selected=\"addGroupLimitation\"\n\t\t\t\t\t\t@option:deselected=\"removeGroupLimitation\"\n\t\t\t\t\t\t@search=\"asyncFindGroup\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</NcSelect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"app-details__actions-manage\">\n\t\t\t\t\t<input v-if=\"app.update\"\n\t\t\t\t\t\tclass=\"update primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Update to {version}', { version: app.update })\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"update(app.id)\">\n\t\t\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\t\t\tclass=\"uninstall\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"remove(app.id)\">\n\t\t\t\t\t<input v-if=\"app.active\"\n\t\t\t\t\t\tclass=\"enable\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"disable(app.id)\">\n\t\t\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t\t\t@click=\"enable(app.id)\">\n\t\t\t\t\t<input v-else-if=\"!app.active && !app.canInstall\"\n\t\t\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable force\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"forceEnable(app.id)\">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<ul class=\"app-details__dependencies\">\n\t\t\t\t<li v-if=\"app.missingMinOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"app.missingMaxOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"!app.canInstall\">\n\t\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t\t<ul class=\"missing-dependencies\">\n\t\t\t\t\t\t<li v-for=\"(dep, index) in app.missingDependencies\" :key=\"index\">\n\t\t\t\t\t\t\t{{ dep }}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\n\t\t\t<div v-if=\"lastModified\" class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Latest updated') }}\n\t\t\t\t</h4>\n\t\t\t\t<NcDateTime :timestamp=\"lastModified\" />\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Author') }}\n\t\t\t\t</h4>\n\t\t\t\t<p class=\"app-details__authors\">\n\t\t\t\t\t{{ appAuthors }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Categories') }}\n\t\t\t\t</h4>\n\t\t\t\t<p>\n\t\t\t\t\t{{ appCategories }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"externalResources.length > 0\" class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Resources') }}</h4>\n\t\t\t\t<ul class=\"app-details__documentation\" :aria-label=\"t('settings', 'Documentation')\">\n\t\t\t\t\t<li v-for=\"resource of externalResources\" :key=\"resource.id\">\n\t\t\t\t\t\t<a class=\"appslink\"\n\t\t\t\t\t\t\t:href=\"resource.href\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t{{ resource.label }} ↗\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Interact') }}</h4>\n\t\t\t\t<div class=\"app-details__interact\">\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Report a bug')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Report a bug')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiBug\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Request feature')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Request feature')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiFeatureSearch\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"app.appstoreData?.discussion\"\n\t\t\t\t\t\t:href=\"app.appstoreData.discussion\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Ask questions or discuss')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Ask questions or discuss')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiTooltipQuestion\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"!app.internal\"\n\t\t\t\t\t\t:href=\"rateAppUrl\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Rate the app')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Rate')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiStar\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</NcAppSidebarTab>\n</template>\n\n<script>\nimport NcAppSidebarTab from '@nextcloud/vue/dist/Components/NcAppSidebarTab.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport AppManagement from '../../mixins/AppManagement.js'\nimport { mdiBug, mdiFeatureSearch, mdiStar, mdiTextBox, mdiTooltipQuestion } from '@mdi/js'\nimport { useAppsStore } from '../../store/apps-store'\n\nexport default {\n\tname: 'AppDetailsTab',\n\n\tcomponents: {\n\t\tNcAppSidebarTab,\n\t\tNcButton,\n\t\tNcDateTime,\n\t\tNcIconSvgWrapper,\n\t\tNcSelect,\n\t},\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst store = useAppsStore()\n\n\t\treturn {\n\t\t\tstore,\n\n\t\t\tmdiBug,\n\t\t\tmdiFeatureSearch,\n\t\t\tmdiStar,\n\t\t\tmdiTextBox,\n\t\t\tmdiTooltipQuestion,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tlastModified() {\n\t\t\treturn (this.app.appstoreData?.releases ?? [])\n\t\t\t\t.map(({ lastModified }) => Date.parse(lastModified))\n\t\t\t\t.sort()\n\t\t\t\t.at(0) ?? null\n\t\t},\n\t\t/**\n\t\t * App authors as comma separated string\n\t\t */\n\t\tappAuthors() {\n\t\t\tconsole.warn(this.app)\n\t\t\tif (!this.app) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tconst authorName = (xmlNode) => {\n\t\t\t\tif (xmlNode['@value']) {\n\t\t\t\t\t// Complex node (with email or homepage attribute)\n\t\t\t\t\treturn xmlNode['@value']\n\t\t\t\t}\n\t\t\t\t// Simple text node\n\t\t\t\treturn xmlNode\n\t\t\t}\n\n\t\t\tconst authors = Array.isArray(this.app.author)\n\t\t\t\t? this.app.author.map(authorName)\n\t\t\t\t: [authorName(this.app.author)]\n\n\t\t\treturn authors\n\t\t\t\t.sort((a, b) => a.split(' ').at(-1).localeCompare(b.split(' ').at(-1)))\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\tappstoreUrl() {\n\t\t\treturn `https://apps.nextcloud.com/apps/${this.app.id}`\n\t\t},\n\n\t\t/**\n\t\t * Further external resources (e.g. website)\n\t\t */\n\t\texternalResources() {\n\t\t\tconst resources = []\n\t\t\tif (!this.app.internal) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'appstore',\n\t\t\t\t\thref: this.appstoreUrl,\n\t\t\t\t\tlabel: t('settings', 'View in store'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.website) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'website',\n\t\t\t\t\thref: this.app.website,\n\t\t\t\t\tlabel: t('settings', 'Visit website'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.documentation) {\n\t\t\t\tif (this.app.documentation.user) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-user',\n\t\t\t\t\t\thref: this.app.documentation.user,\n\t\t\t\t\t\tlabel: t('settings', 'Usage documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.admin) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-admin',\n\t\t\t\t\t\thref: this.app.documentation.admin,\n\t\t\t\t\t\tlabel: t('settings', 'Admin documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.developer) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-developer',\n\t\t\t\t\t\thref: this.app.documentation.developer,\n\t\t\t\t\t\tlabel: t('settings', 'Developer documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn resources\n\t\t},\n\n\t\tappCategories() {\n\t\t\treturn [this.app.category].flat()\n\t\t\t\t.map((id) => this.store.getCategoryById(id)?.displayName ?? id)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\trateAppUrl() {\n\t\t\treturn `${this.appstoreUrl}#comments`\n\t\t},\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: \"\";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=style&index=0&id=59b4cf6b&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=style&index=0&id=59b4cf6b&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDetailsTab.vue?vue&type=template&id=59b4cf6b&scoped=true\"\nimport script from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nexport * from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppDetailsTab.vue?vue&type=style&index=0&id=59b4cf6b&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59b4cf6b\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.hasChangelog)?_c(_setup.NcAppSidebarTab,{attrs:{\"id\":\"changelog\",\"name\":_setup.t('settings', 'Changelog'),\"order\":2},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiClockFast,\"size\":24}})]},proxy:true}],null,false,1849836872)},[_vm._v(\" \"),_vm._l((_vm.app.releases),function(release){return _c('div',{key:release.version,staticClass:\"app-sidebar-tabs__release\"},[_c('h2',[_vm._v(_vm._s(release.version))]),_vm._v(\" \"),_c(_setup.Markdown,{staticClass:\"app-sidebar-tabs__release-text\",attrs:{\"text\":_setup.createChangelogFromRelease(release)}})],1)})],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=style&index=0&id=9da99928&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=style&index=0&id=9da99928&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppReleasesTab.vue?vue&type=template&id=9da99928&scoped=true\"\nimport script from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppReleasesTab.vue?vue&type=style&index=0&id=9da99928&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9da99928\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"","import { mdiCog } from '@mdi/js';\nimport { computed, ref, watchEffect } from 'vue';\nimport AppstoreCategoryIcons from '../constants/AppstoreCategoryIcons.ts';\nimport logger from '../logger.ts';\n/**\n * Get the app icon raw SVG for use with `NcIconSvgWrapper` (do never use without sanitizing)\n * It has a fallback to the categroy icon.\n *\n * @param app The app to get the icon for\n */\nexport function useAppIcon(app) {\n const appIcon = ref(null);\n /**\n * Fallback value if no app icon available\n */\n const categoryIcon = computed(() => {\n const path = [app.value?.category ?? []].flat()\n .map((name) => AppstoreCategoryIcons[name])\n .filter((icon) => !!icon)\n .at(0)\n ?? mdiCog;\n return path ? `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"${path}\" /></svg>` : null;\n });\n watchEffect(async () => {\n // Note: Only variables until the first `await` will be watched!\n if (!app.value?.preview) {\n appIcon.value = categoryIcon.value;\n }\n else {\n appIcon.value = null;\n // Now try to load the real app icon\n try {\n const response = await window.fetch(app.value.preview);\n const blob = await response.blob();\n const rawSvg = await blob.text();\n appIcon.value = rawSvg.replaceAll(/fill=\"#(fff|ffffff)([a-z0-9]{1,2})?\"/ig, 'fill=\"currentColor\"');\n }\n catch (error) {\n appIcon.value = categoryIcon.value;\n logger.error('Could not load app icon', { error });\n }\n }\n });\n return {\n appIcon,\n };\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=style&index=0&id=ec35f1f8&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=style&index=0&id=ec35f1f8&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreSidebar.vue?vue&type=template&id=ec35f1f8&scoped=true\"\nimport script from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreSidebar.vue?vue&type=style&index=0&id=ec35f1f8&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ec35f1f8\",\n null\n \n)\n\nexport default component.exports"],"names":["APPS_SECTION_ENUM","Object","freeze","discover","t","installed","enabled","disabled","updates","featured","supported","axios","get","generateOcsUrl","then","_ref","data","ocs","meta","statuscode","emit","apps","window","dispatchEvent","Event","computed","appGroups","this","app","groups","map","group","id","name","installing","$store","getters","loading","isLoading","enableButtonText","needsDownload","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","groupCheckedAppsData","mounted","length","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","appId","canLimitToGroups","types","includes","addGroupLimitation","groupArray","pop","concat","removeGroupLimitation","currentGroups","index","indexOf","splice","forceEnable","response","rebuildNavigation","catch","error","showError","enable","disable","remove","install","update","mdiStarCircleOutline","mdiAccount","mdiCheck","mdiClose","bundles","mdiArchive","mdiStarShooting","mdiStar","mdiDownload","auth","mdiKey","customization","mdiCog","dashboard","mdiViewDashboard","files","mdiFolder","games","mdiControllerClassic","integration","mdiOpenInApp","monitoring","mdiMonitorEye","multimedia","mdiMultimedia","office","mdiFileDocumentEdit","organization","mdiOfficeBuilding","mdiMagnify","security","mdiSecurity","social","mdiAccountMultiple","tools","mdiTools","workflow","mdiClipboardFlow","showApiError","useAppsStore","defineStore","state","categories","updateCount","loadState","loadingList","gettingCategoriesPromise","actions","loadCategories","force","arguments","undefined","generateUrl","category","_APPSTORE_CATEGORY_IC","icon","APPSTORE_CATEGORY_ICONS","$patch","logger","loadApps","getCategoryById","categoryId","_this$categories$find","find","getAppById","_this$apps$find","_ref2","___CSS_LOADER_EXPORT___","push","module","_defineComponent","__name","props","level","setup","__props","isSupported","isFeatured","badgeIcon","value","badgeText","badgeTitle","__sfc","NcIconSvgWrapper","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","_c","_self","_setup","_setupProxy","staticClass","class","attrs","_v","_s","_e","defineComponent","components","score","type","Number","required","mdiStarHalfFull","mdiStarOutline","title","appScore","toFixed","fullStars","Math","floor","emptyStars","min","hasHalfStar","_l","key","filterId","filterUrl","random","toString","substring","AppLevelBadge","AppScore","NcButton","mixins","AppManagement","SvgFilterMixin","listView","Boolean","default","useBundleView","headers","String","isSelected","scrolled","screenshotLoaded","hasRating","appstoreData","ratingNumOverall","dataItemTag","watch","$route","params","releases","screenshot","image","Image","onload","src","watchers","prefix","content","getDataItemHeaders","columnName","join","tag","selected","preview","appName","summary","version","on","$event","stopPropagation","canUnInstall","active","canInstall","isCompatible","pLimit","concurrency","isInteger","POSITIVE_INFINITY","TypeError","queue","Queue","activeCount","run","async","fn","resolve","args","result","size","dequeue","generator","_len","Array","_key","Promise","enqueue","bind","defineProperties","pendingCount","clearQueue","clear","AppItem","counter","filter","hasPendingUpdate","showUpdateAll","useListView","getAllApps","toLowerCase","sort","a","b","sortStringA","sortStringB","OC","Util","naturalSortCompare","appstore","getAppBundles","bundle","bundleApps","bundleIds","searchApps","_app","useAppStoreView","allBundlesEnabled","bundleToggleText","beforeDestroy","unsubscribe","setSearch","resetSearch","subscribe","toggleBundle","disableBundle","enableBundle","console","Notification","show","updateAll","store","n","apiTypeParser","element","_element$type","appElement","date","Date","parse","expiryDate","Error","PostType","defineAsyncComponent","CarouselType","hasError","ref","elements","shuffleArray","array","i","j","onBeforeMount","parsedData","getComponent","render","h","mdiEyeOff","NcEmptyContent","NcLoadingIcon","scopedSlots","_u","proxy","entry","_entry$id","_b","route","useRoute","currentCategory","_route$params$categor","_route$params","appStoreLabel","viewLabel","_APPS_SECTION_ENUM$cu","_store$getCategoryByI","displayName","watchEffect","document","instance","getCurrentInstance","shouldRefetchCategories","NcAppContent","AppList","AppStoreDiscoverSection","domProps","appstoreEnabled","developerDocsUrl","categoriesLoading","isSubscribed","NcAppNavigation","NcAppNavigationItem","NcAppNavigationSpacer","NcCounterBubble","text","minHeading","renderMarkdown","renderer","marked","Renderer","link","href","prot","decodeURIComponent","unescape","replace","e","out","heading","blockquote","quote","dompurify","trim","gfm","highlight","tables","breaks","pedantic","sanitize","smartLists","smartypants","SAFE_FOR_JQUERY","ALLOWED_TAGS","mdiTextShort","NcAppSidebarTab","Markdown","description","NcDateTime","NcSelect","mdiBug","mdiFeatureSearch","mdiTextBox","mdiTooltipQuestion","lastModified","_map$sort$at","_this$app$appstoreDat","_this$app$appstoreDat2","at","appAuthors","warn","authorName","xmlNode","isArray","author","split","localeCompare","appstoreUrl","externalResources","resources","internal","label","website","documentation","user","admin","developer","appCategories","flat","_this$store$getCatego","_this$store$getCatego2","rateAppUrl","getGroups","_vm$app$bugs","_vm$app$bugs2","_vm$app$appstoreData","directives","rawName","expression","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","missingMinOwnCloudVersion","missingMaxOwnCloudVersion","missingDependencies","dep","resource","bugs","discussion","hasChangelog","_props$app$releases$","_props$app$releases$2","values","translations","some","changelog","createChangelogFromRelease","release","_release$translations","_release$translations2","_release$translations3","getLanguage","en","mdiClockFast","router","useRouter","_route$params$id","_app$value$appstoreDa","rating","_app$value$appstoreDa2","_app$value$appstoreDa3","_app$value$appstoreDa4","ratingNumRecent","ratingRecent","ratingOverall","showSidebar","appIcon","categoryIcon","_flat$map$filter$at","_app$value$category","_app$value","path","AppstoreCategoryIcons","_app$value2","fetch","blob","rawSvg","replaceAll","useAppIcon","licenseText","license","licence","toUpperCase","activeTab","hasScreenshot","loadScreenshot","_app$value3","onMounted","hideAppDetails","NcAppSidebar","AppDescriptionTab","AppDetailsTab","AppReleasesTab","_setup$appIcon"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"settings-apps-view-4529.js?v=114316009107c5c2ca02","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/constants/AppsConstants.js","webpack:///nextcloud/apps/settings/src/service/rebuild-navigation.js","webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/constants/AppstoreCategoryIcons.ts","webpack:///nextcloud/apps/settings/src/store/apps-store.ts","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=09f30db0&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=style&index=0&id=618752df&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?af1e","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/SvgFilterMixin.vue?5bcd","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?854e","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?a9a1","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?d837","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?74e8","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?4d91","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?26fd","webpack:///nextcloud/apps/settings/src/views/AppStore.vue","webpack:///nextcloud/node_modules/p-limit/index.js","webpack:///nextcloud/apps/settings/src/components/AppList.vue","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppList.vue?9f90","webpack://nextcloud/./apps/settings/src/components/AppList.vue?8acf","webpack://nextcloud/./apps/settings/src/components/AppList.vue?ee21","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue","webpack:///nextcloud/apps/settings/src/utils/appDiscoverParser.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?ee0a","webpack://nextcloud/./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?0759","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?9deb","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?47b2","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?b382","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?6e6f","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?c49c","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?26cf","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?d299","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?4cfb","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?311d","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?9ed4","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?b564","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?d4df","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?c0dd","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?d492","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/composables/useAppIcon.ts","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?99b3","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?5373"],"sourcesContent":["/**\n * @copyright 2022, Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @author Julia Kirschenheuter <julia.kirschenheuter@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/** Enum of verification constants, according to Apps */\nexport const APPS_SECTION_ENUM = Object.freeze({\n\tdiscover: t('settings', 'Discover'),\n\tinstalled: t('settings', 'Your apps'),\n\tenabled: t('settings', 'Active apps'),\n\tdisabled: t('settings', 'Disabled apps'),\n\tupdates: t('settings', 'Updates'),\n\t'app-bundles': t('settings', 'App bundles'),\n\tfeatured: t('settings', 'Featured apps'),\n\tsupported: t('settings', 'Supported apps'), // From subscription\n})\n","import axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { emit } from '@nextcloud/event-bus'\n\nexport default () => {\n\treturn axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')\n\t\t.then(({ data }) => {\n\t\t\tif (data.ocs.meta.statuscode !== 200) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\temit('nextcloud:app-menu.refresh', { apps: data.ocs.data })\n\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t})\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport rebuildNavigation from '../service/rebuild-navigation.js'\n\nexport default {\n\tcomputed: {\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tinstalling() {\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable')\n\t\t},\n\t\tforceEnableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Allow untested app')\n\t\t\t}\n\t\t\treturn t('settings', 'Allow untested app')\n\t\t},\n\t\tenableButtonTooltip() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t\tforceEnableButtonTooltip() {\n\t\t\tconst base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.')\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn base + ' ' + t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn base\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.app && this.app.groups && this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasyncFindGroup(query) {\n\t\t\treturn this.$store.dispatch('getGroups', { search: query, limit: 5, offset: 0 })\n\t\t},\n\t\tisLimitedToGroups(app) {\n\t\t\tif (this.app.groups.length || this.groupCheckedAppsData) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (!this.groupCheckedAppsData) {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: [] })\n\t\t\t}\n\t\t},\n\t\tcanLimitToGroups(app) {\n\t\t\tif ((app.types && app.types.includes('filesystem'))\n\t\t\t\t\t|| app.types.includes('prelogin')\n\t\t\t\t\t|| app.types.includes('authentication')\n\t\t\t\t\t|| app.types.includes('logging')\n\t\t\t\t\t|| app.types.includes('prevent_group_restriction')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\taddGroupLimitation(groupArray) {\n\t\t\tconst group = groupArray.pop()\n\t\t\tconst groups = this.app.groups.concat([]).concat([group.id])\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups })\n\t\t},\n\t\tremoveGroupLimitation(group) {\n\t\t\tconst currentGroups = this.app.groups.concat([])\n\t\t\tconst index = currentGroups.indexOf(group.id)\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentGroups.splice(index, 1)\n\t\t\t}\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })\n\t\t},\n\t\tforceEnable(appId) {\n\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tenable(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tdisable(appId) {\n\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tremove(appId) {\n\t\t\tthis.$store.dispatch('uninstallApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tinstall(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tupdate(appId) {\n\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { mdiAccount, mdiAccountMultiple, mdiArchive, mdiCheck, mdiClipboardFlow, mdiClose, mdiCog, mdiControllerClassic, mdiDownload, mdiFileDocumentEdit, mdiFolder, mdiKey, mdiMagnify, mdiMonitorEye, mdiMultimedia, mdiOfficeBuilding, mdiOpenInApp, mdiSecurity, mdiStar, mdiStarCircleOutline, mdiStarShooting, mdiTools, mdiViewDashboard, } from '@mdi/js';\n/**\n * SVG paths used for appstore category icons\n */\nexport default Object.freeze({\n // system special categories\n discover: mdiStarCircleOutline,\n installed: mdiAccount,\n enabled: mdiCheck,\n disabled: mdiClose,\n bundles: mdiArchive,\n supported: mdiStarShooting,\n featured: mdiStar,\n updates: mdiDownload,\n // generic categories\n auth: mdiKey,\n customization: mdiCog,\n dashboard: mdiViewDashboard,\n files: mdiFolder,\n games: mdiControllerClassic,\n integration: mdiOpenInApp,\n monitoring: mdiMonitorEye,\n multimedia: mdiMultimedia,\n office: mdiFileDocumentEdit,\n organization: mdiOfficeBuilding,\n search: mdiMagnify,\n security: mdiSecurity,\n social: mdiAccountMultiple,\n tools: mdiTools,\n workflow: mdiClipboardFlow,\n});\n","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { showError } from '@nextcloud/dialogs';\nimport { loadState } from '@nextcloud/initial-state';\nimport { translate as t } from '@nextcloud/l10n';\nimport { generateUrl } from '@nextcloud/router';\nimport { defineStore } from 'pinia';\nimport axios from '@nextcloud/axios';\nimport logger from '../logger';\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts';\nconst showApiError = () => showError(t('settings', 'An error occurred during the request. Unable to proceed.'));\nexport const useAppsStore = defineStore('settings-apps', {\n state: () => ({\n apps: [],\n categories: [],\n updateCount: loadState('settings', 'appstoreUpdateCount', 0),\n loading: {\n apps: false,\n categories: false,\n },\n loadingList: false,\n gettingCategoriesPromise: null,\n }),\n actions: {\n async loadCategories(force = false) {\n if (this.categories.length > 0 && !force) {\n return;\n }\n try {\n this.loading.categories = true;\n const { data: categories } = await axios.get(generateUrl('settings/apps/categories'));\n for (const category of categories) {\n category.icon = APPSTORE_CATEGORY_ICONS[category.id] ?? '';\n }\n this.$patch({\n categories,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.categories = false;\n }\n },\n async loadApps(force = false) {\n if (this.apps.length > 0 && !force) {\n return;\n }\n try {\n this.loading.apps = true;\n const { data } = await axios.get(generateUrl('settings/apps/list'));\n this.$patch({\n apps: data.apps,\n });\n }\n catch (error) {\n logger.error(error);\n showApiError();\n }\n finally {\n this.loading.apps = false;\n }\n },\n getCategoryById(categoryId) {\n return this.categories.find(({ id }) => id === categoryId) ?? null;\n },\n getAppById(appId) {\n return this.apps.find(({ id }) => id === appId) ?? null;\n },\n },\n});\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.apps-list[data-v-73184220]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-73184220]{transition:transform 1s}.apps-list #app-list-update-all[data-v-73184220]{margin-left:10px}.apps-list__toolbar[data-v-73184220]{height:60px;padding:8px;padding-left:60px;width:100%;background-color:var(--color-main-background);position:sticky;top:0;z-index:1;display:flex;align-items:center}.apps-list--list-view[data-v-73184220]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-73184220]{width:100%}.apps-list__store-container[data-v-73184220]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-73184220]{display:flex;align-items:center;margin:20px 10px 20px 0}.apps-list__bundle-header[data-v-73184220]{margin:0 10px 0 50px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}#apps-list-search .app-item h2[data-v-73184220]{margin-bottom:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList.vue\"],\"names\":[],\"mappings\":\"AAIA,4BACC,YAAA,CACA,cAAA,CACA,wBAAA,CAGA,kCACC,uBAAA,CAGD,iDACC,gBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,iBApBe,CAqBf,UAAA,CACA,6CAAA,CACA,eAAA,CACA,KAAA,CACA,SAAA,CACA,YAAA,CACA,kBAAA,CAGD,uCACC,mBAAA,CAEA,iBAAA,CAGD,4CACC,UAAA,CAGD,6CACC,YAAA,CACA,cAAA,CAGD,4CACC,YAAA,CACA,kBAAA,CACA,uBAAA,CAGD,2CACC,oBAAA,CACA,gBAAA,CACA,cAAA,CACA,gBAAA,CACA,6BAAA,CAMA,gDACC,eAAA\",\"sourcesContent\":[\"\\n$toolbar-padding: 8px;\\n$toolbar-height: 44px + $toolbar-padding * 2;\\n\\n.apps-list {\\n\\tdisplay: flex;\\n\\tflex-wrap: wrap;\\n\\talign-content: flex-start;\\n\\n\\t// For transition group\\n\\t&--move {\\n\\t\\ttransition: transform 1s;\\n\\t}\\n\\n\\t#app-list-update-all {\\n\\t\\tmargin-left: 10px;\\n\\t}\\n\\n\\t&__toolbar {\\n\\t\\theight: $toolbar-height;\\n\\t\\tpadding: $toolbar-padding;\\n\\t\\t// Leave room for app-navigation-toggle\\n\\t\\tpadding-left: $toolbar-height;\\n\\t\\twidth: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tposition: sticky;\\n\\t\\ttop: 0;\\n\\t\\tz-index: 1;\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t}\\n\\n\\t&--list-view {\\n\\t\\tmargin-bottom: 100px;\\n\\t\\t// For positioning link overlay on rows\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__list-container {\\n\\t\\twidth: 100%;\\n\\t}\\n\\n\\t&__store-container {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-wrap: wrap;\\n\\t}\\n\\n\\t&__bundle-heading {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmargin: 20px 10px 20px 0;\\n\\t}\\n\\n\\t&__bundle-header {\\n\\t\\tmargin: 0 10px 0 50px;\\n\\t\\tfont-weight: bold;\\n\\t\\tfont-size: 20px;\\n\\t\\tline-height: 30px;\\n\\t\\tcolor: var(--color-text-light);\\n\\t}\\n}\\n\\n#apps-list-search {\\n\\t.app-item {\\n\\t\\th2 {\\n\\t\\t\\tmargin-bottom: 0;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-item[data-v-09f30db0]{position:relative}.app-item[data-v-09f30db0]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-09f30db0]{--app-item-padding: calc(var(--default-grid-baseline) * 2);--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2)}.app-item--list-view.app-item--selected[data-v-09f30db0]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-09f30db0]{vertical-align:middle;border-bottom:1px solid var(--color-border);padding:var(--app-item-padding);height:var(--app-item-height)}.app-item--list-view .app-image[data-v-09f30db0]{width:var(--default-clickable-area);height:auto;text-align:right}.app-item--list-view .app-image-icon svg[data-v-09f30db0],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-09f30db0]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-09f30db0]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-09f30db0]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-09f30db0]::after{content:\"\";position:absolute;left:0;right:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-09f30db0]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-09f30db0]{display:inline-block;top:4px;margin-right:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-09f30db0],.app-item--list-view .app-level[data-v-09f30db0]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-09f30db0]{display:none}}.app-item--store-view[data-v-09f30db0]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-09f30db0]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-09f30db0]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-09f30db0]{margin:5px 0}.app-item--store-view .app-name--link[data-v-09f30db0]::after{content:\"\";position:absolute;top:0;left:0;right:0;bottom:0}.app-item--store-view .app-actions[data-v-09f30db0]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-09f30db0]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-09f30db0]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-09f30db0]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-09f30db0]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-09f30db0]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-09f30db0]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-09f30db0]{width:100%}}.app-icon[data-v-09f30db0]{filter:var(--background-invert-if-bright)}.app-image[data-v-09f30db0]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-09f30db0]{width:100%}.app-version[data-v-09f30db0]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppItem.vue\"],\"names\":[],\"mappings\":\"AAIA,2BACC,iBAAA,CAEA,iCACC,6CAAA,CAGD,sCACC,0DAAA,CACA,oFAAA,CAEA,yDACC,6CAAA,CAGD,wCACC,qBAAA,CACA,2CAAA,CACA,+BAAA,CACA,6BAAA,CAGD,iDACC,mCAAA,CACA,WAAA,CACA,gBAAA,CAGD,oIAEC,cAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,qBAAA,CACA,oBAAA,CAGD,gDACC,iCAAA,CAGD,sDACC,6BAAA,CACA,YAAA,CACA,kBAAA,CAMD,6DACC,UAAA,CACA,iBAAA,CACA,MAAA,CACA,OAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,iBAAA,CAKF,0CACC,oGAEC,YAAA,CAAA,CAKF,0CACC,mDACC,YAAA,CAAA,CAKH,uCACC,YAAA,CAEA,2EACC,UAAA,CACA,YAAA,CACA,oBAAA,CACA,UAAA,CAGD,2DACC,iBAAA,CACA,WAAA,CAEA,UAAA,CACA,WAAA,CACA,UAAA,CAGD,iDACC,YAAA,CAGD,8DACC,UAAA,CACA,iBAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CAGD,oDACC,aAAA,CAGD,2CApCD,uCAqCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA5CD,uCA6CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CApDD,uCAqDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA5DD,uCA6DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CApED,uCAqEE,SAAA,CAAA,CAGD,0CAxED,uCAyEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA\",\"sourcesContent\":[\"\\n@use '../../../../../core/css/variables.scss' as variables;\\n@use 'sass:math';\\n\\n.app-item {\\n\\tposition: relative;\\n\\n\\t&:hover {\\n\\t\\tbackground-color: var(--color-background-dark);\\n\\t}\\n\\n\\t&--list-view {\\n\\t\\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\\n\\t\\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\\n\\n\\t\\t&.app-item--selected {\\n\\t\\t\\tbackground-color: var(--color-background-dark);\\n\\t\\t}\\n\\n\\t\\t> * {\\n\\t\\t\\tvertical-align: middle;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t\\tpadding: var(--app-item-padding);\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t}\\n\\n\\t\\t.app-image {\\n\\t\\t\\twidth: var(--default-clickable-area);\\n\\t\\t\\theight: auto;\\n\\t\\t\\ttext-align: right;\\n\\t\\t}\\n\\n\\t\\t.app-image-icon svg,\\n\\t\\t.app-image-icon .icon-settings-dark {\\n\\t\\t\\tmargin-top: 5px;\\n\\t\\t\\twidth: 20px;\\n\\t\\t\\theight: 20px;\\n\\t\\t\\topacity: .5;\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t}\\n\\n\\t\\t.app-name {\\n\\t\\t\\tpadding: 0 var(--app-item-padding);\\n\\t\\t}\\n\\n\\t\\t.app-name--link {\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t}\\n\\n\\t\\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\\n\\t\\t// So we need to manually position it relative to the table container and cell\\n\\t\\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\\n\\t\\t.app-name--link::after {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tright: 0;\\n\\t\\t\\theight: var(--app-item-height);\\n\\t\\t}\\n\\n\\t\\t.app-actions {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tgap: var(--app-item-padding);\\n\\t\\t\\tflex-wrap: wrap;\\n\\t\\t\\tjustify-content: end;\\n\\n\\t\\t\\t.icon-loading-small {\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\t\\ttop: 4px;\\n\\t\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* hide app version and level on narrower screens */\\n\\t\\t@media only screen and (max-width: 900px) {\\n\\t\\t\\t.app-version,\\n\\t\\t\\t.app-level {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\\n\\t\\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\\n\\t\\t\\t.app-actions {\\n\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&--store-view {\\n\\t\\tpadding: 30px;\\n\\n\\t\\t.app-image-icon .icon-settings-dark {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: 150px;\\n\\t\\t\\tbackground-size: 45px;\\n\\t\\t\\topacity: 0.5;\\n\\t\\t}\\n\\n\\t\\t.app-image-icon svg {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tbottom: 43px;\\n\\t\\t\\t/* position halfway vertically */\\n\\t\\t\\twidth: 64px;\\n\\t\\t\\theight: 64px;\\n\\t\\t\\topacity: .1;\\n\\t\\t}\\n\\n\\t\\t.app-name {\\n\\t\\t\\tmargin: 5px 0;\\n\\t\\t}\\n\\n\\t\\t.app-name--link::after {\\n\\t\\t\\tcontent: '';\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tright: 0;\\n\\t\\t\\tbottom: 0;\\n\\t\\t}\\n\\n\\t\\t.app-actions {\\n\\t\\t\\tmargin: 10px 0;\\n\\t\\t}\\n\\n\\t\\t@media only screen and (min-width: 1601px) {\\n\\t\\t\\twidth: 25%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 33%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 1600px) {\\n\\t\\t\\twidth: 25%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 33%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 1400px) {\\n\\t\\t\\twidth: 33%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 50%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 900px) {\\n\\t\\t\\twidth: 50%;\\n\\n\\t\\t\\t&.app-item--with-sidebar {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: variables.$breakpoint-mobile) {\\n\\t\\t\\twidth: 50%;\\n\\t\\t}\\n\\n\\t\\t@media only screen and (max-width: 480px) {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t}\\n}\\n\\n.app-icon {\\n\\tfilter: var(--background-invert-if-bright);\\n}\\n\\n.app-image {\\n\\tposition: relative;\\n\\theight: 150px;\\n\\topacity: 1;\\n\\toverflow: hidden;\\n\\n\\timg {\\n\\t\\twidth: 100%;\\n\\t}\\n}\\n\\n.app-version {\\n\\tcolor: var(--color-text-maxcontrast);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-level-badge[data-v-3590dbeb]{color:var(--color-text-maxcontrast);background-color:rgba(0,0,0,0);border:1px solid var(--color-text-maxcontrast);border-radius:var(--border-radius);display:flex;flex-direction:row;gap:6px;padding:3px 6px;width:fit-content}.app-level-badge--supported[data-v-3590dbeb]{border-color:var(--color-success);color:var(--color-success)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppLevelBadge.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA,CAEA,6CACC,iCAAA,CACA,0BAAA\",\"sourcesContent\":[\"\\n.app-level-badge {\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tbackground-color: transparent;\\n\\tborder: 1px solid var(--color-text-maxcontrast);\\n\\tborder-radius: var(--border-radius);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: row;\\n\\tgap: 6px;\\n\\tpadding: 3px 6px;\\n\\twidth: fit-content;\\n\\n\\t&--supported {\\n\\t\\tborder-color: var(--color-success);\\n\\t\\tcolor: var(--color-success);\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-discover[data-v-618752df]{max-width:1008px;margin-inline:auto;padding-inline:54px;padding-block-end:var(--default-clickable-area, 44px);display:flex;flex-direction:column;gap:var(--default-clickable-area, 44px)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue\"],\"names\":[],\"mappings\":\"AACA,+BACC,gBAAA,CACA,kBAAA,CACA,mBAAA,CAEA,qDAAA,CAEA,YAAA,CACA,qBAAA,CACA,uCAAA\",\"sourcesContent\":[\"\\n.app-discover {\\n\\tmax-width: 1008px; /* 900px + 2x 54px padding for the carousel controls */\\n\\tmargin-inline: auto;\\n\\tpadding-inline: 54px;\\n\\t/* Padding required to make last element not bound to the bottom */\\n\\tpadding-block-end: var(--default-clickable-area, 44px);\\n\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: var(--default-clickable-area, 44px);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-description[data-v-fccce5ae]{padding:12px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue\"],\"names\":[],\"mappings\":\"AACA,kCACC,YAAA\",\"sourcesContent\":[\"\\n.app-description {\\n\\tpadding: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-details[data-v-24864562]{padding:20px}.app-details__actions-manage[data-v-24864562]{display:flex}.app-details__actions-manage input[data-v-24864562]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-24864562]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-24864562]{margin-top:15px}.app-details__section h4[data-v-24864562]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-24864562]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-24864562]{text-decoration:underline}.app-details__documentation li[data-v-24864562]{padding-inline-start:20px}.app-details__documentation li[data-v-24864562]::before{width:5px;height:5px;border-radius:100%;background-color:var(--color-main-text);content:\"\";float:inline-start;margin-inline-start:-13px;position:relative;top:10px}.force[data-v-24864562]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-24864562]:hover,.force[data-v-24864562]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}.missing-dependencies[data-v-24864562]{list-style:initial;list-style-type:initial;list-style-position:inside}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue\"],\"names\":[],\"mappings\":\"AACA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,uCACC,mCAAA,CAGD,uCACC,eAAA,CAEA,0CACC,cAAA,CACA,gBAAA,CACA,oBAAA,CAIF,wCACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,QAAA,CAIA,+CACC,yBAAA,CAED,gDACC,yBAAA,CAEA,wDACC,SAAA,CACA,UAAA,CACA,kBAAA,CACA,uCAAA,CACA,UAAA,CACA,kBAAA,CACA,yBAAA,CACA,iBAAA,CACA,QAAA,CAMJ,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA,CAGD,uCACC,kBAAA,CACA,uBAAA,CACA,0BAAA\",\"sourcesContent\":[\"\\n.app-details {\\n\\tpadding: 20px;\\n\\n\\t&__actions {\\n\\t\\t// app management\\n\\t\\t&-manage {\\n\\t\\t\\t// if too many, shrink them and ellipsis\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tinput {\\n\\t\\t\\t\\tflex: 0 1 auto;\\n\\t\\t\\t\\tmin-width: 0;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t&__authors {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__section {\\n\\t\\tmargin-top: 15px;\\n\\n\\t\\th4 {\\n\\t\\t\\tfont-size: 16px;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin-block-end: 5px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__interact {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__documentation {\\n\\t\\ta {\\n\\t\\t\\ttext-decoration: underline;\\n\\t\\t}\\n\\t\\tli {\\n\\t\\t\\tpadding-inline-start: 20px;\\n\\n\\t\\t\\t&::before {\\n\\t\\t\\t\\twidth: 5px;\\n\\t\\t\\t\\theight: 5px;\\n\\t\\t\\t\\tborder-radius: 100%;\\n\\t\\t\\t\\tbackground-color: var(--color-main-text);\\n\\t\\t\\t\\tcontent: \\\"\\\";\\n\\t\\t\\t\\tfloat: inline-start;\\n\\t\\t\\t\\tmargin-inline-start: -13px;\\n\\t\\t\\t\\tposition: relative;\\n\\t\\t\\t\\ttop: 10px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\n.force {\\n\\tcolor: var(--color-error);\\n\\tborder-color: var(--color-error);\\n\\tbackground: var(--color-main-background);\\n}\\n.force:hover,\\n.force:active {\\n\\tcolor: var(--color-main-background);\\n\\tborder-color: var(--color-error) !important;\\n\\tbackground: var(--color-error);\\n}\\n\\n.missing-dependencies {\\n\\tlist-style: initial;\\n\\tlist-style-type: initial;\\n\\tlist-style-position: inside;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-sidebar-tabs__release h2[data-v-2261a93d]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-2261a93d] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-2261a93d] h4{font-size:17px}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue\"],\"names\":[],\"mappings\":\"AAEC,+CACC,2CAAA,CACA,cAAA,CAKA,oDACC,cAAA,CAED,oDACC,cAAA\",\"sourcesContent\":[\"\\n.app-sidebar-tabs__release {\\n\\th2 {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\tfont-size: 24px;\\n\\t}\\n\\n\\t&-text {\\n\\t\\t// Overwrite changelog heading styles\\n\\t\\t:deep(h3) {\\n\\t\\t\\tfont-size: 20px;\\n\\t\\t}\\n\\t\\t:deep(h4) {\\n\\t\\t\\tfont-size: 17px;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.settings-markdown[data-v-7c5c8e59] h1,.settings-markdown[data-v-7c5c8e59] h2,.settings-markdown[data-v-7c5c8e59] h3,.settings-markdown[data-v-7c5c8e59] h4,.settings-markdown[data-v-7c5c8e59] h5,.settings-markdown[data-v-7c5c8e59] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-7c5c8e59] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-7c5c8e59] h3{font-size:24px}.settings-markdown[data-v-7c5c8e59] h4{font-size:21px}.settings-markdown[data-v-7c5c8e59] h5{font-size:17px}.settings-markdown[data-v-7c5c8e59] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-7c5c8e59] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-7c5c8e59] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-7c5c8e59] li{position:relative}.settings-markdown[data-v-7c5c8e59] ul,.settings-markdown[data-v-7c5c8e59] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-7c5c8e59] ul li{list-style-type:disc}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-7c5c8e59] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-7c5c8e59] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Markdown.vue\"],\"names\":[],\"mappings\":\"AAGA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n.settings-markdown::v-deep {\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n\\tfont-weight: 600;\\n\\tline-height: 120%;\\n\\tmargin-top: 24px;\\n\\tmargin-bottom: 12px;\\n\\tcolor: var(--color-main-text);\\n}\\n\\nh1 {\\n\\tfont-size: 36px;\\n\\tmargin-top: 48px;\\n}\\n\\nh2 {\\n\\tfont-size: 28px;\\n\\tmargin-top: 48px;\\n}\\n\\nh3 {\\n\\tfont-size: 24px;\\n}\\n\\nh4 {\\n\\tfont-size: 21px;\\n}\\n\\nh5 {\\n\\tfont-size: 17px;\\n}\\n\\nh6 {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\npre {\\n\\twhite-space: pre;\\n\\toverflow-x: auto;\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 1em 1.3em;\\n\\tmargin-bottom: 1em;\\n}\\n\\np code {\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: .1em .3em;\\n}\\n\\nli {\\n\\tposition: relative;\\n}\\n\\nul, ol {\\n\\tpadding-left: 10px;\\n\\tmargin-left: 10px;\\n}\\n\\nul li {\\n\\tlist-style-type: disc;\\n}\\n\\nul > li > ul > li {\\n\\tlist-style-type: circle;\\n}\\n\\nul > li > ul > li ul li {\\n\\tlist-style-type: square;\\n}\\n\\nblockquote {\\n\\tpadding-left: 1em;\\n\\tborder-left: 4px solid var(--color-primary-element);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\n\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.app-sidebar--with-screenshot[data-v-31ecb666] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-31ecb666]{width:100%;height:100%}.app-sidebar__badges[data-v-31ecb666]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-31ecb666]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreSidebar.vue\"],\"names\":[],\"mappings\":\"AAIE,2EACC,qBAAA,CAIF,6CAEC,UAAA,CACA,WAAA,CAGD,sCACC,YAAA,CACA,kBAAA,CACA,QAAA,CAGD,uCACC,mCAAA\",\"sourcesContent\":[\"\\n.app-sidebar {\\n\\t// If a screenshot is available it should cover the whole figure\\n\\t&--with-screenshot {\\n\\t\\t:deep(.app-sidebar-header__figure) {\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t}\\n\\t}\\n\\n\\t&__fallback-icon {\\n\\t\\t// both 100% to center the icon\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t}\\n\\n\\t&__badges {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: row;\\n\\t\\tgap: 12px;\\n\\t}\\n\\n\\t&__version {\\n\\t\\tcolor: var(--color-text-maxcontrast);\\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.app-score__wrapper[data-v-7d015114] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-7d015114] {\n\t\tvertical-align: text-bottom;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppScore.vue\"],\"names\":[],\"mappings\":\";AAiFA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n - @author Ferdinand Thiessen <opensource@fthiessen.de>\\n -\\n - @license AGPL-3.0-or-later\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<span role=\\\"img\\\"\\n\\t\\t:aria-label=\\\"title\\\"\\n\\t\\t:title=\\\"title\\\"\\n\\t\\tclass=\\\"app-score__wrapper\\\">\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in fullStars\\\"\\n\\t\\t\\t:key=\\\"`full-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStar\\\"\\n\\t\\t\\tinline />\\n\\t\\t<NcIconSvgWrapper v-if=\\\"hasHalfStar\\\" :path=\\\"mdiStarHalfFull\\\" inline />\\n\\t\\t<NcIconSvgWrapper v-for=\\\"index in emptyStars\\\"\\n\\t\\t\\t:key=\\\"`empty-star-${index}`\\\"\\n\\t\\t\\t:path=\\\"mdiStarOutline\\\"\\n\\t\\t\\tinline />\\n\\t</span>\\n</template>\\n<script lang=\\\"ts\\\">\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport { mdiStar, mdiStarHalfFull, mdiStarOutline } from '@mdi/js'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { defineComponent } from 'vue'\\n\\nexport default defineComponent({\\n\\tname: 'AppScore',\\n\\tcomponents: {\\n\\t\\tNcIconSvgWrapper,\\n\\t},\\n\\tprops: {\\n\\t\\tscore: {\\n\\t\\t\\ttype: Number,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\tsetup() {\\n\\t\\treturn {\\n\\t\\t\\tmdiStar,\\n\\t\\t\\tmdiStarHalfFull,\\n\\t\\t\\tmdiStarOutline,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\ttitle() {\\n\\t\\t\\tconst appScore = (this.score * 5).toFixed(1)\\n\\t\\t\\treturn t('settings', 'Community rating: {score}/5', { score: appScore })\\n\\t\\t},\\n\\t\\tfullStars() {\\n\\t\\t\\treturn Math.floor(this.score * 5 + 0.25)\\n\\t\\t},\\n\\t\\temptyStars() {\\n\\t\\t\\treturn Math.min(Math.floor((1 - this.score) * 5 + 0.25), 5 - this.fullStars)\\n\\t\\t},\\n\\t\\thasHalfStar() {\\n\\t\\t\\treturn (this.fullStars + this.emptyStars) < 5\\n\\t\\t},\\n\\t},\\n})\\n</script>\\n<style scoped>\\n.app-score__wrapper {\\n\\tdisplay: inline-flex;\\n\\tcolor: var(--color-favorite, #a08b00);\\n\\n\\t> * {\\n\\t\\tvertical-align: text-bottom;\\n\\t}\\n}\\n</style>\\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.empty-content__loading[data-v-a75d4530] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-a75d4530] {\n\tmargin-block-start: var(--app-navigation-padding);\n\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\n\tmin-height: var(--default-clickable-area);\n\tline-height: var(--default-clickable-area);\n\tvertical-align: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStore.vue\"],\"names\":[],\"mappings\":\";AAoFA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA\",\"sourcesContent\":[\"<!--\\n\\t- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n\\t-\\n\\t- @author Julius Härtl <jus@bitgrid.net>\\n\\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\\n\\t-\\n\\t- @license AGPL-3.0-or-later\\n\\t-\\n\\t- This program is free software: you can redistribute it and/or modify\\n\\t- it under the terms of the GNU Affero General Public License as\\n\\t- published by the Free Software Foundation, either version 3 of the\\n\\t- License, or (at your option) any later version.\\n\\t-\\n\\t- This program is distributed in the hope that it will be useful,\\n\\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\\n\\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n\\t- GNU Affero General Public License for more details.\\n\\t-\\n\\t- You should have received a copy of the GNU Affero General Public License\\n\\t- along with this program. If not, see <http://www.gnu.org/licenses/>.\\n\\t-\\n\\t-->\\n\\n<template>\\n\\t<!-- Apps list -->\\n\\t<NcAppContent class=\\\"app-settings-content\\\"\\n\\t\\t:page-heading=\\\"appStoreLabel\\\">\\n\\t\\t<h2 class=\\\"app-settings-content__label\\\" v-text=\\\"viewLabel\\\" />\\n\\n\\t\\t<AppStoreDiscoverSection v-if=\\\"currentCategory === 'discover'\\\" />\\n\\t\\t<NcEmptyContent v-else-if=\\\"isLoading\\\"\\n\\t\\t\\tclass=\\\"empty-content__loading\\\"\\n\\t\\t\\t:name=\\\"t('settings', 'Loading app list')\\\">\\n\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"64\\\" />\\n\\t\\t\\t</template>\\n\\t\\t</NcEmptyContent>\\n\\t\\t<AppList v-else :category=\\\"currentCategory\\\" />\\n\\t</NcAppContent>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, getCurrentInstance, onBeforeMount, watchEffect } from 'vue'\\nimport { useRoute } from 'vue-router/composables'\\n\\nimport { useAppsStore } from '../store/apps-store'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\n\\nimport NcAppContent from '@nextcloud/vue/dist/Components/NcAppContent.js'\\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\nimport AppList from '../components/AppList.vue'\\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\\n\\nconst route = useRoute()\\nconst store = useAppsStore()\\n\\n/**\\n * ID of the current active category, default is `discover`\\n */\\nconst currentCategory = computed(() => route.params?.category ?? 'discover')\\n\\nconst appStoreLabel = t('settings', 'App Store')\\nconst viewLabel = computed(() => APPS_SECTION_ENUM[currentCategory.value] ?? store.getCategoryById(currentCategory.value)?.displayName ?? appStoreLabel)\\n\\nwatchEffect(() => {\\n\\twindow.document.title = `${viewLabel.value} - ${appStoreLabel} - Nextcloud`\\n})\\n\\n// TODO this part should be migrated to pinia\\nconst instance = getCurrentInstance()\\n/** Is the app list loading */\\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\\nconst isLoading = computed(() => (instance?.proxy as any).$store.getters.loading('list'))\\nonBeforeMount(() => {\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getCategories', { shouldRefetchCategories: true });\\n\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\t(instance?.proxy as any).$store.dispatch('getAllApps')\\n})\\n</script>\\n\\n<style scoped>\\n.empty-content__loading {\\n\\theight: 100%;\\n}\\n\\n.app-settings-content__label {\\n\\tmargin-block-start: var(--app-navigation-padding);\\n\\tmargin-inline-start: calc(var(--default-clickable-area) + var(--app-navigation-padding) * 2);\\n\\tmin-height: var(--default-clickable-area);\\n\\tline-height: var(--default-clickable-area);\\n\\tvertical-align: center;\\n}\\n</style>\\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/* The categories-loading indicator */\n.categories--loading[data-v-d15221f2] {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/AppStoreNavigation.vue\"],\"names\":[],\"mappings\":\";AAsIA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<!-- Categories & filters -->\\n\\t<NcAppNavigation :aria-label=\\\"t('settings', 'Apps')\\\">\\n\\t\\t<template #list>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-discover\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'discover'} }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.discover\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.discover\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-installed\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'installed'} }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.installed\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.installed\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-enabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'enabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.enabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.enabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-disabled\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'disabled' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.disabled\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.disabled\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem v-if=\\\"updateCount > 0\\\"\\n\\t\\t\\t\\tid=\\\"app-category-updates\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'updates' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.updates\\\">\\n\\t\\t\\t\\t<template #counter>\\n\\t\\t\\t\\t\\t<NcCounterBubble>{{ updateCount }}</NcCounterBubble>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.updates\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-your-bundles\\\"\\n\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'app-bundles' } }\\\"\\n\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM['app-bundles']\\\">\\n\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.bundles\\\" />\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t<NcAppNavigationSpacer />\\n\\n\\t\\t\\t<!-- App store categories -->\\n\\t\\t\\t<li v-if=\\\"appstoreEnabled && categoriesLoading\\\" class=\\\"categories--loading\\\">\\n\\t\\t\\t\\t<NcLoadingIcon :size=\\\"20\\\" :aria-label=\\\"t('settings', 'Loading categories')\\\" />\\n\\t\\t\\t</li>\\n\\t\\t\\t<template v-else-if=\\\"appstoreEnabled && !categoriesLoading\\\">\\n\\t\\t\\t\\t<NcAppNavigationItem v-if=\\\"isSubscribed\\\"\\n\\t\\t\\t\\t\\tid=\\\"app-category-supported\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'supported' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.supported\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.supported\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t\\t<NcAppNavigationItem id=\\\"app-category-featured\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{ name: 'apps-category', params: { category: 'featured' } }\\\"\\n\\t\\t\\t\\t\\t:name=\\\"APPS_SECTION_ENUM.featured\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"APPSTORE_CATEGORY_ICONS.featured\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\n\\t\\t\\t\\t<NcAppNavigationItem v-for=\\\"category in categories\\\"\\n\\t\\t\\t\\t\\t:id=\\\"`app-category-${category.id}`\\\"\\n\\t\\t\\t\\t\\t:key=\\\"category.id\\\"\\n\\t\\t\\t\\t\\t:name=\\\"category.displayName\\\"\\n\\t\\t\\t\\t\\t:to=\\\"{\\n\\t\\t\\t\\t\\t\\tname: 'apps-category',\\n\\t\\t\\t\\t\\t\\tparams: { category: category.id },\\n\\t\\t\\t\\t\\t}\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"category.icon\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t</NcAppNavigationItem>\\n\\t\\t\\t</template>\\n\\n\\t\\t\\t<NcAppNavigationItem id=\\\"app-developer-docs\\\"\\n\\t\\t\\t\\t:name=\\\"t('settings', 'Developer documentation ↗')\\\"\\n\\t\\t\\t\\t:href=\\\"developerDocsUrl\\\" />\\n\\t\\t</template>\\n\\t</NcAppNavigation>\\n</template>\\n\\n<script setup lang=\\\"ts\\\">\\nimport { loadState } from '@nextcloud/initial-state'\\nimport { translate as t } from '@nextcloud/l10n'\\nimport { computed, onBeforeMount } from 'vue'\\nimport { APPS_SECTION_ENUM } from '../constants/AppsConstants'\\nimport { useAppsStore } from '../store/apps-store'\\n\\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\\nimport NcAppNavigationSpacer from '@nextcloud/vue/dist/Components/NcAppNavigationSpacer.js'\\nimport NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'\\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\\nimport NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js'\\n\\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts'\\n\\nconst updateCount = loadState<number>('settings', 'appstoreUpdateCount', 0)\\nconst appstoreEnabled = loadState<boolean>('settings', 'appstoreEnabled', true)\\nconst developerDocsUrl = loadState<string>('settings', 'appstoreDeveloperDocs', '')\\n\\nconst store = useAppsStore()\\nconst categories = computed(() => store.categories)\\nconst categoriesLoading = computed(() => store.loading.categories)\\n\\n/**\\n * Check if the current instance has a support subscription from the Nextcloud GmbH\\n *\\n * For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\\n */\\nconst isSubscribed = computed(() => store.apps.find(({ level }) => level === 300) !== undefined)\\n\\n// load categories when component is mounted\\nonBeforeMount(() => {\\n\\tstore.loadCategories()\\n\\tstore.loadApps()\\n})\\n</script>\\n\\n<style scoped>\\n/* The categories-loading indicator */\\n.categories--loading {\\n\\tflex: 1;\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tjustify-content: center;\\n}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.listView ? 'tr' : (_vm.inline ? 'article' : 'li'),{tag:\"component\",staticClass:\"app-item\",class:{\n\t\t'app-item--list-view': _vm.listView,\n\t\t'app-item--store-view': !_vm.listView,\n\t\t'app-item--selected': _vm.isSelected,\n\t\t'app-item--with-sidebar': _vm.withSidebar,\n\t}},[_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-image app-image-icon\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-icon`)}},[((_vm.listView && !_vm.app.preview) || (!_vm.listView && !_vm.screenshotLoaded))?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.listView && _vm.app.preview)?_c('svg',{attrs:{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"0 0 32 32\"}},[_c('image',{staticClass:\"app-icon\",attrs:{\"x\":\"0\",\"y\":\"0\",\"width\":\"32\",\"height\":\"32\",\"preserveAspectRatio\":\"xMinYMin meet\",\"xlink:href\":_vm.app.preview}})]):_vm._e(),_vm._v(\" \"),(!_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded)?_c('img',{attrs:{\"src\":_vm.app.screenshot,\"alt\":\"\"}}):_vm._e()]),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-name\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-name`)}},[_c('router-link',{staticClass:\"app-name--link\",attrs:{\"to\":{\n\t\t\t\tname: 'apps-details',\n\t\t\t\tparams: {\n\t\t\t\t\tcategory: _vm.category,\n\t\t\t\t\tid: _vm.app.id\n\t\t\t\t},\n\t\t\t},\"aria-label\":_vm.t('settings', 'Show details for {appName} app', { appName:_vm.app.name })}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.name)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(!_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-summary\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-version`)}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.summary)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.listView)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-version\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-version`)}},[(_vm.app.version)?_c('span',[_vm._v(_vm._s(_vm.app.version))]):(_vm.app.appstoreData.releases[0].version)?_c('span',[_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-level\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-level`)}},[_c('AppLevelBadge',{attrs:{\"level\":_vm.app.level}}),_vm._v(\" \"),(_vm.hasRating && !_vm.listView)?_c('AppScore',{attrs:{\"score\":_vm.app.score}}):_vm._e()],1),_vm._v(\" \"),(!_vm.inline)?_c(_vm.dataItemTag,{tag:\"component\",staticClass:\"app-actions\",attrs:{\"headers\":_vm.getDataItemHeaders(`app-table-col-actions`)}},[(_vm.app.error)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.error)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isLoading)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('NcButton',{attrs:{\"type\":\"primary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.update(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Update to {update}', {update:_vm.app.update}))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('NcButton',{staticClass:\"uninstall\",attrs:{\"type\":\"tertiary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.remove(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('NcButton',{attrs:{\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings','Disable'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('NcButton',{attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"primary\",\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.enable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.enableButtonText)+\"\\n\\t\\t\")]):(!_vm.app.active)?_c('NcButton',{attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"secondary\",\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.forceEnable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.forceEnableButtonText)+\"\\n\\t\\t\")]):_vm._e()],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'SvgFilterMixin',\n\tdata() {\n\t\treturn {\n\t\t\tfilterId: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tfilterUrl() {\n\t\t\treturn `url(#${this.filterId})`\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.filterId = 'invertIconApps-' + Math.random().toString(36).substring(2)\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js\"","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\nexport * from \"./SvgFilterMixin.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<component :is=\"listView ? 'tr' : (inline ? 'article' : 'li')\"\n\t\tclass=\"app-item\"\n\t\t:class=\"{\n\t\t\t'app-item--list-view': listView,\n\t\t\t'app-item--store-view': !listView,\n\t\t\t'app-item--selected': isSelected,\n\t\t\t'app-item--with-sidebar': withSidebar,\n\t\t}\">\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-image app-image-icon\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-icon`)\">\n\t\t\t<div v-if=\"(listView && !app.preview) || (!listView && !screenshotLoaded)\" class=\"icon-settings-dark\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\tviewBox=\"0 0 32 32\">\n\t\t\t\t<image x=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"32\"\n\t\t\t\t\theight=\"32\"\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin meet\"\n\t\t\t\t\t:xlink:href=\"app.preview\"\n\t\t\t\t\tclass=\"app-icon\" />\n\t\t\t</svg>\n\n\t\t\t<img v-if=\"!listView && app.screenshot && screenshotLoaded\" :src=\"app.screenshot\" alt=\"\">\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tclass=\"app-name\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-name`)\">\n\t\t\t<router-link class=\"app-name--link\"\n\t\t\t\t:to=\"{\n\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tcategory: category,\n\t\t\t\t\t\tid: app.id\n\t\t\t\t\t},\n\t\t\t\t}\"\n\t\t\t\t:aria-label=\"t('settings', 'Show details for {appName} app', { appName:app.name })\">\n\t\t\t\t{{ app.name }}\n\t\t\t</router-link>\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"!listView\"\n\t\t\tclass=\"app-summary\"\n\t\t\t:headers=\"getDataItemHeaders(`app-version`)\">\n\t\t\t{{ app.summary }}\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"listView\"\n\t\t\tclass=\"app-version\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-version`)\">\n\t\t\t<span v-if=\"app.version\">{{ app.version }}</span>\n\t\t\t<span v-else-if=\"app.appstoreData.releases[0].version\">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</component>\n\n\t\t<component :is=\"dataItemTag\" :headers=\"getDataItemHeaders(`app-table-col-level`)\" class=\"app-level\">\n\t\t\t<AppLevelBadge :level=\"app.level\" />\n\t\t\t<AppScore v-if=\"hasRating && !listView\" :score=\"app.score\" />\n\t\t</component>\n\t\t<component :is=\"dataItemTag\"\n\t\t\tv-if=\"!inline\"\n\t\t\t:headers=\"getDataItemHeaders(`app-table-col-actions`)\"\n\t\t\tclass=\"app-actions\">\n\t\t\t<div v-if=\"app.error\" class=\"warning\">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if=\"isLoading\" class=\"icon icon-loading-small\" />\n\t\t\t<NcButton v-if=\"app.update\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"update(app.id)\">\n\t\t\t\t{{ t('settings', 'Update to {update}', {update:app.update}) }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.canUnInstall\"\n\t\t\t\tclass=\"uninstall\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"remove(app.id)\">\n\t\t\t\t{{ t('settings', 'Remove') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"app.active\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t\t{{ t('settings','Disable') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t@click.stop=\"enable(app.id)\">\n\t\t\t\t{{ enableButtonText }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-else-if=\"!app.active\"\n\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\ttype=\"secondary\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t\t\t{{ forceEnableButtonText }}\n\t\t\t</NcButton>\n\t\t</component>\n\t</component>\n</template>\n\n<script>\nimport AppScore from './AppScore.vue'\nimport AppLevelBadge from './AppLevelBadge.vue'\nimport AppManagement from '../../mixins/AppManagement.js'\nimport SvgFilterMixin from '../SvgFilterMixin.vue'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppLevelBadge,\n\t\tAppScore,\n\t\tNcButton,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tuseBundleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\theaders: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t\tdataItemTag() {\n\t\t\treturn this.listView ? 'td' : 'div'\n\t\t},\n\t\twithSidebar() {\n\t\t\treturn !!this.$route.params.id\n\t\t},\n\t},\n\twatch: {\n\t\t'$route.params.id'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = () => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\n\t\tgetDataItemHeaders(columnName) {\n\t\t\treturn this.useBundleView ? [this.headers, columnName].join(' ') : null\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n@use '../../../../../core/css/variables.scss' as variables;\n@use 'sass:math';\n\n.app-item {\n\tposition: relative;\n\n\t&:hover {\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&--list-view {\n\t\t--app-item-padding: calc(var(--default-grid-baseline) * 2);\n\t\t--app-item-height: calc(var(--default-clickable-area) + var(--app-item-padding) * 2);\n\n\t\t&.app-item--selected {\n\t\t\tbackground-color: var(--color-background-dark);\n\t\t}\n\n\t\t> * {\n\t\t\tvertical-align: middle;\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t\tpadding: var(--app-item-padding);\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-image {\n\t\t\twidth: var(--default-clickable-area);\n\t\t\theight: auto;\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t.app-image-icon svg,\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\tmargin-top: 5px;\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\topacity: .5;\n\t\t\tbackground-size: cover;\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t.app-name {\n\t\t\tpadding: 0 var(--app-item-padding);\n\t\t}\n\n\t\t.app-name--link {\n\t\t\theight: var(--app-item-height);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t// Note: because of Safari bug, we cannot position link overlay relative to the table row\n\t\t// So we need to manually position it relative to the table container and cell\n\t\t// See: https://bugs.webkit.org/show_bug.cgi?id=240961\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\theight: var(--app-item-height);\n\t\t}\n\n\t\t.app-actions {\n\t\t\tdisplay: flex;\n\t\t\tgap: var(--app-item-padding);\n\t\t\tflex-wrap: wrap;\n\t\t\tjustify-content: end;\n\n\t\t\t.icon-loading-small {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\ttop: 4px;\n\t\t\t\tmargin-right: 10px;\n\t\t\t}\n\t\t}\n\n\t\t/* hide app version and level on narrower screens */\n\t\t@media only screen and (max-width: 900px) {\n\t\t\t.app-version,\n\t\t\t.app-level {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\n\t\t/* Hide actions on a small screen. Click on app opens fill-screen sidebar with the buttons */\n\t\t@media only screen and (max-width: math.div(variables.$breakpoint-mobile, 2)) {\n\t\t\t.app-actions {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t&--store-view {\n\t\tpadding: 30px;\n\n\t\t.app-image-icon .icon-settings-dark {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t\tbackground-size: 45px;\n\t\t\topacity: 0.5;\n\t\t}\n\n\t\t.app-image-icon svg {\n\t\t\tposition: absolute;\n\t\t\tbottom: 43px;\n\t\t\t/* position halfway vertically */\n\t\t\twidth: 64px;\n\t\t\theight: 64px;\n\t\t\topacity: .1;\n\t\t}\n\n\t\t.app-name {\n\t\t\tmargin: 5px 0;\n\t\t}\n\n\t\t.app-name--link::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t.app-actions {\n\t\t\tmargin: 10px 0;\n\t\t}\n\n\t\t@media only screen and (min-width: 1601px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1600px) {\n\t\t\twidth: 25%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 1400px) {\n\t\t\twidth: 33%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: 900px) {\n\t\t\twidth: 50%;\n\n\t\t\t&.app-item--with-sidebar {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\n\t\t@media only screen and (max-width: variables.$breakpoint-mobile) {\n\t\t\twidth: 50%;\n\t\t}\n\n\t\t@media only screen and (max-width: 480px) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.app-icon {\n\tfilter: var(--background-invert-if-bright);\n}\n\n.app-image {\n\tposition: relative;\n\theight: 150px;\n\topacity: 1;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n}\n\n.app-version {\n\tcolor: var(--color-text-maxcontrast);\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=09f30db0&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=09f30db0&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=09f30db0&scoped=true\"\nimport script from \"./AppItem.vue?vue&type=script&lang=js\"\nexport * from \"./AppItem.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppItem.vue?vue&type=style&index=0&id=09f30db0&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09f30db0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.isSupported || _setup.isFeatured)?_c('span',{staticClass:\"app-level-badge\",class:{ 'app-level-badge--supported': _setup.isSupported },attrs:{\"title\":_setup.badgeTitle}},[_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.badgeIcon,\"size\":20,\"inline\":\"\"}}),_vm._v(\"\\n\\t\"+_vm._s(_setup.badgeText)+\"\\n\")],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppLevelBadge.vue?vue&type=template&id=3590dbeb&scoped=true\"\nimport script from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppLevelBadge.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppLevelBadge.vue?vue&type=style&index=0&id=3590dbeb&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3590dbeb\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('span',{staticClass:\"app-score__wrapper\",attrs:{\"role\":\"img\",\"aria-label\":_vm.title,\"title\":_vm.title}},[_vm._l((_vm.fullStars),function(index){return _c('NcIconSvgWrapper',{key:`full-star-${index}`,attrs:{\"path\":_vm.mdiStar,\"inline\":\"\"}})}),_vm._v(\" \"),(_vm.hasHalfStar)?_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStarHalfFull,\"inline\":\"\"}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.emptyStars),function(index){return _c('NcIconSvgWrapper',{key:`empty-star-${index}`,attrs:{\"path\":_vm.mdiStarOutline,\"inline\":\"\"}})})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=7d015114&scoped=true\"\nimport script from \"./AppScore.vue?vue&type=script&lang=ts\"\nexport * from \"./AppScore.vue?vue&type=script&lang=ts\"\nimport style0 from \"./AppScore.vue?vue&type=style&index=0&id=7d015114&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7d015114\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppContent,{staticClass:\"app-settings-content\",attrs:{\"page-heading\":_setup.appStoreLabel}},[_c('h2',{staticClass:\"app-settings-content__label\",domProps:{\"textContent\":_vm._s(_setup.viewLabel)}}),_vm._v(\" \"),(_setup.currentCategory === 'discover')?_c(_setup.AppStoreDiscoverSection):(_setup.isLoading)?_c(_setup.NcEmptyContent,{staticClass:\"empty-content__loading\",attrs:{\"name\":_setup.t('settings', 'Loading app list')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_c(_setup.AppList,{attrs:{\"category\":_setup.currentCategory}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content-inner\">\n\t\t<div id=\"apps-list\"\n\t\t\tclass=\"apps-list\"\n\t\t\t:class=\"{\n\t\t\t\t'apps-list--list-view': (useBundleView || useListView),\n\t\t\t\t'apps-list--store-view': useAppStoreView,\n\t\t\t}\">\n\t\t\t<template v-if=\"useListView\">\n\t\t\t\t<div v-if=\"showUpdateAll\" class=\"apps-list__toolbar\">\n\t\t\t\t\t{{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }}\n\t\t\t\t\t<NcButton v-if=\"showUpdateAll\"\n\t\t\t\t\t\tid=\"app-list-update-all\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t@click=\"updateAll\">\n\t\t\t\t\t\t{{ n('settings', 'Update', 'Update all', counter) }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"!showUpdateAll\" class=\"apps-list__toolbar\">\n\t\t\t\t\t{{ t('settings', 'All apps are up-to-date.') }}\n\t\t\t\t</div>\n\n\t\t\t\t<TransitionGroup name=\"apps-list\" tag=\"table\" class=\"apps-list__list-container\">\n\t\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</TransitionGroup>\n\t\t\t</template>\n\n\t\t\t<table v-if=\"useBundleView\"\n\t\t\t\tclass=\"apps-list__list-container\">\n\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t<th id=\"app-table-col-icon\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-name\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-version\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-level\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t\t<th id=\"app-table-col-actions\">\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t\t<template v-for=\"bundle in bundles\">\n\t\t\t\t\t<tr :key=\"bundle.id\">\n\t\t\t\t\t\t<th :id=\"`app-table-rowgroup-${bundle.id}`\" colspan=\"5\" scope=\"rowgroup\">\n\t\t\t\t\t\t\t<div class=\"apps-list__bundle-heading\">\n\t\t\t\t\t\t\t\t<span class=\"apps-list__bundle-header\">\n\t\t\t\t\t\t\t\t\t{{ bundle.name }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<NcButton type=\"secondary\" @click=\"toggleBundle(bundle.id)\">\n\t\t\t\t\t\t\t\t\t{{ t('settings', bundleToggleText(bundle.id)) }}\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in bundleApps(bundle.id)\"\n\t\t\t\t\t\t:key=\"bundle.id + app.id\"\n\t\t\t\t\t\t:use-bundle-view=\"true\"\n\t\t\t\t\t\t:headers=\"`app-table-rowgroup-${bundle.id}`\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</table>\n\t\t\t<ul v-if=\"useAppStoreView\" class=\"apps-list__store-container\">\n\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t:list-view=\"false\" />\n\t\t\t</ul>\n\t\t</div>\n\n\t\t<div id=\"apps-list-search\" class=\"apps-list apps-list--list-view\">\n\t\t\t<div class=\"apps-list__list-container\">\n\t\t\t\t<table v-if=\"search !== '' && searchApps.length > 0\" class=\"apps-list__list-container\">\n\t\t\t\t\t<caption class=\"apps-list__bundle-header\">\n\t\t\t\t\t\t{{ t('settings', 'Results from other categories') }}\n\t\t\t\t\t</caption>\n\t\t\t\t\t<tr key=\"app-list-view-header\">\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Icon') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Name') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Version') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Level') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th>\n\t\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('settings', 'Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<AppItem v-for=\"app in searchApps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</table>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"search !== '' && !loading && searchApps.length === 0 && apps.length === 0\" id=\"apps-list-empty\" class=\"emptycontent emptycontent-search\">\n\t\t\t<div id=\"app-list-empty-icon\" class=\"icon-settings-dark\" />\n\t\t\t<h2>{{ t('settings', 'No apps found for your version') }}</h2>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport AppItem from './AppList/AppItem.vue'\nimport pLimit from 'p-limit'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearch: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcounter() {\n\t\t\treturn this.apps.filter(app => app.update).length\n\t\t},\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\thasPendingUpdate() {\n\t\t\treturn this.apps.filter(app => app.update).length > 0\n\t\t},\n\t\tshowUpdateAll() {\n\t\t\treturn this.hasPendingUpdate && this.useListView\n\t\t},\n\t\tapps() {\n\t\t\tconst apps = this.$store.getters.getAllApps\n\t\t\t\t.filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1)\n\t\t\t\t.sort(function(a, b) {\n\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name\n\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name\n\t\t\t\t\treturn OC.Util.naturalSortCompare(sortStringA, sortStringB)\n\t\t\t\t})\n\n\t\t\tif (this.category === 'installed') {\n\t\t\t\treturn apps.filter(app => app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'enabled') {\n\t\t\t\treturn apps.filter(app => app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'disabled') {\n\t\t\t\treturn apps.filter(app => !app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'app-bundles') {\n\t\t\t\treturn apps.filter(app => app.bundles)\n\t\t\t}\n\t\t\tif (this.category === 'updates') {\n\t\t\t\treturn apps.filter(app => app.update)\n\t\t\t}\n\t\t\tif (this.category === 'supported') {\n\t\t\t\t// For customers of the Nextcloud GmbH the app level will be set to `300` for apps that are supported in their subscription\n\t\t\t\treturn apps.filter(app => app.level === 300)\n\t\t\t}\n\t\t\tif (this.category === 'featured') {\n\t\t\t\t// An app level of `200` will be set for apps featured on the app store\n\t\t\t\treturn apps.filter(app => app.level === 200)\n\t\t\t}\n\n\t\t\t// filter app store categories\n\t\t\treturn apps.filter(app => {\n\t\t\t\treturn app.appstore && app.category !== undefined\n\t\t\t\t\t&& (app.category === this.category || app.category.indexOf(this.category) > -1)\n\t\t\t})\n\t\t},\n\t\tbundles() {\n\t\t\treturn this.$store.getters.getAppBundles.filter(bundle => this.bundleApps(bundle.id).length > 0)\n\t\t},\n\t\tbundleApps() {\n\t\t\treturn function(bundle) {\n\t\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t\t.filter(app => {\n\t\t\t\t\t\treturn app.bundleIds !== undefined && app.bundleIds.includes(bundle)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tsearchApps() {\n\t\t\tif (this.search === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t.filter(app => {\n\t\t\t\t\tif (app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) {\n\t\t\t\t\t\treturn (!this.apps.find(_app => _app.id === app.id))\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tuseAppStoreView() {\n\t\t\treturn !this.useListView && !this.useBundleView\n\t\t},\n\t\tuseListView() {\n\t\t\treturn (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured' || this.category === 'supported')\n\t\t},\n\t\tuseBundleView() {\n\t\t\treturn (this.category === 'app-bundles')\n\t\t},\n\t\tallBundlesEnabled() {\n\t\t\treturn (id) => {\n\t\t\t\treturn this.bundleApps(id).filter(app => !app.active).length === 0\n\t\t\t}\n\t\t},\n\t\tbundleToggleText() {\n\t\t\treturn (id) => {\n\t\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\t\treturn t('settings', 'Disable all')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Download and enable all')\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmounted() {\n\t\tsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tsetSearch({ query }) {\n\t\t\tthis.search = query\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search = ''\n\t\t},\n\t\ttoggleBundle(id) {\n\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\treturn this.disableBundle(id)\n\t\t\t}\n\t\t\treturn this.enableBundle(id)\n\t\t},\n\t\tenableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('enableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tdisableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('disableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tupdateAll() {\n\t\t\tconst limit = pLimit(1)\n\t\t\tthis.apps\n\t\t\t\t.filter(app => app.update)\n\t\t\t\t.map(app => limit(() => this.$store.dispatch('updateApp', { appId: app.id })),\n\t\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$toolbar-padding: 8px;\n$toolbar-height: 44px + $toolbar-padding * 2;\n\n.apps-list {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-content: flex-start;\n\n\t// For transition group\n\t&--move {\n\t\ttransition: transform 1s;\n\t}\n\n\t#app-list-update-all {\n\t\tmargin-left: 10px;\n\t}\n\n\t&__toolbar {\n\t\theight: $toolbar-height;\n\t\tpadding: $toolbar-padding;\n\t\t// Leave room for app-navigation-toggle\n\t\tpadding-left: $toolbar-height;\n\t\twidth: 100%;\n\t\tbackground-color: var(--color-main-background);\n\t\tposition: sticky;\n\t\ttop: 0;\n\t\tz-index: 1;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t&--list-view {\n\t\tmargin-bottom: 100px;\n\t\t// For positioning link overlay on rows\n\t\tposition: relative;\n\t}\n\n\t&__list-container {\n\t\twidth: 100%;\n\t}\n\n\t&__store-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t&__bundle-heading {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmargin: 20px 10px 20px 0;\n\t}\n\n\t&__bundle-header {\n\t\tmargin: 0 10px 0 50px;\n\t\tfont-weight: bold;\n\t\tfont-size: 20px;\n\t\tline-height: 30px;\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n#apps-list-search {\n\t.app-item {\n\t\th2 {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=73184220&scoped=true\"\nimport script from \"./AppList.vue?vue&type=script&lang=js\"\nexport * from \"./AppList.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppList.vue?vue&type=style&index=0&id=73184220&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73184220\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app-content-inner\"}},[_c('div',{staticClass:\"apps-list\",class:{\n\t\t\t'apps-list--list-view': (_vm.useBundleView || _vm.useListView),\n\t\t\t'apps-list--store-view': _vm.useAppStoreView,\n\t\t},attrs:{\"id\":\"apps-list\"}},[(_vm.useListView)?[(_vm.showUpdateAll)?_c('div',{staticClass:\"apps-list__toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', '%n app has an update available', '%n apps have an update available', _vm.counter))+\"\\n\\t\\t\\t\\t\"),(_vm.showUpdateAll)?_c('NcButton',{attrs:{\"id\":\"app-list-update-all\",\"type\":\"primary\"},on:{\"click\":_vm.updateAll}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', 'Update', 'Update all', _vm.counter))+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(!_vm.showUpdateAll)?_c('div',{staticClass:\"apps-list__toolbar\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'All apps are up-to-date.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('TransitionGroup',{staticClass:\"apps-list__list-container\",attrs:{\"name\":\"apps-list\",\"tag\":\"table\"}},[_c('tr',{key:\"app-list-view-header\"},[_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})],2)]:_vm._e(),_vm._v(\" \"),(_vm.useBundleView)?_c('table',{staticClass:\"apps-list__list-container\"},[_c('tr',{key:\"app-list-view-header\"},[_c('th',{attrs:{\"id\":\"app-table-col-icon\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-name\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-version\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-level\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',{attrs:{\"id\":\"app-table-col-actions\"}},[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.bundles),function(bundle){return [_c('tr',{key:bundle.id},[_c('th',{attrs:{\"id\":`app-table-rowgroup-${bundle.id}`,\"colspan\":\"5\",\"scope\":\"rowgroup\"}},[_c('div',{staticClass:\"apps-list__bundle-heading\"},[_c('span',{staticClass:\"apps-list__bundle-header\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(bundle.name)+\"\\n\\t\\t\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"secondary\"},on:{\"click\":function($event){return _vm.toggleBundle(bundle.id)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', _vm.bundleToggleText(bundle.id)))+\"\\n\\t\\t\\t\\t\\t\\t\\t\")])],1)])]),_vm._v(\" \"),_vm._l((_vm.bundleApps(bundle.id)),function(app){return _c('AppItem',{key:bundle.id + app.id,attrs:{\"use-bundle-view\":true,\"headers\":`app-table-rowgroup-${bundle.id}`,\"app\":app,\"category\":_vm.category}})})]})],2):_vm._e(),_vm._v(\" \"),(_vm.useAppStoreView)?_c('ul',{staticClass:\"apps-list__store-container\"},_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":false}})}),1):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"apps-list apps-list--list-view\",attrs:{\"id\":\"apps-list-search\"}},[_c('div',{staticClass:\"apps-list__list-container\"},[(_vm.search !== '' && _vm.searchApps.length > 0)?_c('table',{staticClass:\"apps-list__list-container\"},[_c('caption',{staticClass:\"apps-list__bundle-header\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Results from other categories'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('tr',{key:\"app-list-view-header\"},[_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Icon')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Name')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Version')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Level')))])]),_vm._v(\" \"),_c('th',[_c('span',{staticClass:\"hidden-visually\"},[_vm._v(_vm._s(_vm.t('settings', 'Actions')))])])]),_vm._v(\" \"),_vm._l((_vm.searchApps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})})],2):_vm._e()])]),_vm._v(\" \"),(_vm.search !== '' && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0)?_c('div',{staticClass:\"emptycontent emptycontent-search\",attrs:{\"id\":\"apps-list-empty\"}},[_c('div',{staticClass:\"icon-settings-dark\",attrs:{\"id\":\"app-list-empty-icon\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No apps found for your version')))])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"app-discover\"},[(_setup.hasError)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Nothing to show'),\"description\":_setup.t('settings', 'Could not load section content from app store.')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiEyeOff,\"size\":64}})]},proxy:true}],null,false,638098482)}):(_setup.elements.length === 0)?_c(_setup.NcEmptyContent,{attrs:{\"name\":_setup.t('settings', 'Loading'),\"description\":_setup.t('settings', 'Fetching the latest news…')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcLoadingIcon,{attrs:{\"size\":64}})]},proxy:true}])}):_vm._l((_setup.elements),function(entry,index){return _c(_setup.getComponent(entry.type),_vm._b({key:entry.id ?? index,tag:\"component\"},'component',entry,false))})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n/**\n * Helper to transform the JSON API results to proper frontend objects (app discover section elements)\n *\n * @param element The JSON API element to transform\n */\nexport const parseApiResponse = (element) => {\n const appElement = { ...element };\n if (appElement.date) {\n appElement.date = Date.parse(appElement.date);\n }\n if (appElement.expiryDate) {\n appElement.expiryDate = Date.parse(appElement.expiryDate);\n }\n if (appElement.type === 'post') {\n return appElement;\n }\n else if (appElement.type === 'showcase') {\n return appElement;\n }\n else if (appElement.type === 'carousel') {\n return appElement;\n }\n throw new Error(`Invalid argument, app discover element with type ${element.type ?? 'unknown'} is unknown`);\n};\n/**\n * Filter outdated or upcoming elements\n * @param element Element to check\n */\nexport const filterElements = (element) => {\n const now = Date.now();\n // Element not yet published\n if (element.date && element.date > now) {\n return false;\n }\n // Element expired\n if (element.expiryDate && element.expiryDate < now) {\n return false;\n }\n return true;\n};\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=618752df&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=618752df&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreDiscoverSection.vue?vue&type=template&id=618752df&scoped=true\"\nimport script from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreDiscoverSection.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreDiscoverSection.vue?vue&type=style&index=0&id=618752df&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"618752df\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStore.vue?vue&type=template&id=a75d4530&scoped=true\"\nimport script from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStore.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStore.vue?vue&type=style&index=0&id=a75d4530&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a75d4530\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcAppNavigation,{attrs:{\"aria-label\":_setup.t('settings', 'Apps')},scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-discover\",\"to\":{ name: 'apps-category', params: { category: 'discover'} },\"name\":_setup.APPS_SECTION_ENUM.discover},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.discover}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-installed\",\"to\":{ name: 'apps-category', params: { category: 'installed'} },\"name\":_setup.APPS_SECTION_ENUM.installed},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.installed}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-enabled\",\"to\":{ name: 'apps-category', params: { category: 'enabled' } },\"name\":_setup.APPS_SECTION_ENUM.enabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.enabled}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-disabled\",\"to\":{ name: 'apps-category', params: { category: 'disabled' } },\"name\":_setup.APPS_SECTION_ENUM.disabled},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.disabled}})]},proxy:true}])}),_vm._v(\" \"),(_setup.updateCount > 0)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-updates\",\"to\":{ name: 'apps-category', params: { category: 'updates' } },\"name\":_setup.APPS_SECTION_ENUM.updates},scopedSlots:_vm._u([{key:\"counter\",fn:function(){return [_c(_setup.NcCounterBubble,[_vm._v(_vm._s(_setup.updateCount))])]},proxy:true},{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:true}],null,false,2824895104)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-your-bundles\",\"to\":{ name: 'apps-category', params: { category: 'app-bundles' } },\"name\":_setup.APPS_SECTION_ENUM['app-bundles']},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.bundles}})]},proxy:true}])}),_vm._v(\" \"),_c(_setup.NcAppNavigationSpacer),_vm._v(\" \"),(_setup.appstoreEnabled && _setup.categoriesLoading)?_c('li',{staticClass:\"categories--loading\"},[_c(_setup.NcLoadingIcon,{attrs:{\"size\":20,\"aria-label\":_setup.t('settings', 'Loading categories')}})],1):(_setup.appstoreEnabled && !_setup.categoriesLoading)?[(_setup.isSubscribed)?_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-supported\",\"to\":{ name: 'apps-category', params: { category: 'supported' } },\"name\":_setup.APPS_SECTION_ENUM.supported},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.supported}})]},proxy:true}],null,false,613663011)}):_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-category-featured\",\"to\":{ name: 'apps-category', params: { category: 'featured' } },\"name\":_setup.APPS_SECTION_ENUM.featured},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.featured}})]},proxy:true}])}),_vm._v(\" \"),_vm._l((_setup.categories),function(category){return _c(_setup.NcAppNavigationItem,{key:category.id,attrs:{\"id\":`app-category-${category.id}`,\"name\":category.displayName,\"to\":{\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tparams: { category: category.id },\n\t\t\t\t}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":category.icon}})]},proxy:true}],null,true)})})]:_vm._e(),_vm._v(\" \"),_c(_setup.NcAppNavigationItem,{attrs:{\"id\":\"app-developer-docs\",\"name\":_setup.t('settings', 'Developer documentation ↗'),\"href\":_setup.developerDocsUrl}})]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreNavigation.vue?vue&type=template&id=d15221f2&scoped=true\"\nimport script from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreNavigation.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreNavigation.vue?vue&type=style&index=0&id=d15221f2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d15221f2\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.showSidebar)?_c(_setup.NcAppSidebar,{staticClass:\"app-sidebar\",class:{ 'app-sidebar--with-screenshot': _setup.hasScreenshot },attrs:{\"active\":_setup.activeTab,\"background\":_setup.hasScreenshot ? _setup.app.screenshot : undefined,\"compact\":!_setup.hasScreenshot,\"name\":_setup.app.name,\"title\":_setup.app.name,\"subname\":_setup.licenseText,\"subtitle\":_setup.licenseText},on:{\"update:active\":function($event){_setup.activeTab=$event},\"close\":_setup.hideAppDetails},scopedSlots:_vm._u([(!_setup.hasScreenshot)?{key:\"header\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{staticClass:\"app-sidebar__fallback-icon\",attrs:{\"svg\":_setup.appIcon ?? '',\"size\":64}})]},proxy:true}:null,{key:\"description\",fn:function(){return [_c('div',{staticClass:\"app-sidebar__badges\"},[_c(_setup.AppLevelBadge,{attrs:{\"level\":_setup.app.level}}),_vm._v(\" \"),(_setup.hasRating)?_c(_setup.AppScore,{attrs:{\"score\":_setup.rating}}):_vm._e()],1)]},proxy:true}],null,true)},[_vm._v(\" \"),_vm._v(\" \"),_c(_setup.AppDescriptionTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppDetailsTab,{attrs:{\"app\":_setup.app}}),_vm._v(\" \"),_c(_setup.AppReleasesTab,{attrs:{\"app\":_setup.app}})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"settings-markdown\" v-html=\"renderMarkdown\" />\n</template>\n\n<script>\nimport { marked } from 'marked'\nimport dompurify from 'dompurify'\n\nexport default {\n\tname: 'Markdown',\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tminHeading: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n\tcomputed: {\n\t\trenderMarkdown() {\n\t\t\tconst renderer = new marked.Renderer()\n\t\t\trenderer.link = function(href, title, text) {\n\t\t\t\tlet prot\n\t\t\t\ttry {\n\t\t\t\t\tprot = decodeURIComponent(unescape(href))\n\t\t\t\t\t\t.replace(/[^\\w:]/g, '')\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tlet out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"'\n\t\t\t\tif (title) {\n\t\t\t\t\tout += ' title=\"' + title + '\"'\n\t\t\t\t}\n\t\t\t\tout += '>' + text + '</a>'\n\t\t\t\treturn out\n\t\t\t}\n\t\t\trenderer.heading = (text, level) => {\n\t\t\t\tlevel = Math.min(6, level + (this.minHeading - 1))\n\t\t\t\treturn `<h${level}>${text}</h${level}>`\n\t\t\t}\n\t\t\trenderer.image = function(href, title, text) {\n\t\t\t\tif (text) {\n\t\t\t\t\treturn text\n\t\t\t\t}\n\t\t\t\treturn title\n\t\t\t}\n\t\t\trenderer.blockquote = function(quote) {\n\t\t\t\treturn quote\n\t\t\t}\n\t\t\treturn dompurify.sanitize(\n\t\t\t\tmarked(this.text.trim(), {\n\t\t\t\t\trenderer,\n\t\t\t\t\tgfm: false,\n\t\t\t\t\thighlight: false,\n\t\t\t\t\ttables: false,\n\t\t\t\t\tbreaks: false,\n\t\t\t\t\tpedantic: false,\n\t\t\t\t\tsanitize: true,\n\t\t\t\t\tsmartLists: true,\n\t\t\t\t\tsmartypants: false,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tSAFE_FOR_JQUERY: true,\n\t\t\t\t\tALLOWED_TAGS: [\n\t\t\t\t\t\t'h1',\n\t\t\t\t\t\t'h2',\n\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t'strong',\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t'ul',\n\t\t\t\t\t\t'ol',\n\t\t\t\t\t\t'li',\n\t\t\t\t\t\t'em',\n\t\t\t\t\t\t'del',\n\t\t\t\t\t\t'blockquote',\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.settings-markdown::v-deep {\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 120%;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t\tmargin-top: 48px;\n\t}\n\n\th2 {\n\t\tfont-size: 28px;\n\t\tmargin-top: 48px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\tpre {\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t}\n\n\tul li {\n\t\tlist-style-type: disc;\n\t}\n\n\tul > li > ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\tul > li > ul > li ul li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=7c5c8e59&scoped=true\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=7c5c8e59&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7c5c8e59\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"settings-markdown\",domProps:{\"innerHTML\":_vm._s(_vm.renderMarkdown)}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.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(_setup.NcAppSidebarTab,{attrs:{\"id\":\"desc\",\"name\":_setup.t('settings', 'Description'),\"order\":0},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiTextShort}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-description\"},[_c(_setup.Markdown,{attrs:{\"text\":_vm.app.description,\"min-heading\":4}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDescriptionTab.vue?vue&type=template&id=fccce5ae&scoped=true\"\nimport script from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppDescriptionTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppDescriptionTab.vue?vue&type=style&index=0&id=fccce5ae&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fccce5ae\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSidebarTab',{attrs:{\"id\":\"details\",\"name\":_vm.t('settings', 'Details'),\"order\":1},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTextBox}})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"app-details\"},[_c('div',{staticClass:\"app-details__actions\"},[(_vm.app.active && _vm.canLimitToGroups(_vm.app))?_c('div',{staticClass:\"app-details__actions-groups\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.groupCheckedAppsData),expression:\"groupCheckedAppsData\"}],staticClass:\"groups-enable__checkbox checkbox\",attrs:{\"id\":`groups_enable_${_vm.app.id}`,\"type\":\"checkbox\"},domProps:{\"value\":_vm.app.id,\"checked\":Array.isArray(_vm.groupCheckedAppsData)?_vm._i(_vm.groupCheckedAppsData,_vm.app.id)>-1:(_vm.groupCheckedAppsData)},on:{\"change\":[function($event){var $$a=_vm.groupCheckedAppsData,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.app.id,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.groupCheckedAppsData=$$a.concat([$$v]))}else{$$i>-1&&(_vm.groupCheckedAppsData=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.groupCheckedAppsData=$$c}},_vm.setGroupLimit]}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":`groups_enable_${_vm.app.id}`}},[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\" \"),_c('input',{staticClass:\"group_select\",attrs:{\"type\":\"hidden\",\"title\":_vm.t('settings', 'All'),\"value\":\"\"}}),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"limitToGroups\"}},[_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Limit app usage to groups')))])]),_vm._v(\" \"),(_vm.isLimitedToGroups(_vm.app))?_c('NcSelect',{attrs:{\"input-id\":\"limitToGroups\",\"options\":_vm.groups,\"value\":_vm.appGroups,\"limit\":5,\"label\":\"name\",\"multiple\":true,\"close-on-select\":false},on:{\"option:selected\":_vm.addGroupLimitation,\"option:deselected\":_vm.removeGroupLimitation,\"search\":_vm.asyncFindGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__actions-manage\"},[(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {version}', { version: _vm.app.update }),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{staticClass:\"enable primary\",attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.enable(_vm.app.id)}}}):(!_vm.app.active && !_vm.app.canInstall)?_c('input',{staticClass:\"enable force\",attrs:{\"title\":_vm.forceEnableButtonTooltip,\"aria-label\":_vm.forceEnableButtonTooltip,\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__dependencies\"},[(_vm.app.missingMinOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.missingMaxOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.canInstall)?_c('li',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:'))+\"\\n\\t\\t\\t\\t\"),_c('ul',{staticClass:\"missing-dependencies\"},_vm._l((_vm.app.missingDependencies),function(dep,index){return _c('li',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(dep)+\"\\n\\t\\t\\t\\t\\t\")])}),0)]):_vm._e()]),_vm._v(\" \"),(_vm.lastModified)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Latest updated'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcDateTime',{attrs:{\"timestamp\":_vm.lastModified}})],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Author'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',{staticClass:\"app-details__authors\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appAuthors)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Categories'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.appCategories)+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),(_vm.externalResources.length > 0)?_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Resources')))]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__documentation\",attrs:{\"aria-label\":_vm.t('settings', 'Documentation')}},_vm._l((_vm.externalResources),function(resource){return _c('li',{key:resource.id},[_c('a',{staticClass:\"appslink\",attrs:{\"href\":resource.href,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(resource.label)+\" ↗\\n\\t\\t\\t\\t\\t\")])])}),0)]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__section\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Interact')))]),_vm._v(\" \"),_c('div',{staticClass:\"app-details__interact\"},[_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Report a bug'),\"title\":_vm.t('settings', 'Report a bug')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiBug}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":!_vm.app.bugs,\"href\":_vm.app.bugs ?? '#',\"aria-label\":_vm.t('settings', 'Request feature'),\"title\":_vm.t('settings', 'Request feature')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiFeatureSearch}})]},proxy:true}])}),_vm._v(\" \"),(_vm.app.appstoreData?.discussion)?_c('NcButton',{attrs:{\"href\":_vm.app.appstoreData.discussion,\"aria-label\":_vm.t('settings', 'Ask questions or discuss'),\"title\":_vm.t('settings', 'Ask questions or discuss')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiTooltipQuestion}})]},proxy:true}],null,false,1288192462)}):_vm._e(),_vm._v(\" \"),(!_vm.app.internal)?_c('NcButton',{attrs:{\"href\":_vm.rateAppUrl,\"aria-label\":_vm.t('settings', 'Rate the app'),\"title\":_vm.t('settings', 'Rate')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiStar}})]},proxy:true}],null,false,422450625)}):_vm._e()],1)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<NcAppSidebarTab id=\"details\"\n\t\t:name=\"t('settings', 'Details')\"\n\t\t:order=\"1\">\n\t\t<template #icon>\n\t\t\t<NcIconSvgWrapper :path=\"mdiTextBox\" />\n\t\t</template>\n\t\t<div class=\"app-details\">\n\t\t\t<div class=\"app-details__actions\">\n\t\t\t\t<div v-if=\"app.active && canLimitToGroups(app)\" class=\"app-details__actions-groups\">\n\t\t\t\t\t<input :id=\"`groups_enable_${app.id}`\"\n\t\t\t\t\t\tv-model=\"groupCheckedAppsData\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t:value=\"app.id\"\n\t\t\t\t\t\tclass=\"groups-enable__checkbox checkbox\"\n\t\t\t\t\t\t@change=\"setGroupLimit\">\n\t\t\t\t\t<label :for=\"`groups_enable_${app.id}`\">{{ t('settings', 'Limit to groups') }}</label>\n\t\t\t\t\t<input type=\"hidden\"\n\t\t\t\t\t\tclass=\"group_select\"\n\t\t\t\t\t\t:title=\"t('settings', 'All')\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t<br>\n\t\t\t\t\t<label for=\"limitToGroups\">\n\t\t\t\t\t\t<span>{{ t('settings', 'Limit app usage to groups') }}</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t<NcSelect v-if=\"isLimitedToGroups(app)\"\n\t\t\t\t\t\tinput-id=\"limitToGroups\"\n\t\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t\t:value=\"appGroups\"\n\t\t\t\t\t\t:limit=\"5\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t@option:selected=\"addGroupLimitation\"\n\t\t\t\t\t\t@option:deselected=\"removeGroupLimitation\"\n\t\t\t\t\t\t@search=\"asyncFindGroup\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</NcSelect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"app-details__actions-manage\">\n\t\t\t\t\t<input v-if=\"app.update\"\n\t\t\t\t\t\tclass=\"update primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Update to {version}', { version: app.update })\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"update(app.id)\">\n\t\t\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\t\t\tclass=\"uninstall\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"remove(app.id)\">\n\t\t\t\t\t<input v-if=\"app.active\"\n\t\t\t\t\t\tclass=\"enable\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"disable(app.id)\">\n\t\t\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\t\t:title=\"enableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"enableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable primary\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t\t\t@click=\"enable(app.id)\">\n\t\t\t\t\t<input v-else-if=\"!app.active && !app.canInstall\"\n\t\t\t\t\t\t:title=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\t:aria-label=\"forceEnableButtonTooltip\"\n\t\t\t\t\t\tclass=\"enable force\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t\t@click=\"forceEnable(app.id)\">\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<ul class=\"app-details__dependencies\">\n\t\t\t\t<li v-if=\"app.missingMinOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"app.missingMaxOwnCloudVersion\">\n\t\t\t\t\t{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t\t</li>\n\t\t\t\t<li v-if=\"!app.canInstall\">\n\t\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t\t<ul class=\"missing-dependencies\">\n\t\t\t\t\t\t<li v-for=\"(dep, index) in app.missingDependencies\" :key=\"index\">\n\t\t\t\t\t\t\t{{ dep }}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</li>\n\t\t\t</ul>\n\n\t\t\t<div v-if=\"lastModified\" class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Latest updated') }}\n\t\t\t\t</h4>\n\t\t\t\t<NcDateTime :timestamp=\"lastModified\" />\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Author') }}\n\t\t\t\t</h4>\n\t\t\t\t<p class=\"app-details__authors\">\n\t\t\t\t\t{{ appAuthors }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>\n\t\t\t\t\t{{ t('settings', 'Categories') }}\n\t\t\t\t</h4>\n\t\t\t\t<p>\n\t\t\t\t\t{{ appCategories }}\n\t\t\t\t</p>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"externalResources.length > 0\" class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Resources') }}</h4>\n\t\t\t\t<ul class=\"app-details__documentation\" :aria-label=\"t('settings', 'Documentation')\">\n\t\t\t\t\t<li v-for=\"resource of externalResources\" :key=\"resource.id\">\n\t\t\t\t\t\t<a class=\"appslink\"\n\t\t\t\t\t\t\t:href=\"resource.href\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noreferrer noopener\">\n\t\t\t\t\t\t\t{{ resource.label }} ↗\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\n\t\t\t<div class=\"app-details__section\">\n\t\t\t\t<h4>{{ t('settings', 'Interact') }}</h4>\n\t\t\t\t<div class=\"app-details__interact\">\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Report a bug')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Report a bug')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiBug\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :disabled=\"!app.bugs\"\n\t\t\t\t\t\t:href=\"app.bugs ?? '#'\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Request feature')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Request feature')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiFeatureSearch\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"app.appstoreData?.discussion\"\n\t\t\t\t\t\t:href=\"app.appstoreData.discussion\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Ask questions or discuss')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Ask questions or discuss')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiTooltipQuestion\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton v-if=\"!app.internal\"\n\t\t\t\t\t\t:href=\"rateAppUrl\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Rate the app')\"\n\t\t\t\t\t\t:title=\"t('settings', 'Rate')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiStar\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</NcAppSidebarTab>\n</template>\n\n<script>\nimport NcAppSidebarTab from '@nextcloud/vue/dist/Components/NcAppSidebarTab.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport NcIconSvgWrapper from '@nextcloud/vue/dist/Components/NcIconSvgWrapper.js'\nimport NcSelect from '@nextcloud/vue/dist/Components/NcSelect.js'\n\nimport AppManagement from '../../mixins/AppManagement.js'\nimport { mdiBug, mdiFeatureSearch, mdiStar, mdiTextBox, mdiTooltipQuestion } from '@mdi/js'\nimport { useAppsStore } from '../../store/apps-store'\n\nexport default {\n\tname: 'AppDetailsTab',\n\n\tcomponents: {\n\t\tNcAppSidebarTab,\n\t\tNcButton,\n\t\tNcDateTime,\n\t\tNcIconSvgWrapper,\n\t\tNcSelect,\n\t},\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst store = useAppsStore()\n\n\t\treturn {\n\t\t\tstore,\n\n\t\t\tmdiBug,\n\t\t\tmdiFeatureSearch,\n\t\t\tmdiStar,\n\t\t\tmdiTextBox,\n\t\t\tmdiTooltipQuestion,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tlastModified() {\n\t\t\treturn (this.app.appstoreData?.releases ?? [])\n\t\t\t\t.map(({ lastModified }) => Date.parse(lastModified))\n\t\t\t\t.sort()\n\t\t\t\t.at(0) ?? null\n\t\t},\n\t\t/**\n\t\t * App authors as comma separated string\n\t\t */\n\t\tappAuthors() {\n\t\t\tconsole.warn(this.app)\n\t\t\tif (!this.app) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tconst authorName = (xmlNode) => {\n\t\t\t\tif (xmlNode['@value']) {\n\t\t\t\t\t// Complex node (with email or homepage attribute)\n\t\t\t\t\treturn xmlNode['@value']\n\t\t\t\t}\n\t\t\t\t// Simple text node\n\t\t\t\treturn xmlNode\n\t\t\t}\n\n\t\t\tconst authors = Array.isArray(this.app.author)\n\t\t\t\t? this.app.author.map(authorName)\n\t\t\t\t: [authorName(this.app.author)]\n\n\t\t\treturn authors\n\t\t\t\t.sort((a, b) => a.split(' ').at(-1).localeCompare(b.split(' ').at(-1)))\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\tappstoreUrl() {\n\t\t\treturn `https://apps.nextcloud.com/apps/${this.app.id}`\n\t\t},\n\n\t\t/**\n\t\t * Further external resources (e.g. website)\n\t\t */\n\t\texternalResources() {\n\t\t\tconst resources = []\n\t\t\tif (!this.app.internal) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'appstore',\n\t\t\t\t\thref: this.appstoreUrl,\n\t\t\t\t\tlabel: t('settings', 'View in store'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.website) {\n\t\t\t\tresources.push({\n\t\t\t\t\tid: 'website',\n\t\t\t\t\thref: this.app.website,\n\t\t\t\t\tlabel: t('settings', 'Visit website'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (this.app.documentation) {\n\t\t\t\tif (this.app.documentation.user) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-user',\n\t\t\t\t\t\thref: this.app.documentation.user,\n\t\t\t\t\t\tlabel: t('settings', 'Usage documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.admin) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-admin',\n\t\t\t\t\t\thref: this.app.documentation.admin,\n\t\t\t\t\t\tlabel: t('settings', 'Admin documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.app.documentation.developer) {\n\t\t\t\t\tresources.push({\n\t\t\t\t\t\tid: 'doc-developer',\n\t\t\t\t\t\thref: this.app.documentation.developer,\n\t\t\t\t\t\tlabel: t('settings', 'Developer documentation'),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn resources\n\t\t},\n\n\t\tappCategories() {\n\t\t\treturn [this.app.category].flat()\n\t\t\t\t.map((id) => this.store.getCategoryById(id)?.displayName ?? id)\n\t\t\t\t.join(', ')\n\t\t},\n\n\t\trateAppUrl() {\n\t\t\treturn `${this.appstoreUrl}#comments`\n\t\t},\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__authors {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__section {\n\t\tmargin-top: 15px;\n\n\t\th4 {\n\t\t\tfont-size: 16px;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-block-end: 5px;\n\t\t}\n\t}\n\n\t&__interact {\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\tgap: 12px;\n\t}\n\n\t&__documentation {\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t\tli {\n\t\t\tpadding-inline-start: 20px;\n\n\t\t\t&::before {\n\t\t\t\twidth: 5px;\n\t\t\t\theight: 5px;\n\t\t\t\tborder-radius: 100%;\n\t\t\t\tbackground-color: var(--color-main-text);\n\t\t\t\tcontent: \"\";\n\t\t\t\tfloat: inline-start;\n\t\t\t\tmargin-inline-start: -13px;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 10px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n.missing-dependencies {\n\tlist-style: initial;\n\tlist-style-type: initial;\n\tlist-style-position: inside;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=script&lang=js\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDetailsTab.vue?vue&type=template&id=24864562&scoped=true\"\nimport script from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nexport * from \"./AppDetailsTab.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppDetailsTab.vue?vue&type=style&index=0&id=24864562&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24864562\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.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-4.use[1]!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_setup.hasChangelog)?_c(_setup.NcAppSidebarTab,{attrs:{\"id\":\"changelog\",\"name\":_setup.t('settings', 'Changelog'),\"order\":2},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiClockFast,\"size\":24}})]},proxy:true}],null,false,1849836872)},[_vm._v(\" \"),_vm._l((_vm.app.releases),function(release){return _c('div',{key:release.version,staticClass:\"app-sidebar-tabs__release\"},[_c('h2',[_vm._v(_vm._s(release.version))]),_vm._v(\" \"),_c(_setup.Markdown,{staticClass:\"app-sidebar-tabs__release-text\",attrs:{\"text\":_setup.createChangelogFromRelease(release)}})],1)})],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppReleasesTab.vue?vue&type=template&id=2261a93d&scoped=true\"\nimport script from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppReleasesTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppReleasesTab.vue?vue&type=style&index=0&id=2261a93d&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2261a93d\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"","import { mdiCog } from '@mdi/js';\nimport { computed, ref, watchEffect } from 'vue';\nimport AppstoreCategoryIcons from '../constants/AppstoreCategoryIcons.ts';\nimport logger from '../logger.ts';\n/**\n * Get the app icon raw SVG for use with `NcIconSvgWrapper` (do never use without sanitizing)\n * It has a fallback to the categroy icon.\n *\n * @param app The app to get the icon for\n */\nexport function useAppIcon(app) {\n const appIcon = ref(null);\n /**\n * Fallback value if no app icon available\n */\n const categoryIcon = computed(() => {\n const path = [app.value?.category ?? []].flat()\n .map((name) => AppstoreCategoryIcons[name])\n .filter((icon) => !!icon)\n .at(0)\n ?? mdiCog;\n return path ? `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"${path}\" /></svg>` : null;\n });\n watchEffect(async () => {\n // Note: Only variables until the first `await` will be watched!\n if (!app.value?.preview) {\n appIcon.value = categoryIcon.value;\n }\n else {\n appIcon.value = null;\n // Now try to load the real app icon\n try {\n const response = await window.fetch(app.value.preview);\n const blob = await response.blob();\n const rawSvg = await blob.text();\n appIcon.value = rawSvg.replaceAll(/fill=\"#(fff|ffffff)([a-z0-9]{1,2})?\"/ig, 'fill=\"currentColor\"');\n }\n catch (error) {\n appIcon.value = categoryIcon.value;\n logger.error('Could not load app icon', { error });\n }\n }\n });\n return {\n appIcon,\n };\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppStoreSidebar.vue?vue&type=template&id=31ecb666&scoped=true\"\nimport script from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppStoreSidebar.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppStoreSidebar.vue?vue&type=style&index=0&id=31ecb666&prod&scoped=true&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31ecb666\",\n null\n \n)\n\nexport default component.exports"],"names":["APPS_SECTION_ENUM","Object","freeze","discover","t","installed","enabled","disabled","updates","featured","supported","axios","get","generateOcsUrl","then","_ref","data","ocs","meta","statuscode","emit","apps","window","dispatchEvent","Event","computed","appGroups","this","app","groups","map","group","id","name","installing","$store","getters","loading","isLoading","enableButtonText","needsDownload","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","groupCheckedAppsData","mounted","length","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","appId","canLimitToGroups","types","includes","addGroupLimitation","groupArray","pop","concat","removeGroupLimitation","currentGroups","index","indexOf","splice","forceEnable","response","rebuildNavigation","catch","error","showError","enable","disable","remove","install","update","mdiStarCircleOutline","mdiAccount","mdiCheck","mdiClose","bundles","mdiArchive","mdiStarShooting","mdiStar","mdiDownload","auth","mdiKey","customization","mdiCog","dashboard","mdiViewDashboard","files","mdiFolder","games","mdiControllerClassic","integration","mdiOpenInApp","monitoring","mdiMonitorEye","multimedia","mdiMultimedia","office","mdiFileDocumentEdit","organization","mdiOfficeBuilding","mdiMagnify","security","mdiSecurity","social","mdiAccountMultiple","tools","mdiTools","workflow","mdiClipboardFlow","showApiError","useAppsStore","defineStore","state","categories","updateCount","loadState","loadingList","gettingCategoriesPromise","actions","loadCategories","force","arguments","undefined","generateUrl","category","_APPSTORE_CATEGORY_IC","icon","APPSTORE_CATEGORY_ICONS","$patch","logger","loadApps","getCategoryById","categoryId","_this$categories$find","find","getAppById","_this$apps$find","_ref2","___CSS_LOADER_EXPORT___","push","module","filterId","filterUrl","Math","random","toString","substring","components","AppLevelBadge","AppScore","NcButton","mixins","AppManagement","SvgFilterMixin","props","type","required","String","listView","Boolean","default","useBundleView","headers","inline","isSelected","scrolled","screenshotLoaded","hasRating","appstoreData","ratingNumOverall","dataItemTag","withSidebar","$route","params","watch","releases","screenshot","image","Image","onload","src","watchers","prefix","content","getDataItemHeaders","columnName","join","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","_c","_self","tag","staticClass","class","attrs","preview","_e","_v","appName","_s","summary","version","level","score","on","$event","stopPropagation","canUnInstall","active","canInstall","isCompatible","_defineComponent","__name","setup","__props","isSupported","isFeatured","badgeIcon","value","badgeText","badgeTitle","__sfc","NcIconSvgWrapper","_setup","_setupProxy","defineComponent","Number","mdiStarHalfFull","mdiStarOutline","title","appScore","toFixed","fullStars","floor","emptyStars","min","hasHalfStar","_l","key","pLimit","concurrency","isInteger","POSITIVE_INFINITY","TypeError","queue","Queue","activeCount","run","async","fn","resolve","args","result","size","dequeue","generator","_len","Array","_key","Promise","enqueue","bind","defineProperties","pendingCount","clearQueue","clear","AppItem","counter","filter","hasPendingUpdate","showUpdateAll","useListView","getAllApps","toLowerCase","sort","a","b","sortStringA","sortStringB","OC","Util","naturalSortCompare","appstore","getAppBundles","bundle","bundleApps","bundleIds","searchApps","_app","useAppStoreView","allBundlesEnabled","bundleToggleText","beforeDestroy","unsubscribe","setSearch","resetSearch","subscribe","toggleBundle","disableBundle","enableBundle","console","Notification","show","updateAll","n","parseApiResponse","element","_element$type","appElement","date","Date","parse","expiryDate","Error","filterElements","now","PostType","defineAsyncComponent","CarouselType","ShowcaseType","hasError","ref","elements","shuffleArray","array","i","j","onBeforeMount","info","parsedElements","shuffledElements","_a$order","_b$order","order","Infinity","getComponent","render","h","mdiEyeOff","NcEmptyContent","NcLoadingIcon","scopedSlots","_u","proxy","entry","_entry$id","_b","route","useRoute","store","currentCategory","_route$params$categor","_route$params","appStoreLabel","viewLabel","_APPS_SECTION_ENUM$cu","_store$getCategoryByI","displayName","watchEffect","document","instance","getCurrentInstance","shouldRefetchCategories","NcAppContent","AppList","AppStoreDiscoverSection","domProps","appstoreEnabled","developerDocsUrl","categoriesLoading","isSubscribed","NcAppNavigation","NcAppNavigationItem","NcAppNavigationSpacer","NcCounterBubble","text","minHeading","renderMarkdown","renderer","marked","Renderer","link","href","prot","decodeURIComponent","unescape","replace","e","out","heading","blockquote","quote","dompurify","trim","gfm","highlight","tables","breaks","pedantic","sanitize","smartLists","smartypants","SAFE_FOR_JQUERY","ALLOWED_TAGS","mdiTextShort","NcAppSidebarTab","Markdown","description","NcDateTime","NcSelect","mdiBug","mdiFeatureSearch","mdiTextBox","mdiTooltipQuestion","lastModified","_map$sort$at","_this$app$appstoreDat","_this$app$appstoreDat2","at","appAuthors","warn","authorName","xmlNode","isArray","author","split","localeCompare","appstoreUrl","externalResources","resources","internal","label","website","documentation","user","admin","developer","appCategories","flat","_this$store$getCatego","_this$store$getCatego2","rateAppUrl","getGroups","_vm$app$bugs","_vm$app$bugs2","_vm$app$appstoreData","directives","rawName","expression","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","missingMinOwnCloudVersion","missingMaxOwnCloudVersion","missingDependencies","dep","resource","bugs","discussion","hasChangelog","_props$app$releases$","_props$app$releases","values","translations","some","changelog","createChangelogFromRelease","release","_release$translations","_release$translations2","_release$translations3","getLanguage","en","mdiClockFast","router","useRouter","_route$params$id","_app$value$appstoreDa","rating","_app$value$appstoreDa2","_app$value$appstoreDa3","_app$value$appstoreDa4","ratingNumRecent","ratingRecent","ratingOverall","showSidebar","appIcon","categoryIcon","_flat$map$filter$at","_app$value$category","_app$value","path","AppstoreCategoryIcons","_app$value2","fetch","blob","rawSvg","replaceAll","useAppIcon","licenseText","license","licence","toUpperCase","activeTab","hasScreenshot","loadScreenshot","_app$value3","onMounted","hideAppDetails","NcAppSidebar","AppDescriptionTab","AppDetailsTab","AppReleasesTab","_setup$appIcon"],"sourceRoot":""}
\ No newline at end of file diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js index 31c61ed606b..42ffa62d270 100644 --- a/dist/settings-vue-settings-apps-users-management.js +++ b/dist/settings-vue-settings-apps-users-management.js @@ -1,3 +1,3 @@ /*! For license information please see settings-vue-settings-apps-users-management.js.LICENSE.txt */ -(()=>{var e,r,n,o={31755:(e,r,n)=>{"use strict";n.d(r,{P:()=>B});var o=n(85471),i=n(95353),s=n(59097),a=n(22843),u=n(35810),c=n(99498),p=n(26287),d=n(56760);n(51257);const l=function(t){return t.replace(/\/$/,"")},h=()=>(0,d.C)(),f=(t,e)=>p.A.get(l(t),e),m=(t,e)=>p.A.post(l(t),e),g=(t,e)=>p.A.put(l(t),e),v=(t,e)=>p.A.delete(l(t),{params:e});var y=n(36620),b=n(96763);const w=(0,s.c0)("settings").persist(!0).build(),A=function(t,e){return 1===e?t.sort(((t,e)=>t.usercount-t.disabled<e.usercount-e.disabled)):t.sort(((t,e)=>t.name.localeCompare(e.name)))},E={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},x={users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:0,showConfig:{showStoragePath:"true"===w.getItem("account_settings__showStoragePath"),showUserBackend:"true"===w.getItem("account_settings__showUserBackend"),showLastLogin:"true"===w.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===w.getItem("account_settings__showNewUserForm"),showLanguages:"true"===w.getItem("account_settings__showLanguages")}},_={appendUsers(t,e){const r=t.users.map((t=>{let{id:e}=t;return e})),n=Object.values(e).filter((t=>{let{id:e}=t;return!r.includes(e)})),o=t.users.concat(n);t.usersOffset+=t.usersLimit,t.users=o},updateDisabledUsers(t,e){t.disabledUsersOffset+=t.disabledUsersLimit},setPasswordPolicyMinLength(t,e){t.minPasswordLength=""!==e?e:0},initGroups(t,e){let{groups:r,orderBy:n,userCount:o}=e;t.groups=r.map((t=>Object.assign({},E,t))),t.orderBy=n,t.userCount=o,t.groups=A(t.groups,t.orderBy)},addGroup(t,e){let{gid:r,displayName:n}=e;try{if(void 0!==t.groups.find((t=>t.id===r)))return;const e=Object.assign({},E,{id:r,name:n});t.groups.unshift(e),t.groups=A(t.groups,t.orderBy)}catch(t){b.error("Can't create group",t)}},renameGroup(t,e){let{gid:r,displayName:n}=e;const o=t.groups.findIndex((t=>t.id===r));if(o>=0){const e=t.groups[o];e.name=n,t.groups.splice(o,1,e),t.groups=A(t.groups,t.orderBy)}},removeGroup(t,e){const r=t.groups.findIndex((t=>t.id===e));r>=0&&t.groups.splice(r,1)},addUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=A(t.groups,t.orderBy)},removeUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount--;const s=i.groups;s.splice(s.indexOf(n),1),t.groups=A(t.groups,t.orderBy)},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;t.users.find((t=>t.id===r)).subadmin.push(n)},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;const o=t.users.find((t=>t.id===r)).subadmin;o.splice(o.indexOf(n),1)},deleteUser(t,e){const r=t.users.findIndex((t=>t.id===e));this.commit("updateUserCounts",{user:t.users[r],actionType:"remove"}),t.users.splice(r,1)},addUserData(t,e){const r=e.data.ocs.data;t.users.unshift(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(t,e){let{userid:r,enabled:n}=e;const o=t.users.find((t=>t.id===r));o.enabled=n,this.commit("updateUserCounts",{user:o,actionType:n?"enable":"disable"})},updateUserCounts(t,e){let{user:r,actionType:n}=e;if(0===t.userCount)return;const o=t.groups.find((t=>"disabled"===t.id));switch(n){case"enable":case"disable":o.usercount+=r.enabled?-1:1,t.userCount+=r.enabled?1:-1,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled+=r.enabled?-1:1}));break;case"create":t.userCount++,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).usercount++}));break;case"remove":r.enabled?(t.userCount--,r.groups.forEach((e=>{const r=t.groups.find((t=>t.id===e));r?r.usercount--:b.warn("User group "+e+" does not exist during user removal")}))):(o.usercount--,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled--})));break;default:y.A.error("Unknown action type in updateUserCounts: '".concat(n,"'"))}},setUserData(t,e){let{userid:r,key:n,value:o}=e;if("quota"===n){const e=(0,u.lT)(o,!0);t.users.find((t=>t.id===r))[n][n]=null!==e?e:o}else t.users.find((t=>t.id===r))[n]=o},resetUsers(t){t.users=[],t.usersOffset=0,t.disabledUsersOffset=0},setShowConfig(t,e){let{key:r,value:n}=e;w.setItem("account_settings__".concat(r),JSON.stringify(n)),t.showConfig[r]=n}},P=p.A.CancelToken;let I=null;const L={state:x,mutations:_,getters:{getUsers:t=>t.users,getGroups:t=>t.groups,getSubadminGroups:t=>t.groups.filter((t=>"admin"!==t.id&&"disabled"!==t.id)),getPasswordPolicyMinLength:t=>t.minPasswordLength,getUsersOffset:t=>t.usersOffset,getUsersLimit:t=>t.usersLimit,getDisabledUsersOffset:t=>t.disabledUsersOffset,getDisabledUsersLimit:t=>t.disabledUsersLimit,getUserCount:t=>t.userCount,getShowConfig:t=>t.showConfig},actions:{searchUsers(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},getUser:(t,e)=>f((0,c.KT)("cloud/users/".concat(e))).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})),getUsers(t,e){let{offset:r,limit:n,search:o,group:i}=e;return I&&I.cancel("Operation canceled by another search request."),I=P.source(),o="string"==typeof o?o:"",o=o.replace(/in:[^\s]+/g,"").trim(),i="string"==typeof i?i:"",""!==i?f((0,c.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})):f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},async getDisabledUsers(t,e){let{offset:r,limit:n}=e;const o=(0,c.KT)("cloud/users/disabled?offset={offset}&limit={limit}",{offset:r,limit:n});try{const e=await f(o),r=Object.keys(e.data.ocs.data.users).length;return r>0&&(t.commit("appendUsers",e.data.ocs.data.users),t.commit("updateDisabledUsers",e.data.ocs.data.users)),r}catch(e){t.commit("API_FAILURE",e)}},getGroups(t,e){let{offset:r,limit:n,search:o}=e;o="string"==typeof o?o:"";const i=-1===n?"":"&limit=".concat(n);return f((0,c.KT)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((e=>Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromList(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((e=>Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromGroup(t,e){let{groupid:r,offset:n,limit:o}=e;return f((0,c.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((e=>t.commit("getUsersFromList",e.data.ocs.data.users))).catch((e=>t.commit("API_FAILURE",e)))},getPasswordPolicyMinLength:t=>!(!(0,a.F)().password_policy||!(0,a.F)().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",(0,a.F)().password_policy.minLength),(0,a.F)().password_policy.minLength),addGroup:(t,e)=>h().then((r=>m((0,c.KT)("cloud/groups"),{groupid:e}).then((r=>(t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}))).catch((t=>{throw t})))).catch((r=>{throw t.commit("API_FAILURE",{gid:e,error:r}),r})),renameGroup(t,e){let{groupid:r,displayName:n}=e;return h().then((e=>g((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((e=>(t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:(t,e)=>h().then((r=>v((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((r=>t.commit("removeGroup",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{gid:e,error:r}))),addUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("addUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>v((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("addUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>v((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},wipeUserDevices:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/wipe",{userid:e})).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),deleteUser:(t,e)=>h().then((r=>v((0,c.KT)("cloud/users/{userid}",{userid:e})).then((r=>t.commit("deleteUser",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),addUser(t,e){let{commit:r,dispatch:n}=t,{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}=e;return h().then((t=>m((0,c.KT)("cloud/users"),{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}).then((t=>n("addUserData",o||t.data.ocs.data.id))).catch((t=>{throw t})))).catch((t=>{throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:(t,e)=>h().then((r=>f((0,c.KT)("cloud/users/{userid}",{userid:e})).then((e=>t.commit("addUserData",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),enableDisableUser(t,e){let{userid:r,enabled:n=!0}=e;const o=n?"enable":"disable";return h().then((e=>g((0,c.KT)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:o})).then((e=>t.commit("enableDisableUser",{userid:r,enabled:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},setUserData(t,e){let{userid:r,key:n,value:o}=e;const i=["email","displayname","manager"];return-1!==["email","language","quota","displayname","password","manager"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?h().then((e=>g((0,c.KT)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((e=>t.commit("setUserData",{userid:r,key:n,value:o}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e}))):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/welcome",{userid:e})).then((t=>!0)).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r})))}};var C=n(85168),R=n(38613),N=n(96763);const U={APPS_API_FAILURE(e,r){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),N.error(e,r)},initCategories(t,e){let{categories:r,updateCount:n}=e;t.categories=r,t.updateCount=n},updateCategories(t,e){t.gettingCategoriesPromise=e},setUpdateCount(t,e){t.updateCount=e},addCategory(t,e){t.categories.push(e)},appendCategories(t,e){t.categories=e},setAllApps(t,e){t.apps=e},setError(t,e){let{appId:r,error:n}=e;Array.isArray(r)||(r=[r]),r.forEach((e=>{t.apps.find((t=>t.id===e)).error=n}))},clearError(t,e){let{appId:r,error:n}=e;t.apps.find((t=>t.id===r)).error=null},enableApp(t,e){let{appId:r,groups:n}=e;const o=t.apps.find((t=>t.id===r));o.active=!0,o.groups=n},setInstallState(t,e){let{appId:r,canInstall:n}=e;const o=t.apps.find((t=>t.id===r));o&&(o.canInstall=!0===n)},disableApp(t,e){const r=t.apps.find((t=>t.id===e));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp(t,e){t.apps.find((t=>t.id===e)).active=!1,t.apps.find((t=>t.id===e)).groups=[],t.apps.find((t=>t.id===e)).needsDownload=!0,t.apps.find((t=>t.id===e)).installed=!1,t.apps.find((t=>t.id===e)).canUnInstall=!1,t.apps.find((t=>t.id===e)).canInstall=!0},updateApp(t,e){const r=t.apps.find((t=>t.id===e)),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps(t){t.apps=[]},reset(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!0)})):o.Ay.set(t.loading,e,!0)},stopLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!1)})):o.Ay.set(t.loading,e,!1)}},O={enableApp(e,r){let n,{appId:o,groups:i}=r;return n=Array.isArray(o)?o:[o],h().then((r=>(e.commit("startLoading",n),e.commit("startLoading","install"),m((0,c.Jv)("settings/apps/enable"),{appIds:n,groups:i}).then((r=>(e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((t=>{e.commit("enableApp",{appId:t,groups:i})})),f((0,c.Jv)("apps/files")).then((()=>{r.data.update_required&&((0,C.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(o)||((0,C.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:o}))}))))).catch((t=>{e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:o,error:t})))},forceEnableApp(t,e){let r,{appId:n,groups:o}=e;return r=Array.isArray(n)?n:[n],h().then((()=>(t.commit("startLoading",r),t.commit("startLoading","install"),m((0,c.Jv)("settings/apps/force"),{appId:n}).then((e=>{t.commit("setInstallState",{appId:n,canInstall:!0})})).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})})).finally((()=>{t.commit("stopLoading",r),t.commit("stopLoading","install")}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},disableApp(t,e){let r,{appId:n}=e;return r=Array.isArray(n)?n:[n],h().then((e=>(t.commit("startLoading",r),m((0,c.Jv)("settings/apps/disable"),{appIds:r}).then((e=>(t.commit("stopLoading",r),r.forEach((e=>{t.commit("disableApp",e)})),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},uninstallApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),f((0,c.Jv)("settings/apps/uninstall/".concat(r))).then((e=>(t.commit("stopLoading",r),t.commit("uninstallApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},updateApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),t.commit("startLoading","install"),f((0,c.Jv)("settings/apps/update/".concat(r))).then((e=>(t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},getAllApps:t=>(t.commit("startLoading","list"),f((0,c.Jv)("settings/apps/list")).then((e=>(t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0))).catch((e=>t.commit("API_FAILURE",e)))),async getCategories(t){let{shouldRefetchCategories:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e||!t.state.gettingCategoriesPromise){t.commit("startLoading","categories");try{const e=f((0,c.Jv)("settings/apps/categories"));t.commit("updateCategories",e);const r=await e;return r.data.length>0?(t.commit("appendCategories",r.data),t.commit("stopLoading","categories"),!0):(t.commit("stopLoading","categories"),!1)}catch(e){t.commit("API_FAILURE",e)}}return t.state.gettingCategoriesPromise}},k={state:{apps:[],bundles:(0,R.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,R.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null},mutations:U,getters:{loading:t=>function(e){return t.loading[e]},getCategories:t=>t.categories,getAllApps:t=>t.apps,getAppBundles:t=>t.bundles,getUpdateCount:t=>t.updateCount,getCategoryById:t=>e=>t.categories.find((t=>t.id===e))},actions:O},T={setServerData(t,e){t.serverData=e}},S={state:{serverData:(0,R.C)("settings","usersSettings",{})},mutations:T,getters:{getServerData:t=>t.serverData},actions:{}},j={state:{},mutations:{},getters:{},actions:{setAppConfig(t,e){let{app:r,key:n,value:o}=e;return h().then((t=>m((0,c.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})))}}};var F=n(96763);o.Ay.use(i.Ay);const $={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}F.error(e,r)}};let D=null;const B=()=>(null===D&&(D=new i.il({modules:{users:L,apps:k,settings:S,oc:j},strict:!1,mutations:$})),D)},36620:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=(0,r(53529).YK)().setApp("settings").detectUser().build()},46472:(t,e,r)=>{"use strict";var n=r(85471),o=r(80284),i=r(58723),s=r(53334),a=r(22378);const u=(0,n.pM)({__name:"SettingsApp",setup:t=>({__sfc:!0,NcContent:a.A})}),c=(0,r(14486).A)(u,(function(){var t=this,e=t._self._c;return e(t._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[e("router-view",{attrs:{name:"navigation"}}),t._v(" "),e("router-view"),t._v(" "),e("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var p=r(96763);function d(t,e){for(var r in e)t[r]=e[r];return t}var l=/[!'()*]/g,h=function(t){return"%"+t.charCodeAt(0).toString(16)},f=/%2C/g,m=function(t){return encodeURIComponent(t).replace(l,h).replace(f,",")};function g(t){try{return decodeURIComponent(t)}catch(t){}return t}var v=function(t){return null==t||"object"==typeof t?t:String(t)};function y(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var r=t.replace(/\+/g," ").split("="),n=g(r.shift()),o=r.length>0?g(r.join("=")):null;void 0===e[n]?e[n]=o:Array.isArray(e[n])?e[n].push(o):e[n]=[e[n],o]})),e):e}function b(t){var e=t?Object.keys(t).map((function(e){var r=t[e];if(void 0===r)return"";if(null===r)return m(e);if(Array.isArray(r)){var n=[];return r.forEach((function(t){void 0!==t&&(null===t?n.push(m(e)):n.push(m(e)+"="+m(t)))})),n.join("&")}return m(e)+"="+m(r)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var w=/\/?$/;function A(t,e,r,n){var o=n&&n.options.stringifyQuery,i=e.query||{};try{i=E(i)}catch(t){}var s={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:P(e,o),matched:t?_(t):[]};return r&&(s.redirectedFrom=P(r,o)),Object.freeze(s)}function E(t){if(Array.isArray(t))return t.map(E);if(t&&"object"==typeof t){var e={};for(var r in t)e[r]=E(t[r]);return e}return t}var x=A(null,{path:"/"});function _(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function P(t,e){var r=t.path,n=t.query;void 0===n&&(n={});var o=t.hash;return void 0===o&&(o=""),(r||"/")+(e||b)(n)+o}function I(t,e,r){return e===x?t===e:!!e&&(t.path&&e.path?t.path.replace(w,"")===e.path.replace(w,"")&&(r||t.hash===e.hash&&L(t.query,e.query)):!(!t.name||!e.name)&&t.name===e.name&&(r||t.hash===e.hash&&L(t.query,e.query)&&L(t.params,e.params)))}function L(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var r=Object.keys(t).sort(),n=Object.keys(e).sort();return r.length===n.length&&r.every((function(r,o){var i=t[r];if(n[o]!==r)return!1;var s=e[r];return null==i||null==s?i===s:"object"==typeof i&&"object"==typeof s?L(i,s):String(i)===String(s)}))}function C(t){for(var e=0;e<t.matched.length;e++){var r=t.matched[e];for(var n in r.instances){var o=r.instances[n],i=r.enteredCbs[n];if(o&&i){delete r.enteredCbs[n];for(var s=0;s<i.length;s++)o._isBeingDestroyed||i[s](o)}}}}var R={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var r=e.props,n=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var s=o.$createElement,a=r.name,u=o.$route,c=o._routerViewCache||(o._routerViewCache={}),p=0,l=!1;o&&o._routerRoot!==o;){var h=o.$vnode?o.$vnode.data:{};h.routerView&&p++,h.keepAlive&&o._directInactive&&o._inactive&&(l=!0),o=o.$parent}if(i.routerViewDepth=p,l){var f=c[a],m=f&&f.component;return m?(f.configProps&&N(m,i,f.route,f.configProps),s(m,i,n)):s()}var g=u.matched[p],v=g&&g.components[a];if(!g||!v)return c[a]=null,s();c[a]={component:v},i.registerRouteInstance=function(t,e){var r=g.instances[a];(e&&r!==t||!e&&r===t)&&(g.instances[a]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){g.instances[a]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==g.instances[a]&&(g.instances[a]=t.componentInstance),C(u)};var y=g.props&&g.props[a];return y&&(d(c[a],{route:u,configProps:y}),N(v,i,u,y)),s(v,i,n)}};function N(t,e,r,n){var o=e.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(r,n);if(o){o=e.props=d({},o);var i=e.attrs=e.attrs||{};for(var s in o)t.props&&s in t.props||(i[s]=o[s],delete o[s])}}function U(t,e,r){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var o=e.split("/");r&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),s=0;s<i.length;s++){var a=i[s];".."===a?o.pop():"."!==a&&o.push(a)}return""!==o[0]&&o.unshift(""),o.join("/")}function O(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var k=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},T=function t(e,r,n){return k(r)||(n=r||n,r=[]),n=n||{},e instanceof RegExp?function(t,e){var r=t.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)e.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return G(t,e)}(e,r):k(e)?function(e,r,n){for(var o=[],i=0;i<e.length;i++)o.push(t(e[i],r,n).source);return G(new RegExp("(?:"+o.join("|")+")",K(n)),r)}(e,r,n):function(t,e,r){return H(D(t,r),e,r)}(e,r,n)},S=D,j=q,F=H,$=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function D(t,e){for(var r,n=[],o=0,i=0,s="",a=e&&e.delimiter||"/";null!=(r=$.exec(t));){var u=r[0],c=r[1],p=r.index;if(s+=t.slice(i,p),i=p+u.length,c)s+=c[1];else{var d=t[i],l=r[2],h=r[3],f=r[4],m=r[5],g=r[6],v=r[7];s&&(n.push(s),s="");var y=null!=l&&null!=d&&d!==l,b="+"===g||"*"===g,w="?"===g||"*"===g,A=r[2]||a,E=f||m;n.push({name:h||o++,prefix:l||"",delimiter:A,optional:w,repeat:b,partial:y,asterisk:!!v,pattern:E?V(E):v?".*":"[^"+M(A)+"]+?"})}}return i<t.length&&(s+=t.substr(i)),s&&n.push(s),n}function B(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function q(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)"object"==typeof t[n]&&(r[n]=new RegExp("^(?:"+t[n].pattern+")$",K(e)));return function(e,n){for(var o="",i=e||{},s=(n||{}).pretty?B:encodeURIComponent,a=0;a<t.length;a++){var u=t[a];if("string"!=typeof u){var c,p=i[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(k(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var d=0;d<p.length;d++){if(c=s(p[d]),!r[a].test(c))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(c)+"`");o+=(0===d?u.prefix:u.delimiter)+c}}else{if(c=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):s(p),!r[a].test(c))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+c+'"');o+=u.prefix+c}}else o+=u}return o}}function M(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function V(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function G(t,e){return t.keys=e,t}function K(t){return t&&t.sensitive?"":"i"}function H(t,e,r){k(e)||(r=e||r,e=[]);for(var n=(r=r||{}).strict,o=!1!==r.end,i="",s=0;s<t.length;s++){var a=t[s];if("string"==typeof a)i+=M(a);else{var u=M(a.prefix),c="(?:"+a.pattern+")";e.push(a),a.repeat&&(c+="(?:"+u+c+")*"),i+=c=a.optional?a.partial?u+"("+c+")?":"(?:"+u+"("+c+"))?":u+"("+c+")"}}var p=M(r.delimiter||"/"),d=i.slice(-p.length)===p;return n||(i=(d?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),i+=o?"$":n&&d?"":"(?="+p+"|$)",G(new RegExp("^"+i,K(r)),e)}T.parse=S,T.compile=function(t,e){return q(D(t,e),e)},T.tokensToFunction=j,T.tokensToRegExp=F;var z=Object.create(null);function J(t,e,r){e=e||{};try{var n=z[t]||(z[t]=T.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function W(t,e,r,n){var o="string"==typeof t?{path:t}:t;if(o._normalized)return o;if(o.name){var i=(o=d({},t)).params;return i&&"object"==typeof i&&(o.params=d({},i)),o}if(!o.path&&o.params&&e){(o=d({},o))._normalized=!0;var s=d(d({},e.params),o.params);if(e.name)o.name=e.name,o.params=s;else if(e.matched.length){var a=e.matched[e.matched.length-1].path;o.path=J(a,s,e.path)}return o}var u=function(t){var e="",r="",n=t.indexOf("#");n>=0&&(e=t.slice(n),t=t.slice(0,n));var o=t.indexOf("?");return o>=0&&(r=t.slice(o+1),t=t.slice(0,o)),{path:t,query:r,hash:e}}(o.path||""),c=e&&e.path||"/",p=u.path?U(u.path,c,r||o.append):c,l=function(t,e,r){void 0===e&&(e={});var n,o=r||y;try{n=o(t||"")}catch(t){n={}}for(var i in e){var s=e[i];n[i]=Array.isArray(s)?s.map(v):v(s)}return n}(u.query,o.query,n&&n.options.parseQuery),h=o.hash||u.hash;return h&&"#"!==h.charAt(0)&&(h="#"+h),{_normalized:!0,path:p,query:l,hash:h}}var Q,Y=function(){},X={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,r=this.$router,n=this.$route,o=r.resolve(this.to,n,this.append),i=o.location,s=o.route,a=o.href,u={},c=r.options.linkActiveClass,p=r.options.linkExactActiveClass,l=null==c?"router-link-active":c,h=null==p?"router-link-exact-active":p,f=null==this.activeClass?l:this.activeClass,m=null==this.exactActiveClass?h:this.exactActiveClass,g=s.redirectedFrom?A(null,W(s.redirectedFrom),null,r):s;u[m]=I(n,g,this.exactPath),u[f]=this.exact||this.exactPath?u[m]:function(t,e){return 0===t.path.replace(w,"/").indexOf(e.path.replace(w,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var r in e)if(!(r in t))return!1;return!0}(t.query,e.query)}(n,g);var v=u[m]?this.ariaCurrentValue:null,y=function(t){Z(t)&&(e.replace?r.replace(i,Y):r.push(i,Y))},b={click:Z};Array.isArray(this.event)?this.event.forEach((function(t){b[t]=y})):b[this.event]=y;var E={class:u},x=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:a,route:s,navigate:y,isActive:u[f],isExactActive:u[m]});if(x){if(1===x.length)return x[0];if(x.length>1||!x.length)return 0===x.length?t():t("span",{},x)}if("a"===this.tag)E.on=b,E.attrs={href:a,"aria-current":v};else{var _=tt(this.$slots.default);if(_){_.isStatic=!1;var P=_.data=d({},_.data);for(var L in P.on=P.on||{},P.on){var C=P.on[L];L in b&&(P.on[L]=Array.isArray(C)?C:[C])}for(var R in b)R in P.on?P.on[R].push(b[R]):P.on[R]=y;var N=_.data.attrs=d({},_.data.attrs);N.href=a,N["aria-current"]=v}else E.on=b}return t(this.tag,E,this.$slots.default)}};function Z(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function tt(t){if(t)for(var e,r=0;r<t.length;r++){if("a"===(e=t[r]).tag)return e;if(e.children&&(e=tt(e.children)))return e}}var et="undefined"!=typeof window;function rt(t,e,r,n,o){var i=e||[],s=r||Object.create(null),a=n||Object.create(null);t.forEach((function(t){nt(i,s,a,t,o)}));for(var u=0,c=i.length;u<c;u++)"*"===i[u]&&(i.push(i.splice(u,1)[0]),c--,u--);return{pathList:i,pathMap:s,nameMap:a}}function nt(t,e,r,n,o,i){var s=n.path,a=n.name,u=n.pathToRegexpOptions||{},c=function(t,e,r){return r||(t=t.replace(/\/$/,"")),"/"===t[0]||null==e?t:O(e.path+"/"+t)}(s,o,u.strict);"boolean"==typeof n.caseSensitive&&(u.sensitive=n.caseSensitive);var p={path:c,regex:ot(c,u),components:n.components||{default:n.component},alias:n.alias?"string"==typeof n.alias?[n.alias]:n.alias:[],instances:{},enteredCbs:{},name:a,parent:o,matchAs:i,redirect:n.redirect,beforeEnter:n.beforeEnter,meta:n.meta||{},props:null==n.props?{}:n.components?n.props:{default:n.props}};if(n.children&&n.children.forEach((function(n){var o=i?O(i+"/"+n.path):void 0;nt(t,e,r,n,p,o)})),e[p.path]||(t.push(p.path),e[p.path]=p),void 0!==n.alias)for(var d=Array.isArray(n.alias)?n.alias:[n.alias],l=0;l<d.length;++l){var h={path:d[l],children:n.children};nt(t,e,r,h,o,p.path||"/")}a&&(r[a]||(r[a]=p))}function ot(t,e){return T(t,[],e)}function it(t,e){var r=rt(t),n=r.pathList,o=r.pathMap,i=r.nameMap;function s(t,r,s){var u=W(t,r,!1,e),c=u.name;if(c){var p=i[c];if(!p)return a(null,u);var d=p.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!=typeof u.params&&(u.params={}),r&&"object"==typeof r.params)for(var l in r.params)!(l in u.params)&&d.indexOf(l)>-1&&(u.params[l]=r.params[l]);return u.path=J(p.path,u.params),a(p,u,s)}if(u.path){u.params={};for(var h=0;h<n.length;h++){var f=n[h],m=o[f];if(st(m.regex,u.path,u.params))return a(m,u,s)}}return a(null,u)}function a(t,r,n){return t&&t.redirect?function(t,r){var n=t.redirect,o="function"==typeof n?n(A(t,r,null,e)):n;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return a(null,r);var u=o,c=u.name,p=u.path,d=r.query,l=r.hash,h=r.params;if(d=u.hasOwnProperty("query")?u.query:d,l=u.hasOwnProperty("hash")?u.hash:l,h=u.hasOwnProperty("params")?u.params:h,c)return i[c],s({_normalized:!0,name:c,query:d,hash:l,params:h},void 0,r);if(p){var f=function(t,e){return U(t,e.parent?e.parent.path:"/",!0)}(p,t);return s({_normalized:!0,path:J(f,h),query:d,hash:l},void 0,r)}return a(null,r)}(t,n||r):t&&t.matchAs?function(t,e,r){var n=s({_normalized:!0,path:J(r,e.params)});if(n){var o=n.matched,i=o[o.length-1];return e.params=n.params,a(i,e)}return a(null,e)}(0,r,t.matchAs):A(t,r,n,e)}return{match:s,addRoute:function(t,e){var r="object"!=typeof t?i[t]:void 0;rt([e||t],n,o,i,r),r&&r.alias.length&&rt(r.alias.map((function(t){return{path:t,children:[e]}})),n,o,i,r)},getRoutes:function(){return n.map((function(t){return o[t]}))},addRoutes:function(t){rt(t,n,o,i)}}}function st(t,e,r){var n=e.match(t);if(!n)return!1;if(!r)return!0;for(var o=1,i=n.length;o<i;++o){var s=t.keys[o-1];s&&(r[s.name||"pathMatch"]="string"==typeof n[o]?g(n[o]):n[o])}return!0}var at=et&&window.performance&&window.performance.now?window.performance:Date;function ut(){return at.now().toFixed(3)}var ct=ut();function pt(){return ct}function dt(t){return ct=t}var lt=Object.create(null);function ht(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var t=window.location.protocol+"//"+window.location.host,e=window.location.href.replace(t,""),r=d({},window.history.state);return r.key=pt(),window.history.replaceState(r,"",e),window.addEventListener("popstate",gt),function(){window.removeEventListener("popstate",gt)}}function ft(t,e,r,n){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick((function(){var i=function(){var t=pt();if(t)return lt[t]}(),s=o.call(t,e,r,n?i:null);s&&("function"==typeof s.then?s.then((function(t){At(t,i)})).catch((function(t){})):At(s,i))}))}}function mt(){var t=pt();t&&(lt[t]={x:window.pageXOffset,y:window.pageYOffset})}function gt(t){mt(),t.state&&t.state.key&&dt(t.state.key)}function vt(t){return bt(t.x)||bt(t.y)}function yt(t){return{x:bt(t.x)?t.x:window.pageXOffset,y:bt(t.y)?t.y:window.pageYOffset}}function bt(t){return"number"==typeof t}var wt=/^#\d/;function At(t,e){var r,n="object"==typeof t;if(n&&"string"==typeof t.selector){var o=wt.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(o){var i=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){var r=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-r.left-e.x,y:n.top-r.top-e.y}}(o,i={x:bt((r=i).x)?r.x:0,y:bt(r.y)?r.y:0})}else vt(t)&&(e=yt(t))}else n&&vt(t)&&(e=yt(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var Et,xt=et&&(-1===(Et=window.navigator.userAgent).indexOf("Android 2.")&&-1===Et.indexOf("Android 4.0")||-1===Et.indexOf("Mobile Safari")||-1!==Et.indexOf("Chrome")||-1!==Et.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState;function _t(t,e){mt();var r=window.history;try{if(e){var n=d({},r.state);n.key=pt(),r.replaceState(n,"",t)}else r.pushState({key:dt(ut())},"",t)}catch(r){window.location[e?"replace":"assign"](t)}}function Pt(t){_t(t,!0)}var It={redirected:2,aborted:4,cancelled:8,duplicated:16};function Lt(t,e){return Ct(t,e,It.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function Ct(t,e,r,n){var o=new Error(n);return o._isRouter=!0,o.from=t,o.to=e,o.type=r,o}var Rt=["params","query","hash"];function Nt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Ut(t,e){return Nt(t)&&t._isRouter&&(null==e||t.type===e)}function Ot(t,e,r){var n=function(o){o>=t.length?r():t[o]?e(t[o],(function(){n(o+1)})):n(o+1)};n(0)}function kt(t,e){return Tt(t.map((function(t){return Object.keys(t.components).map((function(r){return e(t.components[r],t.instances[r],t,r)}))})))}function Tt(t){return Array.prototype.concat.apply([],t)}var St="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function jt(t){var e=!1;return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];if(!e)return e=!0,t.apply(this,r)}}var Ft=function(t,e){this.router=t,this.base=function(t){if(!t)if(et){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(e),this.current=x,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function $t(t,e,r,n){var o=kt(t,(function(t,n,o,i){var s=function(t,e){return"function"!=typeof t&&(t=Q.extend(t)),t.options[e]}(t,e);if(s)return Array.isArray(s)?s.map((function(t){return r(t,n,o,i)})):r(s,n,o,i)}));return Tt(n?o.reverse():o)}function Dt(t,e){if(e)return function(){return t.apply(e,arguments)}}Ft.prototype.listen=function(t){this.cb=t},Ft.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Ft.prototype.onError=function(t){this.errorCbs.push(t)},Ft.prototype.transitionTo=function(t,e,r){var n,o=this;try{n=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(n,(function(){o.updateRoute(n),e&&e(n),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(n,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(n)})))}),(function(t){r&&r(t),t&&!o.ready&&(Ut(t,It.redirected)&&i===x||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Ft.prototype.confirmTransition=function(t,e,r){var n=this,o=this.current;this.pending=t;var i,s,a=function(t){!Ut(t)&&Nt(t)&&(n.errorCbs.length?n.errorCbs.forEach((function(e){e(t)})):p.error(t)),r&&r(t)},u=t.matched.length-1,c=o.matched.length-1;if(I(t,o)&&u===c&&t.matched[u]===o.matched[c])return this.ensureURL(),t.hash&&ft(this.router,o,t,!1),a(((s=Ct(i=o,t,It.duplicated,'Avoided redundant navigation to current location: "'+i.fullPath+'".')).name="NavigationDuplicated",s));var d,l=function(t,e){var r,n=Math.max(t.length,e.length);for(r=0;r<n&&t[r]===e[r];r++);return{updated:e.slice(0,r),activated:e.slice(r),deactivated:t.slice(r)}}(this.current.matched,t.matched),h=l.updated,f=l.deactivated,m=l.activated,g=[].concat(function(t){return $t(t,"beforeRouteLeave",Dt,!0)}(f),this.router.beforeHooks,function(t){return $t(t,"beforeRouteUpdate",Dt)}(h),m.map((function(t){return t.beforeEnter})),(d=m,function(t,e,r){var n=!1,o=0,i=null;kt(d,(function(t,e,s,a){if("function"==typeof t&&void 0===t.cid){n=!0,o++;var u,c=jt((function(e){var n;((n=e).__esModule||St&&"Module"===n[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:Q.extend(e),s.components[a]=e,--o<=0&&r()})),p=jt((function(t){var e="Failed to resolve async component "+a+": "+t;i||(i=Nt(t)?t:new Error(e),r(i))}));try{u=t(c,p)}catch(t){p(t)}if(u)if("function"==typeof u.then)u.then(c,p);else{var d=u.component;d&&"function"==typeof d.then&&d.then(c,p)}}})),n||r()})),v=function(e,r){if(n.pending!==t)return a(Lt(o,t));try{e(t,o,(function(e){!1===e?(n.ensureURL(!0),a(function(t,e){return Ct(t,e,It.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}(o,t))):Nt(e)?(n.ensureURL(!0),a(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(a(function(t,e){return Ct(t,e,It.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return Rt.forEach((function(r){r in t&&(e[r]=t[r])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}(o,t)),"object"==typeof e&&e.replace?n.replace(e):n.push(e)):r(e)}))}catch(t){a(t)}};Ot(g,v,(function(){var r=function(t){return $t(t,"beforeRouteEnter",(function(t,e,r,n){return function(t,e,r){return function(n,o,i){return t(n,o,(function(t){"function"==typeof t&&(e.enteredCbs[r]||(e.enteredCbs[r]=[]),e.enteredCbs[r].push(t)),i(t)}))}}(t,r,n)}))}(m);Ot(r.concat(n.router.resolveHooks),v,(function(){if(n.pending!==t)return a(Lt(o,t));n.pending=null,e(t),n.router.app&&n.router.app.$nextTick((function(){C(t)}))}))}))},Ft.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},Ft.prototype.setupListeners=function(){},Ft.prototype.teardown=function(){this.listeners.forEach((function(t){t()})),this.listeners=[],this.current=x,this.pending=null};var Bt=function(t){function e(e,r){t.call(this,e,r),this._startLocation=qt(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,r=e.options.scrollBehavior,n=xt&&r;n&&this.listeners.push(ht());var o=function(){var r=t.current,o=qt(t.base);t.current===x&&o===t._startLocation||t.transitionTo(o,(function(t){n&&ft(e,t,r,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){_t(O(n.base+t.fullPath)),ft(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Pt(O(n.base+t.fullPath)),ft(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.ensureURL=function(t){if(qt(this.base)!==this.current.fullPath){var e=O(this.base+this.current.fullPath);t?_t(e):Pt(e)}},e.prototype.getCurrentLocation=function(){return qt(this.base)},e}(Ft);function qt(t){var e=window.location.pathname,r=e.toLowerCase(),n=t.toLowerCase();return!t||r!==n&&0!==r.indexOf(O(n+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Mt=function(t){function e(e,r,n){t.call(this,e,r),n&&function(t){var e=qt(t);if(!/^\/#/.test(e))return window.location.replace(O(t+"/#"+e)),!0}(this.base)||Vt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,r=xt&&e;r&&this.listeners.push(ht());var n=function(){var e=t.current;Vt()&&t.transitionTo(Gt(),(function(n){r&&ft(t.router,n,e,!0),xt||zt(n.fullPath)}))},o=xt?"popstate":"hashchange";window.addEventListener(o,n),this.listeners.push((function(){window.removeEventListener(o,n)}))}},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Ht(t.fullPath),ft(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){zt(t.fullPath),ft(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Gt()!==e&&(t?Ht(e):zt(e))},e.prototype.getCurrentLocation=function(){return Gt()},e}(Ft);function Vt(){var t=Gt();return"/"===t.charAt(0)||(zt("/"+t),!1)}function Gt(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Kt(t){var e=window.location.href,r=e.indexOf("#");return(r>=0?e.slice(0,r):e)+"#"+t}function Ht(t){xt?_t(Kt(t)):window.location.hash=t}function zt(t){xt?Pt(Kt(t)):window.location.replace(Kt(t))}var Jt=function(t){function e(e,r){t.call(this,e,r),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index+1).concat(t),n.index++,e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index).concat(t),e&&e(t)}),r)},e.prototype.go=function(t){var e=this,r=this.index+t;if(!(r<0||r>=this.stack.length)){var n=this.stack[r];this.confirmTransition(n,(function(){var t=e.current;e.index=r,e.updateRoute(n),e.router.afterHooks.forEach((function(e){e&&e(n,t)}))}),(function(t){Ut(t,It.duplicated)&&(e.index=r)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Ft),Wt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=it(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!xt&&!1!==t.fallback,this.fallback&&(e="hash"),et||(e="abstract"),this.mode=e,e){case"history":this.history=new Bt(this,t.base);break;case"hash":this.history=new Mt(this,t.base,this.fallback);break;case"abstract":this.history=new Jt(this,t.base)}},Qt={currentRoute:{configurable:!0}};Wt.prototype.match=function(t,e,r){return this.matcher.match(t,e,r)},Qt.currentRoute.get=function(){return this.history&&this.history.current},Wt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var r=e.apps.indexOf(t);r>-1&&e.apps.splice(r,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var r=this.history;if(r instanceof Bt||r instanceof Mt){var n=function(t){r.setupListeners(),function(t){var n=r.current,o=e.options.scrollBehavior;xt&&o&&"fullPath"in t&&ft(e,t,n,!1)}(t)};r.transitionTo(r.getCurrentLocation(),n,n)}r.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Wt.prototype.beforeEach=function(t){return Xt(this.beforeHooks,t)},Wt.prototype.beforeResolve=function(t){return Xt(this.resolveHooks,t)},Wt.prototype.afterEach=function(t){return Xt(this.afterHooks,t)},Wt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Wt.prototype.onError=function(t){this.history.onError(t)},Wt.prototype.push=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.push(t,e,r)}));this.history.push(t,e,r)},Wt.prototype.replace=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.replace(t,e,r)}));this.history.replace(t,e,r)},Wt.prototype.go=function(t){this.history.go(t)},Wt.prototype.back=function(){this.go(-1)},Wt.prototype.forward=function(){this.go(1)},Wt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Wt.prototype.resolve=function(t,e,r){var n=W(t,e=e||this.history.current,r,this),o=this.match(n,e),i=o.redirectedFrom||o.fullPath,s=function(t,e,r){var n="hash"===r?"#"+e:e;return t?O(t+"/"+n):n}(this.history.base,i,this.mode);return{location:n,route:o,href:s,normalizedTo:n,resolved:o}},Wt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Wt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==x&&this.history.transitionTo(this.history.getCurrentLocation())},Wt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==x&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Wt.prototype,Qt);var Yt=Wt;function Xt(t,e){return t.push(e),function(){var r=t.indexOf(e);r>-1&&t.splice(r,1)}}Wt.install=function t(e){if(!t.installed||Q!==e){t.installed=!0,Q=e;var r=function(t){return void 0!==t},n=function(t,e){var n=t.$options._parentVnode;r(n)&&r(n=n.data)&&r(n=n.registerRouteInstance)&&n(t,e)};e.mixin({beforeCreate:function(){r(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",R),e.component("RouterLink",X);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Wt.version="3.6.5",Wt.isNavigationFailure=Ut,Wt.NavigationFailureType=It,Wt.START_LOCATION=x,et&&window.Vue&&window.Vue.use(Wt);var Zt=r(99498);const te=(0,n.$V)((()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,42986)))),ee=(0,n.$V)((()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,68409)))),re=(0,n.$V)((()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,20615)))),ne=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:(0,n.$V)((()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,374)))),navigation:(0,n.$V)((()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,19414))))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",components:{default:te,navigation:ee,sidebar:re},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];n.Ay.use(Yt);const oe=new Yt({mode:"history",base:(0,Zt.Jv)(""),linkActiveClass:"active",routes:ne});var ie,se=r(31755),ae=r(92457),ue=r(65899);n.Ay.use(o.Ay,{defaultHtml:!1});const ce=(0,se.P)();(0,i.O)(ce,oe),r.nc=btoa(null!==(ie=(0,ae.do)())&&void 0!==ie?ie:""),n.Ay.prototype.t=s.Tl,n.Ay.prototype.n=s.zw,n.Ay.use(ue.R2);const pe=(0,ue.Ey)();new n.Ay({router:oe,store:ce,pinia:pe,render:t=>t(c),el:"#content"})},58723:(t,e)=>{function r(t,e){var n={name:t.name,path:t.path,hash:t.hash,query:t.query,params:t.params,fullPath:t.fullPath,meta:t.meta};return e&&(n.from=r(e)),Object.freeze(n)}e.O=function(t,e,n){var o=(n||{}).moduleName||"route";t.registerModule(o,{namespaced:!0,state:r(e.currentRoute),mutations:{ROUTE_CHANGED:function(e,n){t.state[o]=r(n.to,n.from)}}});var i,s=!1,a=t.watch((function(t){return t[o]}),(function(t){var r=t.fullPath;r!==i&&(null!=i&&(s=!0,e.push(t)),i=r)}),{sync:!0}),u=e.afterEach((function(e,r){s?s=!1:(i=e.fullPath,t.commit(o+"/ROUTE_CHANGED",{to:e,from:r}))}));return function(){null!=u&&u(),null!=a&&a(),t.unregisterModule(o)}}},35810:(t,e,r)=>{"use strict";r.d(e,{Al:()=>k,H4:()=>U,PY:()=>N,Q$:()=>O,R3:()=>A,VL:()=>w,lJ:()=>R,lT:()=>f,pt:()=>E,v7:()=>h});var n,o=r(92457),i=r(53529),s=r(53334),a=r(43627),u=r(71089),c=r(99498),p=r(44719);null===(n=(0,o.HW)())?(0,i.YK)().setApp("files").build():(0,i.YK)().setApp("files").setUid(n.uid).build();const d=["B","KB","MB","GB","TB","PB"],l=["B","KiB","MiB","GiB","TiB","PiB"];function h(t,e=!1,r=!1,n=!1){r=r&&!n,"string"==typeof t&&(t=Number(t));let o=t>0?Math.floor(Math.log(t)/Math.log(n?1e3:1024)):0;o=Math.min((r?l.length:d.length)-1,o);const i=r?l[o]:d[o];let a=(t/Math.pow(n?1e3:1024,o)).toFixed(1);return!0===e&&0===o?("0.0"!==a?"< 1 ":"0 ")+(r?l[1]:d[1]):(a=o<2?parseFloat(a).toFixed(0):parseFloat(a).toLocaleString((0,s.lO)()),a+" "+i)}function f(t,e=!1){try{t=`${t}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch{return null}const r=t.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===r||"."===r[1]||""===r[1])return null;const n=`${r[1]}`,o="i"===r[4]||e?1024:1e3;return Math.round(Number.parseFloat(n)*o**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[r[3]])}var m=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(m||{});const g=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","nc:share-attributes","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:share-types","oc:size","ocs:share-permissions"],v={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},y=function(){return typeof window._nc_dav_properties>"u"&&(window._nc_dav_properties=[...g]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},b=function(){return typeof window._nc_dav_namespaces>"u"&&(window._nc_dav_namespaces={...v}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},w=function(){return`<?xml version="1.0"?>\n\t\t<d:propfind ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${y()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`},A=function(t){return`<?xml version="1.0" encoding="UTF-8"?>\n<d:searchrequest ${b()}\n\txmlns:ns="https://github.com/icewind1991/SearchDAV/ns">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${y()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${(0,o.HW)()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${t}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`};var E=(t=>(t.Folder="folder",t.File="file",t))(E||{});const x=function(t,e){return null!==t.match(e)},_=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch{throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=m.NONE&&t.permissions<=m.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&x(t.source,e)){const r=t.source.match(e)[0];if(!t.source.includes((0,a.join)(r,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(P).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var P=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(P||{});class I{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;constructor(t,e){_(t,e||this._knownDavService),this._data=t;const r={set:(t,e,r)=>(this.updateMtime(),Reflect.set(t,e,r)),deleteProperty:(t,e)=>(this.updateMtime(),Reflect.deleteProperty(t,e))};this._attributes=new Proxy(t.attributes||{},r),delete this._data.attributes,e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,u.O0)(this.source.slice(t.length))}get basename(){return(0,a.basename)(this.source)}get extension(){return(0,a.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return(0,a.dirname)(t.slice(e+r.length)||"/")}const t=new URL(this.source);return(0,a.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}get crtime(){return this._data.crtime}get size(){return this._data.size}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:m.NONE:m.READ}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return x(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,a.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return t.slice(e+r.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id||this.attributes?.fileid}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){_({...this._data,source:t},this._knownDavService),this._data.source=t,this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,a.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}}class L extends I{get type(){return E.File}}class C extends I{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return E.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const R=`/files/${(0,o.HW)()?.uid}`,N=(0,c.dC)("dav"),U=function(t=N,e={}){const r=(0,p.UU)(t,{headers:e});function n(t){r.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,o.zo)(n),n((0,o.do)()),(0,p.Gu)().patch("fetch",((t,e)=>{const r=e.headers;return r?.method&&(e.method=r.method,delete r.method),fetch(t,e)})),r},O=async(t,e="/",r=R)=>(await t.getDirectoryContents(`${r}${e}`,{details:!0,data:`<?xml version="1.0"?>\n\t\t<oc:filter-files ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${y()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>k(t,r))),k=function(t,e=R,r=N){const n=t.props,i=function(t=""){let e=m.NONE;return t&&((t.includes("C")||t.includes("K"))&&(e|=m.CREATE),t.includes("G")&&(e|=m.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=m.UPDATE),t.includes("D")&&(e|=m.DELETE),t.includes("R")&&(e|=m.SHARE)),e}(n?.permissions),s=n?.["owner-id"]||(0,o.HW)()?.uid,a={id:n?.fileid||0,source:`${r}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime,size:n?.size||Number.parseInt(n.getcontentlength||"0"),permissions:i,owner:s,root:e,attributes:{...t,...n,hasPreview:n?.["has-preview"]}};return delete a.attributes?.props,"file"===t.type?new L(a):new C(a)};var T={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",r="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",n=new RegExp("^"+r+"$");t.isExist=function(t){return typeof t<"u"},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,r){if(e){const n=Object.keys(e),o=n.length;for(let i=0;i<o;i++)t[n[i]]="strict"===r?[e[n[i]]]:e[n[i]]}},t.getValue=function(e){return t.isExist(e)?e:""},t.isName=function(t){const e=n.exec(t);return!(null===e||typeof e>"u")},t.getAllMatches=function(t,e){const r=[];let n=e.exec(t);for(;n;){const o=[];o.startIndex=e.lastIndex-n[0].length;const i=n.length;for(let t=0;t<i;t++)o.push(n[t]);r.push(o),n=e.exec(t)}return r},t.nameRegexp=r}(T);new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");var S={};const j={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,r){return t}};S.buildOptions=function(t){return Object.assign({},j,t)},S.defaultOptions=j,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,T.nameRegexp),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var F={};function $(t,e,r){let n;const o={};for(let i=0;i<t.length;i++){const s=t[i],a=D(s);let u="";if(u=void 0===r?a:r+"."+a,a===e.textNodeName)void 0===n?n=s[a]:n+=""+s[a];else{if(void 0===a)continue;if(s[a]){let t=$(s[a],e,u);const r=q(t,e);s[":@"]?B(t,s[":@"],u,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==o[a]&&o.hasOwnProperty(a)?(Array.isArray(o[a])||(o[a]=[o[a]]),o[a].push(t)):e.isArray(a,u,r)?o[a]=[t]:o[a]=t}}}return"string"==typeof n?n.length>0&&(o[e.textNodeName]=n):void 0!==n&&(o[e.textNodeName]=n),o}function D(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const r=e[t];if(":@"!==r)return r}}function B(t,e,r,n){if(e){const o=Object.keys(e),i=o.length;for(let s=0;s<i;s++){const i=o[s];n.isArray(i,r+"."+i,!0,!0)?t[i]=[e[i]]:t[i]=e[i]}}}function q(t,e){const{textNodeName:r}=e,n=Object.keys(t).length;return!(0!==n&&(1!==n||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r]))}F.prettify=function(t,e){return $(t,e)};const{buildOptions:M}=S,{prettify:V}=F;function G(t,e,r,n){let o="",i=!1;for(let s=0;s<t.length;s++){const a=t[s],u=K(a);if(void 0===u)continue;let c="";if(c=0===r.length?u:`${r}.${u}`,u===e.textNodeName){let t=a[u];z(c,e)||(t=e.tagValueProcessor(u,t),t=J(t,e)),i&&(o+=n),o+=t,i=!1;continue}if(u===e.cdataPropName){i&&(o+=n),o+=`<![CDATA[${a[u][0][e.textNodeName]}]]>`,i=!1;continue}if(u===e.commentPropName){o+=n+`\x3c!--${a[u][0][e.textNodeName]}--\x3e`,i=!0;continue}if("?"===u[0]){const t=H(a[":@"],e),r="?xml"===u?"":n;let s=a[u][0][e.textNodeName];s=0!==s.length?" "+s:"",o+=r+`<${u}${s}${t}?>`,i=!0;continue}let p=n;""!==p&&(p+=e.indentBy);const d=n+`<${u}${H(a[":@"],e)}`,l=G(a[u],e,c,p);-1!==e.unpairedTags.indexOf(u)?e.suppressUnpairedNode?o+=d+">":o+=d+"/>":l&&0!==l.length||!e.suppressEmptyNode?l&&l.endsWith(">")?o+=d+`>${l}${n}</${u}>`:(o+=d+">",l&&""!==n&&(l.includes("/>")||l.includes("</"))?o+=n+e.indentBy+l+n:o+=l,o+=`</${u}>`):o+=d+"/>",i=!0}return o}function K(t){const e=Object.keys(t);for(let r=0;r<e.length;r++){const n=e[r];if(t.hasOwnProperty(n)&&":@"!==n)return n}}function H(t,e){let r="";if(t&&!e.ignoreAttributes)for(let n in t){if(!t.hasOwnProperty(n))continue;let o=e.attributeValueProcessor(n,t[n]);o=J(o,e),!0===o&&e.suppressBooleanAttributes?r+=` ${n.substr(e.attributeNamePrefix.length)}`:r+=` ${n.substr(e.attributeNamePrefix.length)}="${o}"`}return r}function z(t,e){let r=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let n in e.stopNodes)if(e.stopNodes[n]===t||e.stopNodes[n]==="*."+r)return!0;return!1}function J(t,e){if(t&&t.length>0&&e.processEntities)for(let r=0;r<e.entities.length;r++){const n=e.entities[r];t=t.replace(n.regex,n.val)}return t}const W=function(t,e){let r="";return e.format&&e.indentBy.length>0&&(r="\n"),G(t,e,"",r)},Q={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function Y(t){this.options=Object.assign({},Q,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=tt),this.processTextOrObjNode=X,this.options.format?(this.indentate=Z,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function X(t,e,r){const n=this.j2x(t,r+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,r):this.buildObjectNode(n.val,e,n.attrStr,r)}function Z(t){return this.options.indentBy.repeat(t)}function tt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}Y.prototype.build=function(t){return this.options.preserveOrder?W(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},Y.prototype.j2x=function(t,e){let r="",n="";for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o))if(typeof t[o]>"u")this.isAttribute(o)&&(n+="");else if(null===t[o])this.isAttribute(o)?n+="":"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if(t[o]instanceof Date)n+=this.buildTextValNode(t[o],o,"",e);else if("object"!=typeof t[o]){const i=this.isAttribute(o);if(i)r+=this.buildAttrPairStr(i,""+t[o]);else if(o===this.options.textNodeName){let e=this.options.tagValueProcessor(o,""+t[o]);n+=this.replaceEntitiesValue(e)}else n+=this.buildTextValNode(t[o],o,"",e)}else if(Array.isArray(t[o])){const r=t[o].length;let i="";for(let s=0;s<r;s++){const r=t[o][s];typeof r>"u"||(null===r?"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar:"object"==typeof r?this.options.oneListGroup?i+=this.j2x(r,e+1).val:i+=this.processTextOrObjNode(r,o,e):i+=this.buildTextValNode(r,o,"",e))}this.options.oneListGroup&&(i=this.buildObjectNode(i,o,"",e)),n+=i}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const e=Object.keys(t[o]),n=e.length;for(let i=0;i<n;i++)r+=this.buildAttrPairStr(e[i],""+t[o][e[i]])}else n+=this.processTextOrObjNode(t[o],o,e);return{attrStr:r,val:n}},Y.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},Y.prototype.buildObjectNode=function(t,e,r,n){if(""===t)return"?"===e[0]?this.indentate(n)+"<"+e+r+"?"+this.tagEndChar:this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar;{let o="</"+e+this.tagEndChar,i="";return"?"===e[0]&&(i="?",o=""),!r&&""!==r||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===i.length?this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(n)+"<"+e+r+i+this.tagEndChar+t+this.indentate(n)+o:this.indentate(n)+"<"+e+r+i+">"+t+o}},Y.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},Y.prototype.buildTextValNode=function(t,e,r,n){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(n)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(n)+"<"+e+r+"?"+this.tagEndChar;{let o=this.options.tagValueProcessor(e,t);return o=this.replaceEntitiesValue(o),""===o?this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+r+">"+o+"</"+e+this.tagEndChar}},Y.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const r=this.options.entities[e];t=t.replace(r.regex,r.val)}return t}}},i={};function s(t){var e=i[t];if(void 0!==e)return e.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(r.exports,r,r.exports,s),r.loaded=!0,r.exports}s.m=o,e=[],s.O=(t,r,n,o)=>{if(!r){var i=1/0;for(p=0;p<e.length;p++){r=e[p][0],n=e[p][1],o=e[p][2];for(var a=!0,u=0;u<r.length;u++)(!1&o||i>=o)&&Object.keys(s.O).every((t=>s.O[t](r[u])))?r.splice(u--,1):(a=!1,o<i&&(i=o));if(a){e.splice(p--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var p=e.length;p>0&&e[p-1][2]>o;p--)e[p]=e[p-1];e[p]=[r,n,o]},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var r in e)s.o(e,r)&&!s.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce(((e,r)=>(s.f[r](t,e),e)),[])),s.u=t=>(({3239:"settings-users",4529:"settings-apps-view"}[t]||t)+"-"+t+".js?v="+{1359:"d217768bf3f39a7359dd",1439:"41c39783c33a6fb28f5c",3239:"b380e9fda46ca498c72f",4529:"bb61b58e95ee6934e7d9",8484:"938301f58da67708d5b8",8618:"1e8f15db3b14455fef8f",8753:"79b1e1f3f1b7fdbe0988"}[t]),s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r={},n="nextcloud:",s.l=(t,e,o,i)=>{if(r[t])r[t].push(e);else{var a,u;if(void 0!==o)for(var c=document.getElementsByTagName("script"),p=0;p<c.length;p++){var d=c[p];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==n+o){a=d;break}}a||(u=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,s.nc&&a.setAttribute("nonce",s.nc),a.setAttribute("data-webpack",n+o),a.src=t),r[t]=[e];var l=(e,n)=>{a.onerror=a.onload=null,clearTimeout(h);var o=r[t];if(delete r[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(n))),e)return e(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=l.bind(null,a.onerror),a.onload=l.bind(null,a.onload),u&&document.head.appendChild(a)}},s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),s.j=2689,(()=>{var t;s.g.importScripts&&(t=s.g.location+"");var e=s.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=r[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),(()=>{s.b=document.baseURI||self.location.href;var t={2689:0};s.f.j=(e,r)=>{var n=s.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,o)=>n=t[e]=[r,o]));r.push(n[2]=o);var i=s.p+s.u(e),a=new Error;s.l(i,(r=>{if(s.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}}),"chunk-"+e,e)}},s.O.j=e=>0===t[e];var e=(e,r)=>{var n,o,i=r[0],a=r[1],u=r[2],c=0;if(i.some((e=>0!==t[e]))){for(n in a)s.o(a,n)&&(s.m[n]=a[n]);if(u)var p=u(s)}for(e&&e(r);c<i.length;c++)o=i[c],s.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return s.O(p)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))})(),s.nc=void 0;var a=s.O(void 0,[4208],(()=>s(46472)));a=s.O(a)})(); -//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=488eb1d7a6736c022bb1
\ No newline at end of file +(()=>{var e,r,n,o={31755:(e,r,n)=>{"use strict";n.d(r,{P:()=>B});var o=n(85471),i=n(95353),s=n(59097),a=n(22843),u=n(35810),c=n(99498),p=n(26287),d=n(56760);n(51257);const l=function(t){return t.replace(/\/$/,"")},h=()=>(0,d.C)(),f=(t,e)=>p.A.get(l(t),e),m=(t,e)=>p.A.post(l(t),e),g=(t,e)=>p.A.put(l(t),e),y=(t,e)=>p.A.delete(l(t),{params:e});var v=n(36620),b=n(96763);const w=(0,s.c0)("settings").persist(!0).build(),A=function(t,e){return 1===e?t.sort(((t,e)=>t.usercount-t.disabled<e.usercount-e.disabled)):t.sort(((t,e)=>t.name.localeCompare(e.name)))},E={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},x={users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,disabledUsersOffset:0,disabledUsersLimit:25,userCount:0,showConfig:{showStoragePath:"true"===w.getItem("account_settings__showStoragePath"),showUserBackend:"true"===w.getItem("account_settings__showUserBackend"),showLastLogin:"true"===w.getItem("account_settings__showLastLogin"),showNewUserForm:"true"===w.getItem("account_settings__showNewUserForm"),showLanguages:"true"===w.getItem("account_settings__showLanguages")}},_={appendUsers(t,e){const r=t.users.map((t=>{let{id:e}=t;return e})),n=Object.values(e).filter((t=>{let{id:e}=t;return!r.includes(e)})),o=t.users.concat(n);t.usersOffset+=t.usersLimit,t.users=o},updateDisabledUsers(t,e){t.disabledUsersOffset+=t.disabledUsersLimit},setPasswordPolicyMinLength(t,e){t.minPasswordLength=""!==e?e:0},initGroups(t,e){let{groups:r,orderBy:n,userCount:o}=e;t.groups=r.map((t=>Object.assign({},E,t))),t.orderBy=n,t.userCount=o,t.groups=A(t.groups,t.orderBy)},addGroup(t,e){let{gid:r,displayName:n}=e;try{if(void 0!==t.groups.find((t=>t.id===r)))return;const e=Object.assign({},E,{id:r,name:n});t.groups.unshift(e),t.groups=A(t.groups,t.orderBy)}catch(t){b.error("Can't create group",t)}},renameGroup(t,e){let{gid:r,displayName:n}=e;const o=t.groups.findIndex((t=>t.id===r));if(o>=0){const e=t.groups[o];e.name=n,t.groups.splice(o,1,e),t.groups=A(t.groups,t.orderBy)}},removeGroup(t,e){const r=t.groups.findIndex((t=>t.id===e));r>=0&&t.groups.splice(r,1)},addUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=A(t.groups,t.orderBy)},removeUserGroup(t,e){let{userid:r,gid:n}=e;const o=t.groups.find((t=>t.id===n)),i=t.users.find((t=>t.id===r));o&&i.enabled&&t.userCount>0&&o.usercount--;const s=i.groups;s.splice(s.indexOf(n),1),t.groups=A(t.groups,t.orderBy)},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;t.users.find((t=>t.id===r)).subadmin.push(n)},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;const o=t.users.find((t=>t.id===r)).subadmin;o.splice(o.indexOf(n),1)},deleteUser(t,e){const r=t.users.findIndex((t=>t.id===e));this.commit("updateUserCounts",{user:t.users[r],actionType:"remove"}),t.users.splice(r,1)},addUserData(t,e){const r=e.data.ocs.data;t.users.unshift(r),this.commit("updateUserCounts",{user:r,actionType:"create"})},enableDisableUser(t,e){let{userid:r,enabled:n}=e;const o=t.users.find((t=>t.id===r));o.enabled=n,this.commit("updateUserCounts",{user:o,actionType:n?"enable":"disable"})},updateUserCounts(t,e){let{user:r,actionType:n}=e;if(0===t.userCount)return;const o=t.groups.find((t=>"disabled"===t.id));switch(n){case"enable":case"disable":o.usercount+=r.enabled?-1:1,t.userCount+=r.enabled?1:-1,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled+=r.enabled?-1:1}));break;case"create":t.userCount++,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).usercount++}));break;case"remove":r.enabled?(t.userCount--,r.groups.forEach((e=>{const r=t.groups.find((t=>t.id===e));r?r.usercount--:b.warn("User group "+e+" does not exist during user removal")}))):(o.usercount--,r.groups.forEach((e=>{t.groups.find((t=>t.id===e)).disabled--})));break;default:v.A.error("Unknown action type in updateUserCounts: '".concat(n,"'"))}},setUserData(t,e){let{userid:r,key:n,value:o}=e;if("quota"===n){const e=(0,u.lT)(o,!0);t.users.find((t=>t.id===r))[n][n]=null!==e?e:o}else t.users.find((t=>t.id===r))[n]=o},resetUsers(t){t.users=[],t.usersOffset=0,t.disabledUsersOffset=0},setShowConfig(t,e){let{key:r,value:n}=e;w.setItem("account_settings__".concat(r),JSON.stringify(n)),t.showConfig[r]=n}},P=p.A.CancelToken;let I=null;const L={state:x,mutations:_,getters:{getUsers:t=>t.users,getGroups:t=>t.groups,getSubadminGroups:t=>t.groups.filter((t=>"admin"!==t.id&&"disabled"!==t.id)),getPasswordPolicyMinLength:t=>t.minPasswordLength,getUsersOffset:t=>t.usersOffset,getUsersLimit:t=>t.usersLimit,getDisabledUsersOffset:t=>t.disabledUsersOffset,getDisabledUsersLimit:t=>t.disabledUsersLimit,getUserCount:t=>t.userCount,getShowConfig:t=>t.showConfig},actions:{searchUsers(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},getUser:(t,e)=>f((0,c.KT)("cloud/users/".concat(e))).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})),getUsers(t,e){let{offset:r,limit:n,search:o,group:i}=e;return I&&I.cancel("Operation canceled by another search request."),I=P.source(),o="string"==typeof o?o:"",o=o.replace(/in:[^\s]+/g,"").trim(),i="string"==typeof i?i:"",""!==i?f((0,c.KT)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)})):f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:I.token}).then((e=>{const r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((e=>{p.A.isCancel(e)||t.commit("API_FAILURE",e)}))},async getDisabledUsers(t,e){let{offset:r,limit:n}=e;const o=(0,c.KT)("cloud/users/disabled?offset={offset}&limit={limit}",{offset:r,limit:n});try{const e=await f(o),r=Object.keys(e.data.ocs.data.users).length;return r>0&&(t.commit("appendUsers",e.data.ocs.data.users),t.commit("updateDisabledUsers",e.data.ocs.data.users)),r}catch(e){t.commit("API_FAILURE",e)}},getGroups(t,e){let{offset:r,limit:n,search:o}=e;o="string"==typeof o?o:"";const i=-1===n?"":"&limit=".concat(n);return f((0,c.KT)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((e=>Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromList(t,e){let{offset:r,limit:n,search:o}=e;return o="string"==typeof o?o:"",f((0,c.KT)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((e=>Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0))).catch((e=>t.commit("API_FAILURE",e)))},getUsersFromGroup(t,e){let{groupid:r,offset:n,limit:o}=e;return f((0,c.KT)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((e=>t.commit("getUsersFromList",e.data.ocs.data.users))).catch((e=>t.commit("API_FAILURE",e)))},getPasswordPolicyMinLength:t=>!(!(0,a.F)().password_policy||!(0,a.F)().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",(0,a.F)().password_policy.minLength),(0,a.F)().password_policy.minLength),addGroup:(t,e)=>h().then((r=>m((0,c.KT)("cloud/groups"),{groupid:e}).then((r=>(t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}))).catch((t=>{throw t})))).catch((r=>{throw t.commit("API_FAILURE",{gid:e,error:r}),r})),renameGroup(t,e){let{groupid:r,displayName:n}=e;return h().then((e=>g((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((e=>(t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:(t,e)=>h().then((r=>y((0,c.KT)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((r=>t.commit("removeGroup",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{gid:e,error:r}))),addUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("addUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserGroup(t,e){let{userid:r,gid:n}=e;return h().then((e=>y((0,c.KT)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserGroup",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>{throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>m((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("addUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},removeUserSubAdmin(t,e){let{userid:r,gid:n}=e;return h().then((e=>y((0,c.KT)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((e=>t.commit("removeUserSubAdmin",{userid:r,gid:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},wipeUserDevices:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/wipe",{userid:e})).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),deleteUser:(t,e)=>h().then((r=>y((0,c.KT)("cloud/users/{userid}",{userid:e})).then((r=>t.commit("deleteUser",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),addUser(t,e){let{commit:r,dispatch:n}=t,{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}=e;return h().then((t=>m((0,c.KT)("cloud/users"),{userid:o,password:i,displayName:s,email:a,groups:u,subadmin:p,quota:d,language:l,manager:f}).then((t=>n("addUserData",o||t.data.ocs.data.id))).catch((t=>{throw t})))).catch((t=>{throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:(t,e)=>h().then((r=>f((0,c.KT)("cloud/users/{userid}",{userid:e})).then((e=>t.commit("addUserData",e))).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r}))),enableDisableUser(t,e){let{userid:r,enabled:n=!0}=e;const o=n?"enable":"disable";return h().then((e=>g((0,c.KT)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:o})).then((e=>t.commit("enableDisableUser",{userid:r,enabled:n}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e})))},setUserData(t,e){let{userid:r,key:n,value:o}=e;const i=["email","displayname","manager"];return-1!==["email","language","quota","displayname","password","manager"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?h().then((e=>g((0,c.KT)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((e=>t.commit("setUserData",{userid:r,key:n,value:o}))).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{userid:r,error:e}))):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(t,e)=>h().then((t=>m((0,c.KT)("cloud/users/{userid}/welcome",{userid:e})).then((t=>!0)).catch((t=>{throw t})))).catch((r=>t.commit("API_FAILURE",{userid:e,error:r})))}};var C=n(85168),R=n(38613),N=n(96763);const U={APPS_API_FAILURE(e,r){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{isHTML:!0}),N.error(e,r)},initCategories(t,e){let{categories:r,updateCount:n}=e;t.categories=r,t.updateCount=n},updateCategories(t,e){t.gettingCategoriesPromise=e},setUpdateCount(t,e){t.updateCount=e},addCategory(t,e){t.categories.push(e)},appendCategories(t,e){t.categories=e},setAllApps(t,e){t.apps=e},setError(t,e){let{appId:r,error:n}=e;Array.isArray(r)||(r=[r]),r.forEach((e=>{t.apps.find((t=>t.id===e)).error=n}))},clearError(t,e){let{appId:r,error:n}=e;t.apps.find((t=>t.id===r)).error=null},enableApp(t,e){let{appId:r,groups:n}=e;const o=t.apps.find((t=>t.id===r));o.active=!0,o.groups=n},setInstallState(t,e){let{appId:r,canInstall:n}=e;const o=t.apps.find((t=>t.id===r));o&&(o.canInstall=!0===n)},disableApp(t,e){const r=t.apps.find((t=>t.id===e));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp(t,e){t.apps.find((t=>t.id===e)).active=!1,t.apps.find((t=>t.id===e)).groups=[],t.apps.find((t=>t.id===e)).needsDownload=!0,t.apps.find((t=>t.id===e)).installed=!1,t.apps.find((t=>t.id===e)).canUnInstall=!1,t.apps.find((t=>t.id===e)).canInstall=!0},updateApp(t,e){const r=t.apps.find((t=>t.id===e)),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps(t){t.apps=[]},reset(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!0)})):o.Ay.set(t.loading,e,!0)},stopLoading(t,e){Array.isArray(e)?e.forEach((e=>{o.Ay.set(t.loading,e,!1)})):o.Ay.set(t.loading,e,!1)}},O={enableApp(e,r){let n,{appId:o,groups:i}=r;return n=Array.isArray(o)?o:[o],h().then((r=>(e.commit("startLoading",n),e.commit("startLoading","install"),m((0,c.Jv)("settings/apps/enable"),{appIds:n,groups:i}).then((r=>(e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((t=>{e.commit("enableApp",{appId:t,groups:i})})),f((0,c.Jv)("apps/files")).then((()=>{r.data.update_required&&((0,C.cf)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:()=>window.location.reload(),close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(o)||((0,C.Qg)(t("settings","Error: This app cannot be enabled because it makes the server unstable")),e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")}),e.dispatch("disableApp",{appId:o}))}))))).catch((t=>{e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:o,error:t})))},forceEnableApp(t,e){let r,{appId:n,groups:o}=e;return r=Array.isArray(n)?n:[n],h().then((()=>(t.commit("startLoading",r),t.commit("startLoading","install"),m((0,c.Jv)("settings/apps/force"),{appId:n}).then((e=>{t.commit("setInstallState",{appId:n,canInstall:!0})})).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})})).finally((()=>{t.commit("stopLoading",r),t.commit("stopLoading","install")}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},disableApp(t,e){let r,{appId:n}=e;return r=Array.isArray(n)?n:[n],h().then((e=>(t.commit("startLoading",r),m((0,c.Jv)("settings/apps/disable"),{appIds:r}).then((e=>(t.commit("stopLoading",r),r.forEach((e=>{t.commit("disableApp",e)})),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:n,error:e})))},uninstallApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),f((0,c.Jv)("settings/apps/uninstall/".concat(r))).then((e=>(t.commit("stopLoading",r),t.commit("uninstallApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},updateApp(t,e){let{appId:r}=e;return h().then((e=>(t.commit("startLoading",r),t.commit("startLoading","install"),f((0,c.Jv)("settings/apps/update/".concat(r))).then((e=>(t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0))).catch((e=>{t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))))).catch((e=>t.commit("API_FAILURE",{appId:r,error:e})))},getAllApps:t=>(t.commit("startLoading","list"),f((0,c.Jv)("settings/apps/list")).then((e=>(t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0))).catch((e=>t.commit("API_FAILURE",e)))),async getCategories(t){let{shouldRefetchCategories:e=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e||!t.state.gettingCategoriesPromise){t.commit("startLoading","categories");try{const e=f((0,c.Jv)("settings/apps/categories"));t.commit("updateCategories",e);const r=await e;return r.data.length>0?(t.commit("appendCategories",r.data),t.commit("stopLoading","categories"),!0):(t.commit("stopLoading","categories"),!1)}catch(e){t.commit("API_FAILURE",e)}}return t.state.gettingCategoriesPromise}},k={state:{apps:[],bundles:(0,R.C)("settings","appstoreBundles",[]),categories:[],updateCount:(0,R.C)("settings","appstoreUpdateCount",0),loading:{},gettingCategoriesPromise:null},mutations:U,getters:{loading:t=>function(e){return t.loading[e]},getCategories:t=>t.categories,getAllApps:t=>t.apps,getAppBundles:t=>t.bundles,getUpdateCount:t=>t.updateCount,getCategoryById:t=>e=>t.categories.find((t=>t.id===e))},actions:O},T={setServerData(t,e){t.serverData=e}},S={state:{serverData:(0,R.C)("settings","usersSettings",{})},mutations:T,getters:{getServerData:t=>t.serverData},actions:{}},j={state:{},mutations:{},getters:{},actions:{setAppConfig(t,e){let{app:r,key:n,value:o}=e;return h().then((t=>m((0,c.KT)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((t=>{throw t})))).catch((e=>t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})))}}};var F=n(96763);o.Ay.use(i.Ay);const $={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed.")+"<br>"+e,{isHTML:!0})}catch(e){(0,C.Qg)(t("settings","An error occurred during the request. Unable to proceed."))}F.error(e,r)}};let D=null;const B=()=>(null===D&&(D=new i.il({modules:{users:L,apps:k,settings:S,oc:j},strict:!1,mutations:$})),D)},36620:(t,e,r)=>{"use strict";r.d(e,{A:()=>n});const n=(0,r(53529).YK)().setApp("settings").detectUser().build()},74329:(t,e,r)=>{"use strict";var n=r(85471),o=r(80284),i=r(58723),s=r(53334),a=r(22378);const u=(0,n.pM)({__name:"SettingsApp",setup:t=>({__sfc:!0,NcContent:a.A})}),c=(0,r(14486).A)(u,(function(){var t=this,e=t._self._c;return e(t._self._setupProxy.NcContent,{attrs:{"app-name":"settings"}},[e("router-view",{attrs:{name:"navigation"}}),t._v(" "),e("router-view"),t._v(" "),e("router-view",{attrs:{name:"sidebar"}})],1)}),[],!1,null,null,null).exports;var p=r(40173),d=r(99498);const l=[{name:"users",path:"/:index(index.php/)?settings/users",components:{default:()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,374)),navigation:()=>Promise.all([r.e(4208),r.e(1439),r.e(3239)]).then(r.bind(r,19414))},props:!0,children:[{path:":selectedGroup",name:"group"}]},{path:"/:index(index.php/)?settings/apps",name:"apps",redirect:{name:"apps-category",params:{category:"discover"}},components:{default:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,8073)),navigation:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,12336)),sidebar:()=>Promise.all([r.e(4208),r.e(1439),r.e(4529)]).then(r.bind(r,83625))},children:[{path:":category",name:"apps-category",children:[{path:":id",name:"apps-details"}]}]}];n.Ay.use(p.Ay);const h=new p.Ay({mode:"history",base:(0,d.Jv)(""),linkActiveClass:"active",routes:l});var f,m=r(31755),g=r(92457),y=r(65899);n.Ay.use(o.Ay,{defaultHtml:!1});const v=(0,m.P)();(0,i.O)(v,h),r.nc=btoa(null!==(f=(0,g.do)())&&void 0!==f?f:""),n.Ay.prototype.t=s.Tl,n.Ay.prototype.n=s.zw,n.Ay.use(y.R2);const b=(0,y.Ey)();new n.Ay({router:h,store:v,pinia:b,render:t=>t(c),el:"#content"})},40173:(t,e,r)=>{"use strict";r.d(e,{Ay:()=>Gt,Wk:()=>K});var n=r(96763);function o(t,e){for(var r in e)t[r]=e[r];return t}var i=/[!'()*]/g,s=function(t){return"%"+t.charCodeAt(0).toString(16)},a=/%2C/g,u=function(t){return encodeURIComponent(t).replace(i,s).replace(a,",")};function c(t){try{return decodeURIComponent(t)}catch(t){}return t}var p=function(t){return null==t||"object"==typeof t?t:String(t)};function d(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var r=t.replace(/\+/g," ").split("="),n=c(r.shift()),o=r.length>0?c(r.join("=")):null;void 0===e[n]?e[n]=o:Array.isArray(e[n])?e[n].push(o):e[n]=[e[n],o]})),e):e}function l(t){var e=t?Object.keys(t).map((function(e){var r=t[e];if(void 0===r)return"";if(null===r)return u(e);if(Array.isArray(r)){var n=[];return r.forEach((function(t){void 0!==t&&(null===t?n.push(u(e)):n.push(u(e)+"="+u(t)))})),n.join("&")}return u(e)+"="+u(r)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var h=/\/?$/;function f(t,e,r,n){var o=n&&n.options.stringifyQuery,i=e.query||{};try{i=m(i)}catch(t){}var s={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:v(e,o),matched:t?y(t):[]};return r&&(s.redirectedFrom=v(r,o)),Object.freeze(s)}function m(t){if(Array.isArray(t))return t.map(m);if(t&&"object"==typeof t){var e={};for(var r in t)e[r]=m(t[r]);return e}return t}var g=f(null,{path:"/"});function y(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function v(t,e){var r=t.path,n=t.query;void 0===n&&(n={});var o=t.hash;return void 0===o&&(o=""),(r||"/")+(e||l)(n)+o}function b(t,e,r){return e===g?t===e:!!e&&(t.path&&e.path?t.path.replace(h,"")===e.path.replace(h,"")&&(r||t.hash===e.hash&&w(t.query,e.query)):!(!t.name||!e.name)&&t.name===e.name&&(r||t.hash===e.hash&&w(t.query,e.query)&&w(t.params,e.params)))}function w(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var r=Object.keys(t).sort(),n=Object.keys(e).sort();return r.length===n.length&&r.every((function(r,o){var i=t[r];if(n[o]!==r)return!1;var s=e[r];return null==i||null==s?i===s:"object"==typeof i&&"object"==typeof s?w(i,s):String(i)===String(s)}))}function A(t){for(var e=0;e<t.matched.length;e++){var r=t.matched[e];for(var n in r.instances){var o=r.instances[n],i=r.enteredCbs[n];if(o&&i){delete r.enteredCbs[n];for(var s=0;s<i.length;s++)o._isBeingDestroyed||i[s](o)}}}}var E={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var r=e.props,n=e.children,i=e.parent,s=e.data;s.routerView=!0;for(var a=i.$createElement,u=r.name,c=i.$route,p=i._routerViewCache||(i._routerViewCache={}),d=0,l=!1;i&&i._routerRoot!==i;){var h=i.$vnode?i.$vnode.data:{};h.routerView&&d++,h.keepAlive&&i._directInactive&&i._inactive&&(l=!0),i=i.$parent}if(s.routerViewDepth=d,l){var f=p[u],m=f&&f.component;return m?(f.configProps&&x(m,s,f.route,f.configProps),a(m,s,n)):a()}var g=c.matched[d],y=g&&g.components[u];if(!g||!y)return p[u]=null,a();p[u]={component:y},s.registerRouteInstance=function(t,e){var r=g.instances[u];(e&&r!==t||!e&&r===t)&&(g.instances[u]=e)},(s.hook||(s.hook={})).prepatch=function(t,e){g.instances[u]=e.componentInstance},s.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==g.instances[u]&&(g.instances[u]=t.componentInstance),A(c)};var v=g.props&&g.props[u];return v&&(o(p[u],{route:c,configProps:v}),x(y,s,c,v)),a(y,s,n)}};function x(t,e,r,n){var i=e.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0}}(r,n);if(i){i=e.props=o({},i);var s=e.attrs=e.attrs||{};for(var a in i)t.props&&a in t.props||(s[a]=i[a],delete i[a])}}function _(t,e,r){var n=t.charAt(0);if("/"===n)return t;if("?"===n||"#"===n)return e+t;var o=e.split("/");r&&o[o.length-1]||o.pop();for(var i=t.replace(/^\//,"").split("/"),s=0;s<i.length;s++){var a=i[s];".."===a?o.pop():"."!==a&&o.push(a)}return""!==o[0]&&o.unshift(""),o.join("/")}function P(t){return t.replace(/\/(?:\s*\/)+/g,"/")}var I=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)},L=function t(e,r,n){return I(r)||(n=r||n,r=[]),n=n||{},e instanceof RegExp?function(t,e){var r=t.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)e.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return F(t,e)}(e,r):I(e)?function(e,r,n){for(var o=[],i=0;i<e.length;i++)o.push(t(e[i],r,n).source);return F(new RegExp("(?:"+o.join("|")+")",$(n)),r)}(e,r,n):function(t,e,r){return D(O(t,r),e,r)}(e,r,n)},C=O,R=T,N=D,U=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function O(t,e){for(var r,n=[],o=0,i=0,s="",a=e&&e.delimiter||"/";null!=(r=U.exec(t));){var u=r[0],c=r[1],p=r.index;if(s+=t.slice(i,p),i=p+u.length,c)s+=c[1];else{var d=t[i],l=r[2],h=r[3],f=r[4],m=r[5],g=r[6],y=r[7];s&&(n.push(s),s="");var v=null!=l&&null!=d&&d!==l,b="+"===g||"*"===g,w="?"===g||"*"===g,A=r[2]||a,E=f||m;n.push({name:h||o++,prefix:l||"",delimiter:A,optional:w,repeat:b,partial:v,asterisk:!!y,pattern:E?j(E):y?".*":"[^"+S(A)+"]+?"})}}return i<t.length&&(s+=t.substr(i)),s&&n.push(s),n}function k(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()}))}function T(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)"object"==typeof t[n]&&(r[n]=new RegExp("^(?:"+t[n].pattern+")$",$(e)));return function(e,n){for(var o="",i=e||{},s=(n||{}).pretty?k:encodeURIComponent,a=0;a<t.length;a++){var u=t[a];if("string"!=typeof u){var c,p=i[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(I(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var d=0;d<p.length;d++){if(c=s(p[d]),!r[a].test(c))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(c)+"`");o+=(0===d?u.prefix:u.delimiter)+c}}else{if(c=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(t){return"%"+t.charCodeAt(0).toString(16).toUpperCase()})):s(p),!r[a].test(c))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+c+'"');o+=u.prefix+c}}else o+=u}return o}}function S(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function j(t){return t.replace(/([=!:$\/()])/g,"\\$1")}function F(t,e){return t.keys=e,t}function $(t){return t&&t.sensitive?"":"i"}function D(t,e,r){I(e)||(r=e||r,e=[]);for(var n=(r=r||{}).strict,o=!1!==r.end,i="",s=0;s<t.length;s++){var a=t[s];if("string"==typeof a)i+=S(a);else{var u=S(a.prefix),c="(?:"+a.pattern+")";e.push(a),a.repeat&&(c+="(?:"+u+c+")*"),i+=c=a.optional?a.partial?u+"("+c+")?":"(?:"+u+"("+c+"))?":u+"("+c+")"}}var p=S(r.delimiter||"/"),d=i.slice(-p.length)===p;return n||(i=(d?i.slice(0,-p.length):i)+"(?:"+p+"(?=$))?"),i+=o?"$":n&&d?"":"(?="+p+"|$)",F(new RegExp("^"+i,$(r)),e)}L.parse=C,L.compile=function(t,e){return T(O(t,e),e)},L.tokensToFunction=R,L.tokensToRegExp=N;var B=Object.create(null);function q(t,e,r){e=e||{};try{var n=B[t]||(B[t]=L.compile(t));return"string"==typeof e.pathMatch&&(e[0]=e.pathMatch),n(e,{pretty:!0})}catch(t){return""}finally{delete e[0]}}function M(t,e,r,n){var i="string"==typeof t?{path:t}:t;if(i._normalized)return i;if(i.name){var s=(i=o({},t)).params;return s&&"object"==typeof s&&(i.params=o({},s)),i}if(!i.path&&i.params&&e){(i=o({},i))._normalized=!0;var a=o(o({},e.params),i.params);if(e.name)i.name=e.name,i.params=a;else if(e.matched.length){var u=e.matched[e.matched.length-1].path;i.path=q(u,a,e.path)}return i}var c=function(t){var e="",r="",n=t.indexOf("#");n>=0&&(e=t.slice(n),t=t.slice(0,n));var o=t.indexOf("?");return o>=0&&(r=t.slice(o+1),t=t.slice(0,o)),{path:t,query:r,hash:e}}(i.path||""),l=e&&e.path||"/",h=c.path?_(c.path,l,r||i.append):l,f=function(t,e,r){void 0===e&&(e={});var n,o=r||d;try{n=o(t||"")}catch(t){n={}}for(var i in e){var s=e[i];n[i]=Array.isArray(s)?s.map(p):p(s)}return n}(c.query,i.query,n&&n.options.parseQuery),m=i.hash||c.hash;return m&&"#"!==m.charAt(0)&&(m="#"+m),{_normalized:!0,path:h,query:f,hash:m}}var V,G=function(){},K={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,r=this.$router,n=this.$route,i=r.resolve(this.to,n,this.append),s=i.location,a=i.route,u=i.href,c={},p=r.options.linkActiveClass,d=r.options.linkExactActiveClass,l=null==p?"router-link-active":p,m=null==d?"router-link-exact-active":d,g=null==this.activeClass?l:this.activeClass,y=null==this.exactActiveClass?m:this.exactActiveClass,v=a.redirectedFrom?f(null,M(a.redirectedFrom),null,r):a;c[y]=b(n,v,this.exactPath),c[g]=this.exact||this.exactPath?c[y]:function(t,e){return 0===t.path.replace(h,"/").indexOf(e.path.replace(h,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var r in e)if(!(r in t))return!1;return!0}(t.query,e.query)}(n,v);var w=c[y]?this.ariaCurrentValue:null,A=function(t){H(t)&&(e.replace?r.replace(s,G):r.push(s,G))},E={click:H};Array.isArray(this.event)?this.event.forEach((function(t){E[t]=A})):E[this.event]=A;var x={class:c},_=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:u,route:a,navigate:A,isActive:c[g],isExactActive:c[y]});if(_){if(1===_.length)return _[0];if(_.length>1||!_.length)return 0===_.length?t():t("span",{},_)}if("a"===this.tag)x.on=E,x.attrs={href:u,"aria-current":w};else{var P=z(this.$slots.default);if(P){P.isStatic=!1;var I=P.data=o({},P.data);for(var L in I.on=I.on||{},I.on){var C=I.on[L];L in E&&(I.on[L]=Array.isArray(C)?C:[C])}for(var R in E)R in I.on?I.on[R].push(E[R]):I.on[R]=A;var N=P.data.attrs=o({},P.data.attrs);N.href=u,N["aria-current"]=w}else x.on=E}return t(this.tag,x,this.$slots.default)}};function H(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){var e=t.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(e))return}return t.preventDefault&&t.preventDefault(),!0}}function z(t){if(t)for(var e,r=0;r<t.length;r++){if("a"===(e=t[r]).tag)return e;if(e.children&&(e=z(e.children)))return e}}var J="undefined"!=typeof window;function W(t,e,r,n,o){var i=e||[],s=r||Object.create(null),a=n||Object.create(null);t.forEach((function(t){Q(i,s,a,t,o)}));for(var u=0,c=i.length;u<c;u++)"*"===i[u]&&(i.push(i.splice(u,1)[0]),c--,u--);return{pathList:i,pathMap:s,nameMap:a}}function Q(t,e,r,n,o,i){var s=n.path,a=n.name,u=n.pathToRegexpOptions||{},c=function(t,e,r){return r||(t=t.replace(/\/$/,"")),"/"===t[0]||null==e?t:P(e.path+"/"+t)}(s,o,u.strict);"boolean"==typeof n.caseSensitive&&(u.sensitive=n.caseSensitive);var p={path:c,regex:Y(c,u),components:n.components||{default:n.component},alias:n.alias?"string"==typeof n.alias?[n.alias]:n.alias:[],instances:{},enteredCbs:{},name:a,parent:o,matchAs:i,redirect:n.redirect,beforeEnter:n.beforeEnter,meta:n.meta||{},props:null==n.props?{}:n.components?n.props:{default:n.props}};if(n.children&&n.children.forEach((function(n){var o=i?P(i+"/"+n.path):void 0;Q(t,e,r,n,p,o)})),e[p.path]||(t.push(p.path),e[p.path]=p),void 0!==n.alias)for(var d=Array.isArray(n.alias)?n.alias:[n.alias],l=0;l<d.length;++l){var h={path:d[l],children:n.children};Q(t,e,r,h,o,p.path||"/")}a&&(r[a]||(r[a]=p))}function Y(t,e){return L(t,[],e)}function X(t,e){var r=W(t),n=r.pathList,o=r.pathMap,i=r.nameMap;function s(t,r,s){var u=M(t,r,!1,e),c=u.name;if(c){var p=i[c];if(!p)return a(null,u);var d=p.regex.keys.filter((function(t){return!t.optional})).map((function(t){return t.name}));if("object"!=typeof u.params&&(u.params={}),r&&"object"==typeof r.params)for(var l in r.params)!(l in u.params)&&d.indexOf(l)>-1&&(u.params[l]=r.params[l]);return u.path=q(p.path,u.params),a(p,u,s)}if(u.path){u.params={};for(var h=0;h<n.length;h++){var f=n[h],m=o[f];if(Z(m.regex,u.path,u.params))return a(m,u,s)}}return a(null,u)}function a(t,r,n){return t&&t.redirect?function(t,r){var n=t.redirect,o="function"==typeof n?n(f(t,r,null,e)):n;if("string"==typeof o&&(o={path:o}),!o||"object"!=typeof o)return a(null,r);var u=o,c=u.name,p=u.path,d=r.query,l=r.hash,h=r.params;if(d=u.hasOwnProperty("query")?u.query:d,l=u.hasOwnProperty("hash")?u.hash:l,h=u.hasOwnProperty("params")?u.params:h,c)return i[c],s({_normalized:!0,name:c,query:d,hash:l,params:h},void 0,r);if(p){var m=function(t,e){return _(t,e.parent?e.parent.path:"/",!0)}(p,t);return s({_normalized:!0,path:q(m,h),query:d,hash:l},void 0,r)}return a(null,r)}(t,n||r):t&&t.matchAs?function(t,e,r){var n=s({_normalized:!0,path:q(r,e.params)});if(n){var o=n.matched,i=o[o.length-1];return e.params=n.params,a(i,e)}return a(null,e)}(0,r,t.matchAs):f(t,r,n,e)}return{match:s,addRoute:function(t,e){var r="object"!=typeof t?i[t]:void 0;W([e||t],n,o,i,r),r&&r.alias.length&&W(r.alias.map((function(t){return{path:t,children:[e]}})),n,o,i,r)},getRoutes:function(){return n.map((function(t){return o[t]}))},addRoutes:function(t){W(t,n,o,i)}}}function Z(t,e,r){var n=e.match(t);if(!n)return!1;if(!r)return!0;for(var o=1,i=n.length;o<i;++o){var s=t.keys[o-1];s&&(r[s.name||"pathMatch"]="string"==typeof n[o]?c(n[o]):n[o])}return!0}var tt=J&&window.performance&&window.performance.now?window.performance:Date;function et(){return tt.now().toFixed(3)}var rt=et();function nt(){return rt}function ot(t){return rt=t}var it=Object.create(null);function st(){"scrollRestoration"in window.history&&(window.history.scrollRestoration="manual");var t=window.location.protocol+"//"+window.location.host,e=window.location.href.replace(t,""),r=o({},window.history.state);return r.key=nt(),window.history.replaceState(r,"",e),window.addEventListener("popstate",ct),function(){window.removeEventListener("popstate",ct)}}function at(t,e,r,n){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick((function(){var i=function(){var t=nt();if(t)return it[t]}(),s=o.call(t,e,r,n?i:null);s&&("function"==typeof s.then?s.then((function(t){ft(t,i)})).catch((function(t){})):ft(s,i))}))}}function ut(){var t=nt();t&&(it[t]={x:window.pageXOffset,y:window.pageYOffset})}function ct(t){ut(),t.state&&t.state.key&&ot(t.state.key)}function pt(t){return lt(t.x)||lt(t.y)}function dt(t){return{x:lt(t.x)?t.x:window.pageXOffset,y:lt(t.y)?t.y:window.pageYOffset}}function lt(t){return"number"==typeof t}var ht=/^#\d/;function ft(t,e){var r,n="object"==typeof t;if(n&&"string"==typeof t.selector){var o=ht.test(t.selector)?document.getElementById(t.selector.slice(1)):document.querySelector(t.selector);if(o){var i=t.offset&&"object"==typeof t.offset?t.offset:{};e=function(t,e){var r=document.documentElement.getBoundingClientRect(),n=t.getBoundingClientRect();return{x:n.left-r.left-e.x,y:n.top-r.top-e.y}}(o,i={x:lt((r=i).x)?r.x:0,y:lt(r.y)?r.y:0})}else pt(t)&&(e=dt(t))}else n&&pt(t)&&(e=dt(t));e&&("scrollBehavior"in document.documentElement.style?window.scrollTo({left:e.x,top:e.y,behavior:t.behavior}):window.scrollTo(e.x,e.y))}var mt,gt=J&&(-1===(mt=window.navigator.userAgent).indexOf("Android 2.")&&-1===mt.indexOf("Android 4.0")||-1===mt.indexOf("Mobile Safari")||-1!==mt.indexOf("Chrome")||-1!==mt.indexOf("Windows Phone"))&&window.history&&"function"==typeof window.history.pushState;function yt(t,e){ut();var r=window.history;try{if(e){var n=o({},r.state);n.key=nt(),r.replaceState(n,"",t)}else r.pushState({key:ot(et())},"",t)}catch(r){window.location[e?"replace":"assign"](t)}}function vt(t){yt(t,!0)}var bt={redirected:2,aborted:4,cancelled:8,duplicated:16};function wt(t,e){return At(t,e,bt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function At(t,e,r,n){var o=new Error(n);return o._isRouter=!0,o.from=t,o.to=e,o.type=r,o}var Et=["params","query","hash"];function xt(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function _t(t,e){return xt(t)&&t._isRouter&&(null==e||t.type===e)}function Pt(t,e,r){var n=function(o){o>=t.length?r():t[o]?e(t[o],(function(){n(o+1)})):n(o+1)};n(0)}function It(t,e){return Lt(t.map((function(t){return Object.keys(t.components).map((function(r){return e(t.components[r],t.instances[r],t,r)}))})))}function Lt(t){return Array.prototype.concat.apply([],t)}var Ct="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function Rt(t){var e=!1;return function(){for(var r=[],n=arguments.length;n--;)r[n]=arguments[n];if(!e)return e=!0,t.apply(this,r)}}var Nt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";return"/"!==t.charAt(0)&&(t="/"+t),t.replace(/\/$/,"")}(e),this.current=g,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Ut(t,e,r,n){var o=It(t,(function(t,n,o,i){var s=function(t,e){return"function"!=typeof t&&(t=V.extend(t)),t.options[e]}(t,e);if(s)return Array.isArray(s)?s.map((function(t){return r(t,n,o,i)})):r(s,n,o,i)}));return Lt(n?o.reverse():o)}function Ot(t,e){if(e)return function(){return t.apply(e,arguments)}}Nt.prototype.listen=function(t){this.cb=t},Nt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Nt.prototype.onError=function(t){this.errorCbs.push(t)},Nt.prototype.transitionTo=function(t,e,r){var n,o=this;try{n=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(n,(function(){o.updateRoute(n),e&&e(n),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(n,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(n)})))}),(function(t){r&&r(t),t&&!o.ready&&(_t(t,bt.redirected)&&i===g||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Nt.prototype.confirmTransition=function(t,e,r){var o=this,i=this.current;this.pending=t;var s,a,u=function(t){!_t(t)&&xt(t)&&(o.errorCbs.length?o.errorCbs.forEach((function(e){e(t)})):n.error(t)),r&&r(t)},c=t.matched.length-1,p=i.matched.length-1;if(b(t,i)&&c===p&&t.matched[c]===i.matched[p])return this.ensureURL(),t.hash&&at(this.router,i,t,!1),u(((a=At(s=i,t,bt.duplicated,'Avoided redundant navigation to current location: "'+s.fullPath+'".')).name="NavigationDuplicated",a));var d,l=function(t,e){var r,n=Math.max(t.length,e.length);for(r=0;r<n&&t[r]===e[r];r++);return{updated:e.slice(0,r),activated:e.slice(r),deactivated:t.slice(r)}}(this.current.matched,t.matched),h=l.updated,f=l.deactivated,m=l.activated,g=[].concat(function(t){return Ut(t,"beforeRouteLeave",Ot,!0)}(f),this.router.beforeHooks,function(t){return Ut(t,"beforeRouteUpdate",Ot)}(h),m.map((function(t){return t.beforeEnter})),(d=m,function(t,e,r){var n=!1,o=0,i=null;It(d,(function(t,e,s,a){if("function"==typeof t&&void 0===t.cid){n=!0,o++;var u,c=Rt((function(e){var n;((n=e).__esModule||Ct&&"Module"===n[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:V.extend(e),s.components[a]=e,--o<=0&&r()})),p=Rt((function(t){var e="Failed to resolve async component "+a+": "+t;i||(i=xt(t)?t:new Error(e),r(i))}));try{u=t(c,p)}catch(t){p(t)}if(u)if("function"==typeof u.then)u.then(c,p);else{var d=u.component;d&&"function"==typeof d.then&&d.then(c,p)}}})),n||r()})),y=function(e,r){if(o.pending!==t)return u(wt(i,t));try{e(t,i,(function(e){!1===e?(o.ensureURL(!0),u(function(t,e){return At(t,e,bt.aborted,'Navigation aborted from "'+t.fullPath+'" to "'+e.fullPath+'" via a navigation guard.')}(i,t))):xt(e)?(o.ensureURL(!0),u(e)):"string"==typeof e||"object"==typeof e&&("string"==typeof e.path||"string"==typeof e.name)?(u(function(t,e){return At(t,e,bt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return Et.forEach((function(r){r in t&&(e[r]=t[r])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}(i,t)),"object"==typeof e&&e.replace?o.replace(e):o.push(e)):r(e)}))}catch(t){u(t)}};Pt(g,y,(function(){var r=function(t){return Ut(t,"beforeRouteEnter",(function(t,e,r,n){return function(t,e,r){return function(n,o,i){return t(n,o,(function(t){"function"==typeof t&&(e.enteredCbs[r]||(e.enteredCbs[r]=[]),e.enteredCbs[r].push(t)),i(t)}))}}(t,r,n)}))}(m);Pt(r.concat(o.router.resolveHooks),y,(function(){if(o.pending!==t)return u(wt(i,t));o.pending=null,e(t),o.router.app&&o.router.app.$nextTick((function(){A(t)}))}))}))},Nt.prototype.updateRoute=function(t){this.current=t,this.cb&&this.cb(t)},Nt.prototype.setupListeners=function(){},Nt.prototype.teardown=function(){this.listeners.forEach((function(t){t()})),this.listeners=[],this.current=g,this.pending=null};var kt=function(t){function e(e,r){t.call(this,e,r),this._startLocation=Tt(this.base)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router,r=e.options.scrollBehavior,n=gt&&r;n&&this.listeners.push(st());var o=function(){var r=t.current,o=Tt(t.base);t.current===g&&o===t._startLocation||t.transitionTo(o,(function(t){n&&at(e,t,r,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){yt(P(n.base+t.fullPath)),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){vt(P(n.base+t.fullPath)),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.ensureURL=function(t){if(Tt(this.base)!==this.current.fullPath){var e=P(this.base+this.current.fullPath);t?yt(e):vt(e)}},e.prototype.getCurrentLocation=function(){return Tt(this.base)},e}(Nt);function Tt(t){var e=window.location.pathname,r=e.toLowerCase(),n=t.toLowerCase();return!t||r!==n&&0!==r.indexOf(P(n+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var St=function(t){function e(e,r,n){t.call(this,e,r),n&&function(t){var e=Tt(t);if(!/^\/#/.test(e))return window.location.replace(P(t+"/#"+e)),!0}(this.base)||jt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,r=gt&&e;r&&this.listeners.push(st());var n=function(){var e=t.current;jt()&&t.transitionTo(Ft(),(function(n){r&&at(t.router,n,e,!0),gt||Bt(n.fullPath)}))},o=gt?"popstate":"hashchange";window.addEventListener(o,n),this.listeners.push((function(){window.removeEventListener(o,n)}))}},e.prototype.push=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Dt(t.fullPath),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this,o=this.current;this.transitionTo(t,(function(t){Bt(t.fullPath),at(n.router,t,o,!1),e&&e(t)}),r)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ft()!==e&&(t?Dt(e):Bt(e))},e.prototype.getCurrentLocation=function(){return Ft()},e}(Nt);function jt(){var t=Ft();return"/"===t.charAt(0)||(Bt("/"+t),!1)}function Ft(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function $t(t){var e=window.location.href,r=e.indexOf("#");return(r>=0?e.slice(0,r):e)+"#"+t}function Dt(t){gt?yt($t(t)):window.location.hash=t}function Bt(t){gt?vt($t(t)):window.location.replace($t(t))}var qt=function(t){function e(e,r){t.call(this,e,r),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index+1).concat(t),n.index++,e&&e(t)}),r)},e.prototype.replace=function(t,e,r){var n=this;this.transitionTo(t,(function(t){n.stack=n.stack.slice(0,n.index).concat(t),e&&e(t)}),r)},e.prototype.go=function(t){var e=this,r=this.index+t;if(!(r<0||r>=this.stack.length)){var n=this.stack[r];this.confirmTransition(n,(function(){var t=e.current;e.index=r,e.updateRoute(n),e.router.afterHooks.forEach((function(e){e&&e(n,t)}))}),(function(t){_t(t,bt.duplicated)&&(e.index=r)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Nt),Mt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=X(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!gt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new kt(this,t.base);break;case"hash":this.history=new St(this,t.base,this.fallback);break;case"abstract":this.history=new qt(this,t.base)}},Vt={currentRoute:{configurable:!0}};Mt.prototype.match=function(t,e,r){return this.matcher.match(t,e,r)},Vt.currentRoute.get=function(){return this.history&&this.history.current},Mt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var r=e.apps.indexOf(t);r>-1&&e.apps.splice(r,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var r=this.history;if(r instanceof kt||r instanceof St){var n=function(t){r.setupListeners(),function(t){var n=r.current,o=e.options.scrollBehavior;gt&&o&&"fullPath"in t&&at(e,t,n,!1)}(t)};r.transitionTo(r.getCurrentLocation(),n,n)}r.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Mt.prototype.beforeEach=function(t){return Kt(this.beforeHooks,t)},Mt.prototype.beforeResolve=function(t){return Kt(this.resolveHooks,t)},Mt.prototype.afterEach=function(t){return Kt(this.afterHooks,t)},Mt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Mt.prototype.onError=function(t){this.history.onError(t)},Mt.prototype.push=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.push(t,e,r)}));this.history.push(t,e,r)},Mt.prototype.replace=function(t,e,r){var n=this;if(!e&&!r&&"undefined"!=typeof Promise)return new Promise((function(e,r){n.history.replace(t,e,r)}));this.history.replace(t,e,r)},Mt.prototype.go=function(t){this.history.go(t)},Mt.prototype.back=function(){this.go(-1)},Mt.prototype.forward=function(){this.go(1)},Mt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Mt.prototype.resolve=function(t,e,r){var n=M(t,e=e||this.history.current,r,this),o=this.match(n,e),i=o.redirectedFrom||o.fullPath,s=function(t,e,r){var n="hash"===r?"#"+e:e;return t?P(t+"/"+n):n}(this.history.base,i,this.mode);return{location:n,route:o,href:s,normalizedTo:n,resolved:o}},Mt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Mt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Mt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==g&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Mt.prototype,Vt);var Gt=Mt;function Kt(t,e){return t.push(e),function(){var r=t.indexOf(e);r>-1&&t.splice(r,1)}}Mt.install=function t(e){if(!t.installed||V!==e){t.installed=!0,V=e;var r=function(t){return void 0!==t},n=function(t,e){var n=t.$options._parentVnode;r(n)&&r(n=n.data)&&r(n=n.registerRouteInstance)&&n(t,e)};e.mixin({beforeCreate:function(){r(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,n(this,this)},destroyed:function(){n(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",E),e.component("RouterLink",K);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Mt.version="3.6.5",Mt.isNavigationFailure=_t,Mt.NavigationFailureType=bt,Mt.START_LOCATION=g,J&&window.Vue&&window.Vue.use(Mt)},58723:(t,e)=>{function r(t,e){var n={name:t.name,path:t.path,hash:t.hash,query:t.query,params:t.params,fullPath:t.fullPath,meta:t.meta};return e&&(n.from=r(e)),Object.freeze(n)}e.O=function(t,e,n){var o=(n||{}).moduleName||"route";t.registerModule(o,{namespaced:!0,state:r(e.currentRoute),mutations:{ROUTE_CHANGED:function(e,n){t.state[o]=r(n.to,n.from)}}});var i,s=!1,a=t.watch((function(t){return t[o]}),(function(t){var r=t.fullPath;r!==i&&(null!=i&&(s=!0,e.push(t)),i=r)}),{sync:!0}),u=e.afterEach((function(e,r){s?s=!1:(i=e.fullPath,t.commit(o+"/ROUTE_CHANGED",{to:e,from:r}))}));return function(){null!=u&&u(),null!=a&&a(),t.unregisterModule(o)}}},35810:(t,e,r)=>{"use strict";r.d(e,{Al:()=>k,H4:()=>U,PY:()=>N,Q$:()=>O,R3:()=>A,VL:()=>w,lJ:()=>R,lT:()=>f,pt:()=>E,v7:()=>h});var n,o=r(92457),i=r(53529),s=r(53334),a=r(43627),u=r(71089),c=r(99498),p=r(44719);null===(n=(0,o.HW)())?(0,i.YK)().setApp("files").build():(0,i.YK)().setApp("files").setUid(n.uid).build();const d=["B","KB","MB","GB","TB","PB"],l=["B","KiB","MiB","GiB","TiB","PiB"];function h(t,e=!1,r=!1,n=!1){r=r&&!n,"string"==typeof t&&(t=Number(t));let o=t>0?Math.floor(Math.log(t)/Math.log(n?1e3:1024)):0;o=Math.min((r?l.length:d.length)-1,o);const i=r?l[o]:d[o];let a=(t/Math.pow(n?1e3:1024,o)).toFixed(1);return!0===e&&0===o?("0.0"!==a?"< 1 ":"0 ")+(r?l[1]:d[1]):(a=o<2?parseFloat(a).toFixed(0):parseFloat(a).toLocaleString((0,s.lO)()),a+" "+i)}function f(t,e=!1){try{t=`${t}`.toLocaleLowerCase().replaceAll(/\s+/g,"").replaceAll(",",".")}catch{return null}const r=t.match(/^([0-9]*(\.[0-9]*)?)([kmgtp]?)(i?)b?$/);if(null===r||"."===r[1]||""===r[1])return null;const n=`${r[1]}`,o="i"===r[4]||e?1024:1e3;return Math.round(Number.parseFloat(n)*o**{"":0,k:1,m:2,g:3,t:4,p:5,e:6}[r[3]])}var m=(t=>(t[t.NONE=0]="NONE",t[t.CREATE=4]="CREATE",t[t.READ=1]="READ",t[t.UPDATE=2]="UPDATE",t[t.DELETE=8]="DELETE",t[t.SHARE=16]="SHARE",t[t.ALL=31]="ALL",t))(m||{});const g=["d:getcontentlength","d:getcontenttype","d:getetag","d:getlastmodified","d:quota-available-bytes","d:resourcetype","nc:has-preview","nc:is-encrypted","nc:mount-type","nc:share-attributes","oc:comments-unread","oc:favorite","oc:fileid","oc:owner-display-name","oc:owner-id","oc:permissions","oc:share-types","oc:size","ocs:share-permissions"],y={d:"DAV:",nc:"http://nextcloud.org/ns",oc:"http://owncloud.org/ns",ocs:"http://open-collaboration-services.org/ns"},v=function(){return typeof window._nc_dav_properties>"u"&&(window._nc_dav_properties=[...g]),window._nc_dav_properties.map((t=>`<${t} />`)).join(" ")},b=function(){return typeof window._nc_dav_namespaces>"u"&&(window._nc_dav_namespaces={...y}),Object.keys(window._nc_dav_namespaces).map((t=>`xmlns:${t}="${window._nc_dav_namespaces?.[t]}"`)).join(" ")},w=function(){return`<?xml version="1.0"?>\n\t\t<d:propfind ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`},A=function(t){return`<?xml version="1.0" encoding="UTF-8"?>\n<d:searchrequest ${b()}\n\txmlns:ns="https://github.com/icewind1991/SearchDAV/ns">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${(0,o.HW)()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${t}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`};var E=(t=>(t.Folder="folder",t.File="file",t))(E||{});const x=function(t,e){return null!==t.match(e)},_=(t,e)=>{if(t.id&&"number"!=typeof t.id)throw new Error("Invalid id type of value");if(!t.source)throw new Error("Missing mandatory source");try{new URL(t.source)}catch{throw new Error("Invalid source format, source must be a valid URL")}if(!t.source.startsWith("http"))throw new Error("Invalid source format, only http(s) is supported");if(t.mtime&&!(t.mtime instanceof Date))throw new Error("Invalid mtime type");if(t.crtime&&!(t.crtime instanceof Date))throw new Error("Invalid crtime type");if(!t.mime||"string"!=typeof t.mime||!t.mime.match(/^[-\w.]+\/[-+\w.]+$/gi))throw new Error("Missing or invalid mandatory mime");if("size"in t&&"number"!=typeof t.size&&void 0!==t.size)throw new Error("Invalid size type");if("permissions"in t&&void 0!==t.permissions&&!("number"==typeof t.permissions&&t.permissions>=m.NONE&&t.permissions<=m.ALL))throw new Error("Invalid permissions");if(t.owner&&null!==t.owner&&"string"!=typeof t.owner)throw new Error("Invalid owner type");if(t.attributes&&"object"!=typeof t.attributes)throw new Error("Invalid attributes type");if(t.root&&"string"!=typeof t.root)throw new Error("Invalid root type");if(t.root&&!t.root.startsWith("/"))throw new Error("Root must start with a leading slash");if(t.root&&!t.source.includes(t.root))throw new Error("Root must be part of the source");if(t.root&&x(t.source,e)){const r=t.source.match(e)[0];if(!t.source.includes((0,a.join)(r,t.root)))throw new Error("The root must be relative to the service. e.g /files/emma")}if(t.status&&!Object.values(P).includes(t.status))throw new Error("Status must be a valid NodeStatus")};var P=(t=>(t.NEW="new",t.FAILED="failed",t.LOADING="loading",t.LOCKED="locked",t))(P||{});class I{_data;_attributes;_knownDavService=/(remote|public)\.php\/(web)?dav/i;constructor(t,e){_(t,e||this._knownDavService),this._data=t;const r={set:(t,e,r)=>(this.updateMtime(),Reflect.set(t,e,r)),deleteProperty:(t,e)=>(this.updateMtime(),Reflect.deleteProperty(t,e))};this._attributes=new Proxy(t.attributes||{},r),delete this._data.attributes,e&&(this._knownDavService=e)}get source(){return this._data.source.replace(/\/$/i,"")}get encodedSource(){const{origin:t}=new URL(this.source);return t+(0,u.O0)(this.source.slice(t.length))}get basename(){return(0,a.basename)(this.source)}get extension(){return(0,a.extname)(this.source)}get dirname(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return(0,a.dirname)(t.slice(e+r.length)||"/")}const t=new URL(this.source);return(0,a.dirname)(t.pathname)}get mime(){return this._data.mime}get mtime(){return this._data.mtime}get crtime(){return this._data.crtime}get size(){return this._data.size}get attributes(){return this._attributes}get permissions(){return null!==this.owner||this.isDavRessource?void 0!==this._data.permissions?this._data.permissions:m.NONE:m.READ}get owner(){return this.isDavRessource?this._data.owner:null}get isDavRessource(){return x(this.source,this._knownDavService)}get root(){return this._data.root?this._data.root.replace(/^(.+)\/$/,"$1"):this.isDavRessource&&(0,a.dirname)(this.source).split(this._knownDavService).pop()||null}get path(){if(this.root){let t=this.source;this.isDavRessource&&(t=t.split(this._knownDavService).pop());const e=t.indexOf(this.root),r=this.root.replace(/\/$/,"");return t.slice(e+r.length)||"/"}return(this.dirname+"/"+this.basename).replace(/\/\//g,"/")}get fileid(){return this._data?.id||this.attributes?.fileid}get status(){return this._data?.status}set status(t){this._data.status=t}move(t){_({...this._data,source:t},this._knownDavService),this._data.source=t,this.updateMtime()}rename(t){if(t.includes("/"))throw new Error("Invalid basename");this.move((0,a.dirname)(this.source)+"/"+t)}updateMtime(){this._data.mtime&&(this._data.mtime=new Date)}}class L extends I{get type(){return E.File}}class C extends I{constructor(t){super({...t,mime:"httpd/unix-directory"})}get type(){return E.Folder}get extension(){return null}get mime(){return"httpd/unix-directory"}}const R=`/files/${(0,o.HW)()?.uid}`,N=(0,c.dC)("dav"),U=function(t=N,e={}){const r=(0,p.UU)(t,{headers:e});function n(t){r.setHeaders({...e,"X-Requested-With":"XMLHttpRequest",requesttoken:t??""})}return(0,o.zo)(n),n((0,o.do)()),(0,p.Gu)().patch("fetch",((t,e)=>{const r=e.headers;return r?.method&&(e.method=r.method,delete r.method),fetch(t,e)})),r},O=async(t,e="/",r=R)=>(await t.getDirectoryContents(`${r}${e}`,{details:!0,data:`<?xml version="1.0"?>\n\t\t<oc:filter-files ${b()}>\n\t\t\t<d:prop>\n\t\t\t\t${v()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`,headers:{method:"REPORT"},includeSelf:!0})).data.filter((t=>t.filename!==e)).map((t=>k(t,r))),k=function(t,e=R,r=N){const n=t.props,i=function(t=""){let e=m.NONE;return t&&((t.includes("C")||t.includes("K"))&&(e|=m.CREATE),t.includes("G")&&(e|=m.READ),(t.includes("W")||t.includes("N")||t.includes("V"))&&(e|=m.UPDATE),t.includes("D")&&(e|=m.DELETE),t.includes("R")&&(e|=m.SHARE)),e}(n?.permissions),s=n?.["owner-id"]||(0,o.HW)()?.uid,a={id:n?.fileid||0,source:`${r}${t.filename}`,mtime:new Date(Date.parse(t.lastmod)),mime:t.mime,size:n?.size||Number.parseInt(n.getcontentlength||"0"),permissions:i,owner:s,root:e,attributes:{...t,...n,hasPreview:n?.["has-preview"]}};return delete a.attributes?.props,"file"===t.type?new L(a):new C(a)};var T={};!function(t){const e=":A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",r="["+e+"]["+e+"\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*",n=new RegExp("^"+r+"$");t.isExist=function(t){return typeof t<"u"},t.isEmptyObject=function(t){return 0===Object.keys(t).length},t.merge=function(t,e,r){if(e){const n=Object.keys(e),o=n.length;for(let i=0;i<o;i++)t[n[i]]="strict"===r?[e[n[i]]]:e[n[i]]}},t.getValue=function(e){return t.isExist(e)?e:""},t.isName=function(t){const e=n.exec(t);return!(null===e||typeof e>"u")},t.getAllMatches=function(t,e){const r=[];let n=e.exec(t);for(;n;){const o=[];o.startIndex=e.lastIndex-n[0].length;const i=n.length;for(let t=0;t<i;t++)o.push(n[t]);r.push(o),n=e.exec(t)}return r},t.nameRegexp=r}(T);new RegExp("(\\s*)([^\\s=]+)(\\s*=)?(\\s*(['\"])(([\\s\\S])*?)\\5)?","g");var S={};const j={preserveOrder:!1,attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,removeNSPrefix:!1,allowBooleanAttributes:!1,parseTagValue:!0,parseAttributeValue:!1,trimValues:!0,cdataPropName:!1,numberParseOptions:{hex:!0,leadingZeros:!0,eNotation:!0},tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},stopNodes:[],alwaysCreateTextNode:!1,isArray:()=>!1,commentPropName:!1,unpairedTags:[],processEntities:!0,htmlEntities:!1,ignoreDeclaration:!1,ignorePiTags:!1,transformTagName:!1,transformAttributeName:!1,updateTag:function(t,e,r){return t}};S.buildOptions=function(t){return Object.assign({},j,t)},S.defaultOptions=j,!Number.parseInt&&window.parseInt&&(Number.parseInt=window.parseInt),!Number.parseFloat&&window.parseFloat&&(Number.parseFloat=window.parseFloat);"<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g,T.nameRegexp),new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])([\\s\\S]*?)\\3)?","gm");var F={};function $(t,e,r){let n;const o={};for(let i=0;i<t.length;i++){const s=t[i],a=D(s);let u="";if(u=void 0===r?a:r+"."+a,a===e.textNodeName)void 0===n?n=s[a]:n+=""+s[a];else{if(void 0===a)continue;if(s[a]){let t=$(s[a],e,u);const r=q(t,e);s[":@"]?B(t,s[":@"],u,e):1!==Object.keys(t).length||void 0===t[e.textNodeName]||e.alwaysCreateTextNode?0===Object.keys(t).length&&(e.alwaysCreateTextNode?t[e.textNodeName]="":t=""):t=t[e.textNodeName],void 0!==o[a]&&o.hasOwnProperty(a)?(Array.isArray(o[a])||(o[a]=[o[a]]),o[a].push(t)):e.isArray(a,u,r)?o[a]=[t]:o[a]=t}}}return"string"==typeof n?n.length>0&&(o[e.textNodeName]=n):void 0!==n&&(o[e.textNodeName]=n),o}function D(t){const e=Object.keys(t);for(let t=0;t<e.length;t++){const r=e[t];if(":@"!==r)return r}}function B(t,e,r,n){if(e){const o=Object.keys(e),i=o.length;for(let s=0;s<i;s++){const i=o[s];n.isArray(i,r+"."+i,!0,!0)?t[i]=[e[i]]:t[i]=e[i]}}}function q(t,e){const{textNodeName:r}=e,n=Object.keys(t).length;return!(0!==n&&(1!==n||!t[r]&&"boolean"!=typeof t[r]&&0!==t[r]))}F.prettify=function(t,e){return $(t,e)};const{buildOptions:M}=S,{prettify:V}=F;function G(t,e,r,n){let o="",i=!1;for(let s=0;s<t.length;s++){const a=t[s],u=K(a);if(void 0===u)continue;let c="";if(c=0===r.length?u:`${r}.${u}`,u===e.textNodeName){let t=a[u];z(c,e)||(t=e.tagValueProcessor(u,t),t=J(t,e)),i&&(o+=n),o+=t,i=!1;continue}if(u===e.cdataPropName){i&&(o+=n),o+=`<![CDATA[${a[u][0][e.textNodeName]}]]>`,i=!1;continue}if(u===e.commentPropName){o+=n+`\x3c!--${a[u][0][e.textNodeName]}--\x3e`,i=!0;continue}if("?"===u[0]){const t=H(a[":@"],e),r="?xml"===u?"":n;let s=a[u][0][e.textNodeName];s=0!==s.length?" "+s:"",o+=r+`<${u}${s}${t}?>`,i=!0;continue}let p=n;""!==p&&(p+=e.indentBy);const d=n+`<${u}${H(a[":@"],e)}`,l=G(a[u],e,c,p);-1!==e.unpairedTags.indexOf(u)?e.suppressUnpairedNode?o+=d+">":o+=d+"/>":l&&0!==l.length||!e.suppressEmptyNode?l&&l.endsWith(">")?o+=d+`>${l}${n}</${u}>`:(o+=d+">",l&&""!==n&&(l.includes("/>")||l.includes("</"))?o+=n+e.indentBy+l+n:o+=l,o+=`</${u}>`):o+=d+"/>",i=!0}return o}function K(t){const e=Object.keys(t);for(let r=0;r<e.length;r++){const n=e[r];if(t.hasOwnProperty(n)&&":@"!==n)return n}}function H(t,e){let r="";if(t&&!e.ignoreAttributes)for(let n in t){if(!t.hasOwnProperty(n))continue;let o=e.attributeValueProcessor(n,t[n]);o=J(o,e),!0===o&&e.suppressBooleanAttributes?r+=` ${n.substr(e.attributeNamePrefix.length)}`:r+=` ${n.substr(e.attributeNamePrefix.length)}="${o}"`}return r}function z(t,e){let r=(t=t.substr(0,t.length-e.textNodeName.length-1)).substr(t.lastIndexOf(".")+1);for(let n in e.stopNodes)if(e.stopNodes[n]===t||e.stopNodes[n]==="*."+r)return!0;return!1}function J(t,e){if(t&&t.length>0&&e.processEntities)for(let r=0;r<e.entities.length;r++){const n=e.entities[r];t=t.replace(n.regex,n.val)}return t}const W=function(t,e){let r="";return e.format&&e.indentBy.length>0&&(r="\n"),G(t,e,"",r)},Q={attributeNamePrefix:"@_",attributesGroupName:!1,textNodeName:"#text",ignoreAttributes:!0,cdataPropName:!1,format:!1,indentBy:" ",suppressEmptyNode:!1,suppressUnpairedNode:!0,suppressBooleanAttributes:!0,tagValueProcessor:function(t,e){return e},attributeValueProcessor:function(t,e){return e},preserveOrder:!1,commentPropName:!1,unpairedTags:[],entities:[{regex:new RegExp("&","g"),val:"&"},{regex:new RegExp(">","g"),val:">"},{regex:new RegExp("<","g"),val:"<"},{regex:new RegExp("'","g"),val:"'"},{regex:new RegExp('"',"g"),val:"""}],processEntities:!0,stopNodes:[],oneListGroup:!1};function Y(t){this.options=Object.assign({},Q,t),this.options.ignoreAttributes||this.options.attributesGroupName?this.isAttribute=function(){return!1}:(this.attrPrefixLen=this.options.attributeNamePrefix.length,this.isAttribute=tt),this.processTextOrObjNode=X,this.options.format?(this.indentate=Z,this.tagEndChar=">\n",this.newLine="\n"):(this.indentate=function(){return""},this.tagEndChar=">",this.newLine="")}function X(t,e,r){const n=this.j2x(t,r+1);return void 0!==t[this.options.textNodeName]&&1===Object.keys(t).length?this.buildTextValNode(t[this.options.textNodeName],e,n.attrStr,r):this.buildObjectNode(n.val,e,n.attrStr,r)}function Z(t){return this.options.indentBy.repeat(t)}function tt(t){return!(!t.startsWith(this.options.attributeNamePrefix)||t===this.options.textNodeName)&&t.substr(this.attrPrefixLen)}Y.prototype.build=function(t){return this.options.preserveOrder?W(t,this.options):(Array.isArray(t)&&this.options.arrayNodeName&&this.options.arrayNodeName.length>1&&(t={[this.options.arrayNodeName]:t}),this.j2x(t,0).val)},Y.prototype.j2x=function(t,e){let r="",n="";for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o))if(typeof t[o]>"u")this.isAttribute(o)&&(n+="");else if(null===t[o])this.isAttribute(o)?n+="":"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar;else if(t[o]instanceof Date)n+=this.buildTextValNode(t[o],o,"",e);else if("object"!=typeof t[o]){const i=this.isAttribute(o);if(i)r+=this.buildAttrPairStr(i,""+t[o]);else if(o===this.options.textNodeName){let e=this.options.tagValueProcessor(o,""+t[o]);n+=this.replaceEntitiesValue(e)}else n+=this.buildTextValNode(t[o],o,"",e)}else if(Array.isArray(t[o])){const r=t[o].length;let i="";for(let s=0;s<r;s++){const r=t[o][s];typeof r>"u"||(null===r?"?"===o[0]?n+=this.indentate(e)+"<"+o+"?"+this.tagEndChar:n+=this.indentate(e)+"<"+o+"/"+this.tagEndChar:"object"==typeof r?this.options.oneListGroup?i+=this.j2x(r,e+1).val:i+=this.processTextOrObjNode(r,o,e):i+=this.buildTextValNode(r,o,"",e))}this.options.oneListGroup&&(i=this.buildObjectNode(i,o,"",e)),n+=i}else if(this.options.attributesGroupName&&o===this.options.attributesGroupName){const e=Object.keys(t[o]),n=e.length;for(let i=0;i<n;i++)r+=this.buildAttrPairStr(e[i],""+t[o][e[i]])}else n+=this.processTextOrObjNode(t[o],o,e);return{attrStr:r,val:n}},Y.prototype.buildAttrPairStr=function(t,e){return e=this.options.attributeValueProcessor(t,""+e),e=this.replaceEntitiesValue(e),this.options.suppressBooleanAttributes&&"true"===e?" "+t:" "+t+'="'+e+'"'},Y.prototype.buildObjectNode=function(t,e,r,n){if(""===t)return"?"===e[0]?this.indentate(n)+"<"+e+r+"?"+this.tagEndChar:this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar;{let o="</"+e+this.tagEndChar,i="";return"?"===e[0]&&(i="?",o=""),!r&&""!==r||-1!==t.indexOf("<")?!1!==this.options.commentPropName&&e===this.options.commentPropName&&0===i.length?this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine:this.indentate(n)+"<"+e+r+i+this.tagEndChar+t+this.indentate(n)+o:this.indentate(n)+"<"+e+r+i+">"+t+o}},Y.prototype.closeTag=function(t){let e="";return-1!==this.options.unpairedTags.indexOf(t)?this.options.suppressUnpairedNode||(e="/"):e=this.options.suppressEmptyNode?"/":`></${t}`,e},Y.prototype.buildTextValNode=function(t,e,r,n){if(!1!==this.options.cdataPropName&&e===this.options.cdataPropName)return this.indentate(n)+`<![CDATA[${t}]]>`+this.newLine;if(!1!==this.options.commentPropName&&e===this.options.commentPropName)return this.indentate(n)+`\x3c!--${t}--\x3e`+this.newLine;if("?"===e[0])return this.indentate(n)+"<"+e+r+"?"+this.tagEndChar;{let o=this.options.tagValueProcessor(e,t);return o=this.replaceEntitiesValue(o),""===o?this.indentate(n)+"<"+e+r+this.closeTag(e)+this.tagEndChar:this.indentate(n)+"<"+e+r+">"+o+"</"+e+this.tagEndChar}},Y.prototype.replaceEntitiesValue=function(t){if(t&&t.length>0&&this.options.processEntities)for(let e=0;e<this.options.entities.length;e++){const r=this.options.entities[e];t=t.replace(r.regex,r.val)}return t}}},i={};function s(t){var e=i[t];if(void 0!==e)return e.exports;var r=i[t]={id:t,loaded:!1,exports:{}};return o[t].call(r.exports,r,r.exports,s),r.loaded=!0,r.exports}s.m=o,e=[],s.O=(t,r,n,o)=>{if(!r){var i=1/0;for(p=0;p<e.length;p++){r=e[p][0],n=e[p][1],o=e[p][2];for(var a=!0,u=0;u<r.length;u++)(!1&o||i>=o)&&Object.keys(s.O).every((t=>s.O[t](r[u])))?r.splice(u--,1):(a=!1,o<i&&(i=o));if(a){e.splice(p--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var p=e.length;p>0&&e[p-1][2]>o;p--)e[p]=e[p-1];e[p]=[r,n,o]},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var r in e)s.o(e,r)&&!s.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce(((e,r)=>(s.f[r](t,e),e)),[])),s.u=t=>(({3239:"settings-users",4529:"settings-apps-view"}[t]||t)+"-"+t+".js?v="+{1359:"d217768bf3f39a7359dd",1439:"41c39783c33a6fb28f5c",1544:"d535e8c8987669bcb7a2",3239:"b380e9fda46ca498c72f",3865:"1b3dd2786e4df4dcbf8d",4529:"114316009107c5c2ca02",8618:"1e8f15db3b14455fef8f",8630:"eb1ab06c4928352754c5"}[t]),s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r={},n="nextcloud:",s.l=(t,e,o,i)=>{if(r[t])r[t].push(e);else{var a,u;if(void 0!==o)for(var c=document.getElementsByTagName("script"),p=0;p<c.length;p++){var d=c[p];if(d.getAttribute("src")==t||d.getAttribute("data-webpack")==n+o){a=d;break}}a||(u=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,s.nc&&a.setAttribute("nonce",s.nc),a.setAttribute("data-webpack",n+o),a.src=t),r[t]=[e];var l=(e,n)=>{a.onerror=a.onload=null,clearTimeout(h);var o=r[t];if(delete r[t],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((t=>t(n))),e)return e(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=l.bind(null,a.onerror),a.onload=l.bind(null,a.onload),u&&document.head.appendChild(a)}},s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),s.j=2689,(()=>{var t;s.g.importScripts&&(t=s.g.location+"");var e=s.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=r[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),(()=>{s.b=document.baseURI||self.location.href;var t={2689:0};s.f.j=(e,r)=>{var n=s.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,o)=>n=t[e]=[r,o]));r.push(n[2]=o);var i=s.p+s.u(e),a=new Error;s.l(i,(r=>{if(s.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}}),"chunk-"+e,e)}},s.O.j=e=>0===t[e];var e=(e,r)=>{var n,o,i=r[0],a=r[1],u=r[2],c=0;if(i.some((e=>0!==t[e]))){for(n in a)s.o(a,n)&&(s.m[n]=a[n]);if(u)var p=u(s)}for(e&&e(r);c<i.length;c++)o=i[c],s.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return s.O(p)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))})(),s.nc=void 0;var a=s.O(void 0,[4208],(()=>s(74329)));a=s.O(a)})(); +//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=4293a8618362016b22ad
\ No newline at end of file diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map index f3581a2449d..5f41d1279f6 100644 --- a/dist/settings-vue-settings-apps-users-management.js.map +++ b/dist/settings-vue-settings-apps-users-management.js.map @@ -1 +1 @@ -{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=488eb1d7a6736c022bb1","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/node_modules/vue-router/dist/vue-router.esm.js","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.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/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/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 = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\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\tscript.timeout = 120;\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 * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n * @author Stephan Orbaugh <stephan.orbaugh@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.unshift(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @return {Promise<number>}\n\t */\n\tasync getDisabledUsers(context, { offset, limit }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}', { offset, limit })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=b0b62a76\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/*!\n * vue-router v3.6.5\n * (c) 2022 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj\n ? Object.keys(obj)\n .map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n\n // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\\n<router-link v-slot=\"{ navigate, href }\" custom></router-link>\\n');\n warnedCustomSlot = true;\n }\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\"<router-link> with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n } else {\n // find the first <a> child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the <a> is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n aAttrs['aria-current'] = ariaCurrentValue;\n } else {\n // doesn't have <a> child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap,\n parentRoute\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n\n warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoute: addRoute,\n getRoutes: getRoutes,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && typeof window.history.pushState === 'function'\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1$1 = this;\n\n var route;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1$1.ensureURL();\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1$1.ready) {\n this$1$1.ready = true;\n this$1$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1$1.ready) {\n // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1$1.ready = true;\n this$1$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1$1 = this;\n\n var current = this.current;\n this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1$1.errorCbs.length) {\n this$1$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n var iterator = function (hook, next) {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort(createNavigationRedirectedError(current, route));\n if (typeof to === 'object' && to.replace) {\n this$1$1.replace(to);\n } else {\n this$1$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1$1.pending = null;\n onComplete(route);\n if (this$1$1.router.app) {\n this$1$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect <base> tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1$1.base);\n if (this$1$1.current === START && location === this$1$1._startLocation) {\n return\n }\n\n this$1$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n };\n var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n this$1$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n var prev = this$1$1.current;\n this$1$1.index = targetIndex;\n this$1$1.updateRoute(route);\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n this$1$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n }\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback =\n mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1$1 = this;\n\n process.env.NODE_ENV !== 'production' &&\n assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1$1.apps.indexOf(app);\n if (index > -1) { this$1$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n if (!this$1$1.app) { this$1$1.history.teardown(); }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\n );\n }\n\n history.listen(function (route) {\n this$1$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n })\n )\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(to, current, append, this);\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nvar VueRouter$1 = VueRouter;\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\nexport { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version };\n","import { defineAsyncComponent } from 'vue';\n// Dynamic loading\nconst AppStore = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue'));\nconst AppStoreNavigation = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue'));\nconst AppstoreSidebar = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue'));\nconst UserManagement = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue'));\nconst UserManagementNavigation = defineAsyncComponent(() => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue'));\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppstoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getRequestToken } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\nVue.use(VTooltip, { defaultHtml: false });\nconst store = useStore();\nsync(store, router);\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken() ?? '');\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","import { getCurrentUser as A, onRequestTokenUpdate as ue, getRequestToken as de } from \"@nextcloud/auth\";\nimport { getLoggerBuilder as q } from \"@nextcloud/logger\";\nimport { getCanonicalLocale as ae } from \"@nextcloud/l10n\";\nimport { join as le, basename as fe, extname as ce, dirname as I } from \"path\";\nimport { encodePath as he } from \"@nextcloud/paths\";\nimport { generateRemoteUrl as pe } from \"@nextcloud/router\";\nimport { createClient as ge, getPatcher as we } from \"webdav\";\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst me = (e) => e === null ? q().setApp(\"files\").build() : q().setApp(\"files\").setUid(e.uid).build(), m = me(A());\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ne {\n _entries = [];\n registerEntry(t) {\n this.validateEntry(t), this._entries.push(t);\n }\n unregisterEntry(t) {\n const r = typeof t == \"string\" ? this.getEntryIndex(t) : this.getEntryIndex(t.id);\n if (r === -1) {\n m.warn(\"Entry not found, nothing removed\", { entry: t, entries: this.getEntries() });\n return;\n }\n this._entries.splice(r, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(t) {\n return t ? this._entries.filter((r) => typeof r.enabled == \"function\" ? r.enabled(t) : !0) : this._entries;\n }\n getEntryIndex(t) {\n return this._entries.findIndex((r) => r.id === t);\n }\n validateEntry(t) {\n if (!t.id || !t.displayName || !(t.iconSvgInline || t.iconClass) || !t.handler)\n throw new Error(\"Invalid entry\");\n if (typeof t.id != \"string\" || typeof t.displayName != \"string\")\n throw new Error(\"Invalid id or displayName property\");\n if (t.iconClass && typeof t.iconClass != \"string\" || t.iconSvgInline && typeof t.iconSvgInline != \"string\")\n throw new Error(\"Invalid icon provided\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (typeof t.handler != \"function\")\n throw new Error(\"Invalid handler property\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order property\");\n if (this.getEntryIndex(t.id) !== -1)\n throw new Error(\"Duplicate entry\");\n }\n}\nconst F = function() {\n return typeof window._nc_newfilemenu > \"u\" && (window._nc_newfilemenu = new Ne(), m.debug(\"NewFileMenu initialized\")), window._nc_newfilemenu;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst C = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"], P = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction Yt(e, t = !1, r = !1, s = !1) {\n r = r && !s, typeof e == \"string\" && (e = Number(e));\n let n = e > 0 ? Math.floor(Math.log(e) / Math.log(s ? 1e3 : 1024)) : 0;\n n = Math.min((r ? P.length : C.length) - 1, n);\n const i = r ? P[n] : C[n];\n let d = (e / Math.pow(s ? 1e3 : 1024, n)).toFixed(1);\n return t === !0 && n === 0 ? (d !== \"0.0\" ? \"< 1 \" : \"0 \") + (r ? P[1] : C[1]) : (n < 2 ? d = parseFloat(d).toFixed(0) : d = parseFloat(d).toLocaleString(ae()), d + \" \" + i);\n}\nfunction Jt(e, t = !1) {\n try {\n e = `${e}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch {\n return null;\n }\n const r = e.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (r === null || r[1] === \".\" || r[1] === \"\")\n return null;\n const s = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n }, n = `${r[1]}`, i = r[4] === \"i\" || t ? 1024 : 1e3;\n return Math.round(Number.parseFloat(n) * i ** s[r[3]]);\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Z = /* @__PURE__ */ ((e) => (e.DEFAULT = \"default\", e.HIDDEN = \"hidden\", e))(Z || {});\nclass Qt {\n _action;\n constructor(t) {\n this.validateAction(t), this._action = t;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(t) {\n if (!t.id || typeof t.id != \"string\")\n throw new Error(\"Invalid id\");\n if (!t.displayName || typeof t.displayName != \"function\")\n throw new Error(\"Invalid displayName function\");\n if (\"title\" in t && typeof t.title != \"function\")\n throw new Error(\"Invalid title function\");\n if (!t.iconSvgInline || typeof t.iconSvgInline != \"function\")\n throw new Error(\"Invalid iconSvgInline function\");\n if (!t.exec || typeof t.exec != \"function\")\n throw new Error(\"Invalid exec function\");\n if (\"enabled\" in t && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled function\");\n if (\"execBatch\" in t && typeof t.execBatch != \"function\")\n throw new Error(\"Invalid execBatch function\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order\");\n if (\"parent\" in t && typeof t.parent != \"string\")\n throw new Error(\"Invalid parent\");\n if (t.default && !Object.values(Z).includes(t.default))\n throw new Error(\"Invalid default\");\n if (\"inline\" in t && typeof t.inline != \"function\")\n throw new Error(\"Invalid inline function\");\n if (\"renderInline\" in t && typeof t.renderInline != \"function\")\n throw new Error(\"Invalid renderInline function\");\n }\n}\nconst Dt = function(e) {\n if (typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions.find((t) => t.id === e.id)) {\n m.error(`FileAction ${e.id} already registered`, { action: e });\n return;\n }\n window._nc_fileactions.push(e);\n}, er = function() {\n return typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass tr {\n _header;\n constructor(t) {\n this.validateHeader(t), this._header = t;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(t) {\n if (!t.id || !t.render || !t.updated)\n throw new Error(\"Invalid header: id, render and updated are required\");\n if (typeof t.id != \"string\")\n throw new Error(\"Invalid id property\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (t.render && typeof t.render != \"function\")\n throw new Error(\"Invalid render property\");\n if (t.updated && typeof t.updated != \"function\")\n throw new Error(\"Invalid updated property\");\n }\n}\nconst rr = function(e) {\n if (typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader.find((t) => t.id === e.id)) {\n m.error(`Header ${e.id} already registered`, { header: e });\n return;\n }\n window._nc_filelistheader.push(e);\n}, nr = function() {\n return typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar N = /* @__PURE__ */ ((e) => (e[e.NONE = 0] = \"NONE\", e[e.CREATE = 4] = \"CREATE\", e[e.READ = 1] = \"READ\", e[e.UPDATE = 2] = \"UPDATE\", e[e.DELETE = 8] = \"DELETE\", e[e.SHARE = 16] = \"SHARE\", e[e.ALL = 31] = \"ALL\", e))(N || {});\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst j = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"nc:share-attributes\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:share-types\",\n \"oc:size\",\n \"ocs:share-permissions\"\n], Y = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n}, ir = function(e, t = { nc: \"http://nextcloud.org/ns\" }) {\n typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j], window._nc_dav_namespaces = { ...Y });\n const r = { ...window._nc_dav_namespaces, ...t };\n if (window._nc_dav_properties.find((n) => n === e))\n return m.error(`${e} already registered`, { prop: e }), !1;\n if (e.startsWith(\"<\") || e.split(\":\").length !== 2)\n return m.error(`${e} is not valid. See example: 'oc:fileid'`, { prop: e }), !1;\n const s = e.split(\":\")[0];\n return r[s] ? (window._nc_dav_properties.push(e), window._nc_dav_namespaces = r, !0) : (m.error(`${e} namespace unknown`, { prop: e, namespaces: r }), !1);\n}, V = function() {\n return typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j]), window._nc_dav_properties.map((e) => `<${e} />`).join(\" \");\n}, L = function() {\n return typeof window._nc_dav_namespaces > \"u\" && (window._nc_dav_namespaces = { ...Y }), Object.keys(window._nc_dav_namespaces).map((e) => `xmlns:${e}=\"${window._nc_dav_namespaces?.[e]}\"`).join(\" \");\n}, sr = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<d:propfind ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`;\n}, Ee = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<oc:filter-files ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`;\n}, or = function(e) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<d:searchrequest ${L()}\n\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${A()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${e}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst be = function(e = \"\") {\n let t = N.NONE;\n return e && ((e.includes(\"C\") || e.includes(\"K\")) && (t |= N.CREATE), e.includes(\"G\") && (t |= N.READ), (e.includes(\"W\") || e.includes(\"N\") || e.includes(\"V\")) && (t |= N.UPDATE), e.includes(\"D\") && (t |= N.DELETE), e.includes(\"R\") && (t |= N.SHARE)), t;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar R = /* @__PURE__ */ ((e) => (e.Folder = \"folder\", e.File = \"file\", e))(R || {});\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst J = function(e, t) {\n return e.match(t) !== null;\n}, X = (e, t) => {\n if (e.id && typeof e.id != \"number\")\n throw new Error(\"Invalid id type of value\");\n if (!e.source)\n throw new Error(\"Missing mandatory source\");\n try {\n new URL(e.source);\n } catch {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!e.source.startsWith(\"http\"))\n throw new Error(\"Invalid source format, only http(s) is supported\");\n if (e.mtime && !(e.mtime instanceof Date))\n throw new Error(\"Invalid mtime type\");\n if (e.crtime && !(e.crtime instanceof Date))\n throw new Error(\"Invalid crtime type\");\n if (!e.mime || typeof e.mime != \"string\" || !e.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi))\n throw new Error(\"Missing or invalid mandatory mime\");\n if (\"size\" in e && typeof e.size != \"number\" && e.size !== void 0)\n throw new Error(\"Invalid size type\");\n if (\"permissions\" in e && e.permissions !== void 0 && !(typeof e.permissions == \"number\" && e.permissions >= N.NONE && e.permissions <= N.ALL))\n throw new Error(\"Invalid permissions\");\n if (e.owner && e.owner !== null && typeof e.owner != \"string\")\n throw new Error(\"Invalid owner type\");\n if (e.attributes && typeof e.attributes != \"object\")\n throw new Error(\"Invalid attributes type\");\n if (e.root && typeof e.root != \"string\")\n throw new Error(\"Invalid root type\");\n if (e.root && !e.root.startsWith(\"/\"))\n throw new Error(\"Root must start with a leading slash\");\n if (e.root && !e.source.includes(e.root))\n throw new Error(\"Root must be part of the source\");\n if (e.root && J(e.source, t)) {\n const r = e.source.match(t)[0];\n if (!e.source.includes(le(r, e.root)))\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n if (e.status && !Object.values(Q).includes(e.status))\n throw new Error(\"Status must be a valid NodeStatus\");\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Q = /* @__PURE__ */ ((e) => (e.NEW = \"new\", e.FAILED = \"failed\", e.LOADING = \"loading\", e.LOCKED = \"locked\", e))(Q || {});\nclass D {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n constructor(t, r) {\n X(t, r || this._knownDavService), this._data = t;\n const s = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set: (n, i, d) => (this.updateMtime(), Reflect.set(n, i, d)),\n deleteProperty: (n, i) => (this.updateMtime(), Reflect.deleteProperty(n, i))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n this._attributes = new Proxy(t.attributes || {}, s), delete this._data.attributes, r && (this._knownDavService = r);\n }\n /**\n * Get the source url to this object\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin: t } = new URL(this.source);\n return t + he(this.source.slice(t.length));\n }\n /**\n * Get this object name\n */\n get basename() {\n return fe(this.source);\n }\n /**\n * Get this object's extension\n */\n get extension() {\n return ce(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n */\n get dirname() {\n if (this.root) {\n let r = this.source;\n this.isDavRessource && (r = r.split(this._knownDavService).pop());\n const s = r.indexOf(this.root), n = this.root.replace(/\\/$/, \"\");\n return I(r.slice(s + n.length) || \"/\");\n }\n const t = new URL(this.source);\n return I(t.pathname);\n }\n /**\n * Get the file mime\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Get the file creation time\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Get the file attribute\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n return this.owner === null && !this.isDavRessource ? N.READ : this._data.permissions !== void 0 ? this._data.permissions : N.NONE;\n }\n /**\n * Get the file owner\n */\n get owner() {\n return this.isDavRessource ? this._data.owner : null;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return J(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n */\n get root() {\n return this._data.root ? this._data.root.replace(/^(.+)\\/$/, \"$1\") : this.isDavRessource && I(this.source).split(this._knownDavService).pop() || null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let t = this.source;\n this.isDavRessource && (t = t.split(this._knownDavService).pop());\n const r = t.indexOf(this.root), s = this.root.replace(/\\/$/, \"\");\n return t.slice(r + s.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * Will look for the fileid in attributes if undefined.\n */\n get fileid() {\n return this._data?.id || this.attributes?.fileid;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(t) {\n this._data.status = t;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(t) {\n X({ ...this._data, source: t }, this._knownDavService), this._data.source = t, this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(t) {\n if (t.includes(\"/\"))\n throw new Error(\"Invalid basename\");\n this.move(I(this.source) + \"/\" + t);\n }\n /**\n * Update the mtime if exists.\n */\n updateMtime() {\n this._data.mtime && (this._data.mtime = /* @__PURE__ */ new Date());\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass ye extends D {\n get type() {\n return R.File;\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass _e extends D {\n constructor(t) {\n super({\n ...t,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return R.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst ee = `/files/${A()?.uid}`, te = pe(\"dav\"), ur = function(e = te, t = {}) {\n const r = ge(e, { headers: t });\n function s(i) {\n r.setHeaders({\n ...t,\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: i ?? \"\"\n });\n }\n return ue(s), s(de()), we().patch(\"fetch\", (i, d) => {\n const u = d.headers;\n return u?.method && (d.method = u.method, delete u.method), fetch(i, d);\n }), r;\n}, dr = async (e, t = \"/\", r = ee) => (await e.getDirectoryContents(`${r}${t}`, {\n details: !0,\n data: Ee(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: !0\n})).data.filter((n) => n.filename !== t).map((n) => ve(n, r)), ve = function(e, t = ee, r = te) {\n const s = e.props, n = be(s?.permissions), i = s?.[\"owner-id\"] || A()?.uid, d = {\n id: s?.fileid || 0,\n source: `${r}${e.filename}`,\n mtime: new Date(Date.parse(e.lastmod)),\n mime: e.mime,\n size: s?.size || Number.parseInt(s.getcontentlength || \"0\"),\n permissions: n,\n owner: i,\n root: t,\n attributes: {\n ...e,\n ...s,\n hasPreview: s?.[\"has-preview\"]\n }\n };\n return delete d.attributes?.props, e.type === \"file\" ? new ye(d) : new _e(d);\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Te {\n _views = [];\n _currentView = null;\n register(t) {\n if (this._views.find((r) => r.id === t.id))\n throw new Error(`View id ${t.id} is already registered`);\n this._views.push(t);\n }\n remove(t) {\n const r = this._views.findIndex((s) => s.id === t);\n r !== -1 && this._views.splice(r, 1);\n }\n get views() {\n return this._views;\n }\n setActive(t) {\n this._currentView = t;\n }\n get active() {\n return this._currentView;\n }\n}\nconst ar = function() {\n return typeof window._nc_navigation > \"u\" && (window._nc_navigation = new Te(), m.debug(\"Navigation service initialized\")), window._nc_navigation;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ie {\n _column;\n constructor(t) {\n Ae(t), this._column = t;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst Ae = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"A column id is required\");\n if (!e.title || typeof e.title != \"string\")\n throw new Error(\"A column title is required\");\n if (!e.render || typeof e.render != \"function\")\n throw new Error(\"A render function is required\");\n if (e.sort && typeof e.sort != \"function\")\n throw new Error(\"Column sortFunction must be a function\");\n if (e.summary && typeof e.summary != \"function\")\n throw new Error(\"Column summary must be a function\");\n return !0;\n};\nvar S = {}, O = {};\n(function(e) {\n const t = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\", r = t + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\", s = \"[\" + t + \"][\" + r + \"]*\", n = new RegExp(\"^\" + s + \"$\"), i = function(u, o) {\n const a = [];\n let l = o.exec(u);\n for (; l; ) {\n const f = [];\n f.startIndex = o.lastIndex - l[0].length;\n const c = l.length;\n for (let g = 0; g < c; g++)\n f.push(l[g]);\n a.push(f), l = o.exec(u);\n }\n return a;\n }, d = function(u) {\n const o = n.exec(u);\n return !(o === null || typeof o > \"u\");\n };\n e.isExist = function(u) {\n return typeof u < \"u\";\n }, e.isEmptyObject = function(u) {\n return Object.keys(u).length === 0;\n }, e.merge = function(u, o, a) {\n if (o) {\n const l = Object.keys(o), f = l.length;\n for (let c = 0; c < f; c++)\n a === \"strict\" ? u[l[c]] = [o[l[c]]] : u[l[c]] = o[l[c]];\n }\n }, e.getValue = function(u) {\n return e.isExist(u) ? u : \"\";\n }, e.isName = d, e.getAllMatches = i, e.nameRegexp = s;\n})(O);\nconst M = O, Oe = {\n allowBooleanAttributes: !1,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nS.validate = function(e, t) {\n t = Object.assign({}, Oe, t);\n const r = [];\n let s = !1, n = !1;\n e[0] === \"\\uFEFF\" && (e = e.substr(1));\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\" && e[i + 1] === \"?\") {\n if (i += 2, i = G(e, i), i.err)\n return i;\n } else if (e[i] === \"<\") {\n let d = i;\n if (i++, e[i] === \"!\") {\n i = z(e, i);\n continue;\n } else {\n let u = !1;\n e[i] === \"/\" && (u = !0, i++);\n let o = \"\";\n for (; i < e.length && e[i] !== \">\" && e[i] !== \" \" && e[i] !== \"\t\" && e[i] !== `\n` && e[i] !== \"\\r\"; i++)\n o += e[i];\n if (o = o.trim(), o[o.length - 1] === \"/\" && (o = o.substring(0, o.length - 1), i--), !Re(o)) {\n let f;\n return o.trim().length === 0 ? f = \"Invalid space after '<'.\" : f = \"Tag '\" + o + \"' is an invalid name.\", p(\"InvalidTag\", f, w(e, i));\n }\n const a = xe(e, i);\n if (a === !1)\n return p(\"InvalidAttr\", \"Attributes for '\" + o + \"' have open quote.\", w(e, i));\n let l = a.value;\n if (i = a.index, l[l.length - 1] === \"/\") {\n const f = i - l.length;\n l = l.substring(0, l.length - 1);\n const c = H(l, t);\n if (c === !0)\n s = !0;\n else\n return p(c.err.code, c.err.msg, w(e, f + c.err.line));\n } else if (u)\n if (a.tagClosed) {\n if (l.trim().length > 0)\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' can't have attributes or invalid starting.\", w(e, d));\n {\n const f = r.pop();\n if (o !== f.tagName) {\n let c = w(e, f.tagStartPos);\n return p(\n \"InvalidTag\",\n \"Expected closing tag '\" + f.tagName + \"' (opened in line \" + c.line + \", col \" + c.col + \") instead of closing tag '\" + o + \"'.\",\n w(e, d)\n );\n }\n r.length == 0 && (n = !0);\n }\n } else\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' doesn't have proper closing.\", w(e, i));\n else {\n const f = H(l, t);\n if (f !== !0)\n return p(f.err.code, f.err.msg, w(e, i - l.length + f.err.line));\n if (n === !0)\n return p(\"InvalidXml\", \"Multiple possible root nodes found.\", w(e, i));\n t.unpairedTags.indexOf(o) !== -1 || r.push({ tagName: o, tagStartPos: d }), s = !0;\n }\n for (i++; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"!\") {\n i++, i = z(e, i);\n continue;\n } else if (e[i + 1] === \"?\") {\n if (i = G(e, ++i), i.err)\n return i;\n } else\n break;\n else if (e[i] === \"&\") {\n const f = Ve(e, i);\n if (f == -1)\n return p(\"InvalidChar\", \"char '&' is not expected.\", w(e, i));\n i = f;\n } else if (n === !0 && !U(e[i]))\n return p(\"InvalidXml\", \"Extra text at the end\", w(e, i));\n e[i] === \"<\" && i--;\n }\n } else {\n if (U(e[i]))\n continue;\n return p(\"InvalidChar\", \"char '\" + e[i] + \"' is not expected.\", w(e, i));\n }\n if (s) {\n if (r.length == 1)\n return p(\"InvalidTag\", \"Unclosed tag '\" + r[0].tagName + \"'.\", w(e, r[0].tagStartPos));\n if (r.length > 0)\n return p(\"InvalidXml\", \"Invalid '\" + JSON.stringify(r.map((i) => i.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n } else\n return p(\"InvalidXml\", \"Start tag expected.\", 1);\n return !0;\n};\nfunction U(e) {\n return e === \" \" || e === \"\t\" || e === `\n` || e === \"\\r\";\n}\nfunction G(e, t) {\n const r = t;\n for (; t < e.length; t++)\n if (e[t] == \"?\" || e[t] == \" \") {\n const s = e.substr(r, t - r);\n if (t > 5 && s === \"xml\")\n return p(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", w(e, t));\n if (e[t] == \"?\" && e[t + 1] == \">\") {\n t++;\n break;\n } else\n continue;\n }\n return t;\n}\nfunction z(e, t) {\n if (e.length > t + 5 && e[t + 1] === \"-\" && e[t + 2] === \"-\") {\n for (t += 3; t < e.length; t++)\n if (e[t] === \"-\" && e[t + 1] === \"-\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n } else if (e.length > t + 8 && e[t + 1] === \"D\" && e[t + 2] === \"O\" && e[t + 3] === \"C\" && e[t + 4] === \"T\" && e[t + 5] === \"Y\" && e[t + 6] === \"P\" && e[t + 7] === \"E\") {\n let r = 1;\n for (t += 8; t < e.length; t++)\n if (e[t] === \"<\")\n r++;\n else if (e[t] === \">\" && (r--, r === 0))\n break;\n } else if (e.length > t + 9 && e[t + 1] === \"[\" && e[t + 2] === \"C\" && e[t + 3] === \"D\" && e[t + 4] === \"A\" && e[t + 5] === \"T\" && e[t + 6] === \"A\" && e[t + 7] === \"[\") {\n for (t += 8; t < e.length; t++)\n if (e[t] === \"]\" && e[t + 1] === \"]\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n }\n return t;\n}\nconst Ce = '\"', Pe = \"'\";\nfunction xe(e, t) {\n let r = \"\", s = \"\", n = !1;\n for (; t < e.length; t++) {\n if (e[t] === Ce || e[t] === Pe)\n s === \"\" ? s = e[t] : s !== e[t] || (s = \"\");\n else if (e[t] === \">\" && s === \"\") {\n n = !0;\n break;\n }\n r += e[t];\n }\n return s !== \"\" ? !1 : {\n value: r,\n index: t,\n tagClosed: n\n };\n}\nconst $e = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction H(e, t) {\n const r = M.getAllMatches(e, $e), s = {};\n for (let n = 0; n < r.length; n++) {\n if (r[n][1].length === 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' has no space in starting.\", v(r[n]));\n if (r[n][3] !== void 0 && r[n][4] === void 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' is without value.\", v(r[n]));\n if (r[n][3] === void 0 && !t.allowBooleanAttributes)\n return p(\"InvalidAttr\", \"boolean attribute '\" + r[n][2] + \"' is not allowed.\", v(r[n]));\n const i = r[n][2];\n if (!Le(i))\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is an invalid name.\", v(r[n]));\n if (!s.hasOwnProperty(i))\n s[i] = 1;\n else\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is repeated.\", v(r[n]));\n }\n return !0;\n}\nfunction Fe(e, t) {\n let r = /\\d/;\n for (e[t] === \"x\" && (t++, r = /[\\da-fA-F]/); t < e.length; t++) {\n if (e[t] === \";\")\n return t;\n if (!e[t].match(r))\n break;\n }\n return -1;\n}\nfunction Ve(e, t) {\n if (t++, e[t] === \";\")\n return -1;\n if (e[t] === \"#\")\n return t++, Fe(e, t);\n let r = 0;\n for (; t < e.length; t++, r++)\n if (!(e[t].match(/\\w/) && r < 20)) {\n if (e[t] === \";\")\n break;\n return -1;\n }\n return t;\n}\nfunction p(e, t, r) {\n return {\n err: {\n code: e,\n msg: t,\n line: r.line || r,\n col: r.col\n }\n };\n}\nfunction Le(e) {\n return M.isName(e);\n}\nfunction Re(e) {\n return M.isName(e);\n}\nfunction w(e, t) {\n const r = e.substring(0, t).split(/\\r?\\n/);\n return {\n line: r.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: r[r.length - 1].length + 1\n };\n}\nfunction v(e) {\n return e.startIndex + e[1].length;\n}\nvar k = {};\nconst re = {\n preserveOrder: !1,\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n removeNSPrefix: !1,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: !1,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: !0,\n parseAttributeValue: !1,\n trimValues: !0,\n //Trim string values of tag and attributes\n cdataPropName: !1,\n numberParseOptions: {\n hex: !0,\n leadingZeros: !0,\n eNotation: !0\n },\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: !1,\n isArray: () => !1,\n commentPropName: !1,\n unpairedTags: [],\n processEntities: !0,\n htmlEntities: !1,\n ignoreDeclaration: !1,\n ignorePiTags: !1,\n transformTagName: !1,\n transformAttributeName: !1,\n updateTag: function(e, t, r) {\n return e;\n }\n // skipEmptyListItem: false\n}, Se = function(e) {\n return Object.assign({}, re, e);\n};\nk.buildOptions = Se;\nk.defaultOptions = re;\nclass Me {\n constructor(t) {\n this.tagname = t, this.child = [], this[\":@\"] = {};\n }\n add(t, r) {\n t === \"__proto__\" && (t = \"#__proto__\"), this.child.push({ [t]: r });\n }\n addChild(t) {\n t.tagname === \"__proto__\" && (t.tagname = \"#__proto__\"), t[\":@\"] && Object.keys(t[\":@\"]).length > 0 ? this.child.push({ [t.tagname]: t.child, \":@\": t[\":@\"] }) : this.child.push({ [t.tagname]: t.child });\n }\n}\nvar ke = Me;\nconst Be = O;\nfunction qe(e, t) {\n const r = {};\n if (e[t + 3] === \"O\" && e[t + 4] === \"C\" && e[t + 5] === \"T\" && e[t + 6] === \"Y\" && e[t + 7] === \"P\" && e[t + 8] === \"E\") {\n t = t + 9;\n let s = 1, n = !1, i = !1, d = \"\";\n for (; t < e.length; t++)\n if (e[t] === \"<\" && !i) {\n if (n && Ge(e, t))\n t += 7, [entityName, val, t] = Xe(e, t + 1), val.indexOf(\"&\") === -1 && (r[We(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n });\n else if (n && ze(e, t))\n t += 8;\n else if (n && He(e, t))\n t += 8;\n else if (n && Ke(e, t))\n t += 9;\n else if (Ue)\n i = !0;\n else\n throw new Error(\"Invalid DOCTYPE\");\n s++, d = \"\";\n } else if (e[t] === \">\") {\n if (i ? e[t - 1] === \"-\" && e[t - 2] === \"-\" && (i = !1, s--) : s--, s === 0)\n break;\n } else\n e[t] === \"[\" ? n = !0 : d += e[t];\n if (s !== 0)\n throw new Error(\"Unclosed DOCTYPE\");\n } else\n throw new Error(\"Invalid Tag instead of DOCTYPE\");\n return { entities: r, i: t };\n}\nfunction Xe(e, t) {\n let r = \"\";\n for (; t < e.length && e[t] !== \"'\" && e[t] !== '\"'; t++)\n r += e[t];\n if (r = r.trim(), r.indexOf(\" \") !== -1)\n throw new Error(\"External entites are not supported\");\n const s = e[t++];\n let n = \"\";\n for (; t < e.length && e[t] !== s; t++)\n n += e[t];\n return [r, n, t];\n}\nfunction Ue(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"-\" && e[t + 3] === \"-\";\n}\nfunction Ge(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"N\" && e[t + 4] === \"T\" && e[t + 5] === \"I\" && e[t + 6] === \"T\" && e[t + 7] === \"Y\";\n}\nfunction ze(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"L\" && e[t + 4] === \"E\" && e[t + 5] === \"M\" && e[t + 6] === \"E\" && e[t + 7] === \"N\" && e[t + 8] === \"T\";\n}\nfunction He(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"A\" && e[t + 3] === \"T\" && e[t + 4] === \"T\" && e[t + 5] === \"L\" && e[t + 6] === \"I\" && e[t + 7] === \"S\" && e[t + 8] === \"T\";\n}\nfunction Ke(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"N\" && e[t + 3] === \"O\" && e[t + 4] === \"T\" && e[t + 5] === \"A\" && e[t + 6] === \"T\" && e[t + 7] === \"I\" && e[t + 8] === \"O\" && e[t + 9] === \"N\";\n}\nfunction We(e) {\n if (Be.isName(e))\n return e;\n throw new Error(`Invalid entity name ${e}`);\n}\nvar Ze = qe;\nconst je = /^[-+]?0x[a-fA-F0-9]+$/, Ye = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n!Number.parseInt && window.parseInt && (Number.parseInt = window.parseInt);\n!Number.parseFloat && window.parseFloat && (Number.parseFloat = window.parseFloat);\nconst Je = {\n hex: !0,\n leadingZeros: !0,\n decimalPoint: \".\",\n eNotation: !0\n //skipLike: /regex/\n};\nfunction Qe(e, t = {}) {\n if (t = Object.assign({}, Je, t), !e || typeof e != \"string\")\n return e;\n let r = e.trim();\n if (t.skipLike !== void 0 && t.skipLike.test(r))\n return e;\n if (t.hex && je.test(r))\n return Number.parseInt(r, 16);\n {\n const s = Ye.exec(r);\n if (s) {\n const n = s[1], i = s[2];\n let d = De(s[3]);\n const u = s[4] || s[6];\n if (!t.leadingZeros && i.length > 0 && n && r[2] !== \".\")\n return e;\n if (!t.leadingZeros && i.length > 0 && !n && r[1] !== \".\")\n return e;\n {\n const o = Number(r), a = \"\" + o;\n return a.search(/[eE]/) !== -1 || u ? t.eNotation ? o : e : r.indexOf(\".\") !== -1 ? a === \"0\" && d === \"\" || a === d || n && a === \"-\" + d ? o : e : i ? d === a || n + d === a ? o : e : r === a || r === n + a ? o : e;\n }\n } else\n return e;\n }\n}\nfunction De(e) {\n return e && e.indexOf(\".\") !== -1 && (e = e.replace(/0+$/, \"\"), e === \".\" ? e = \"0\" : e[0] === \".\" ? e = \"0\" + e : e[e.length - 1] === \".\" && (e = e.substr(0, e.length - 1))), e;\n}\nvar et = Qe;\nconst B = O, T = ke, tt = Ze, rt = et;\n\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g, B.nameRegexp);\nlet nt = class {\n constructor(t) {\n this.options = t, this.currentNode = null, this.tagsNodeStack = [], this.docTypeEntities = {}, this.lastEntities = {\n apos: { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n gt: { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n lt: { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n quot: { regex: /&(quot|#34|#x22);/g, val: '\"' }\n }, this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" }, this.htmlEntities = {\n space: { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n cent: { regex: /&(cent|#162);/g, val: \"¢\" },\n pound: { regex: /&(pound|#163);/g, val: \"£\" },\n yen: { regex: /&(yen|#165);/g, val: \"¥\" },\n euro: { regex: /&(euro|#8364);/g, val: \"€\" },\n copyright: { regex: /&(copy|#169);/g, val: \"©\" },\n reg: { regex: /&(reg|#174);/g, val: \"®\" },\n inr: { regex: /&(inr|#8377);/g, val: \"₹\" }\n }, this.addExternalEntities = it, this.parseXml = at, this.parseTextData = st, this.resolveNameSpace = ot, this.buildAttributesMap = dt, this.isItStopNode = ht, this.replaceEntitiesValue = ft, this.readStopNodeData = gt, this.saveTextToParentTag = ct, this.addChild = lt;\n }\n};\nfunction it(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n this.lastEntities[s] = {\n regex: new RegExp(\"&\" + s + \";\", \"g\"),\n val: e[s]\n };\n }\n}\nfunction st(e, t, r, s, n, i, d) {\n if (e !== void 0 && (this.options.trimValues && !s && (e = e.trim()), e.length > 0)) {\n d || (e = this.replaceEntitiesValue(e));\n const u = this.options.tagValueProcessor(t, e, r, n, i);\n return u == null ? e : typeof u != typeof e || u !== e ? u : this.options.trimValues ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e.trim() === e ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e;\n }\n}\nfunction ot(e) {\n if (this.options.removeNSPrefix) {\n const t = e.split(\":\"), r = e.charAt(0) === \"/\" ? \"/\" : \"\";\n if (t[0] === \"xmlns\")\n return \"\";\n t.length === 2 && (e = r + t[1]);\n }\n return e;\n}\nconst ut = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction dt(e, t, r) {\n if (!this.options.ignoreAttributes && typeof e == \"string\") {\n const s = B.getAllMatches(e, ut), n = s.length, i = {};\n for (let d = 0; d < n; d++) {\n const u = this.resolveNameSpace(s[d][1]);\n let o = s[d][4], a = this.options.attributeNamePrefix + u;\n if (u.length)\n if (this.options.transformAttributeName && (a = this.options.transformAttributeName(a)), a === \"__proto__\" && (a = \"#__proto__\"), o !== void 0) {\n this.options.trimValues && (o = o.trim()), o = this.replaceEntitiesValue(o);\n const l = this.options.attributeValueProcessor(u, o, t);\n l == null ? i[a] = o : typeof l != typeof o || l !== o ? i[a] = l : i[a] = $(\n o,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n } else\n this.options.allowBooleanAttributes && (i[a] = !0);\n }\n if (!Object.keys(i).length)\n return;\n if (this.options.attributesGroupName) {\n const d = {};\n return d[this.options.attributesGroupName] = i, d;\n }\n return i;\n }\n}\nconst at = function(e) {\n e = e.replace(/\\r\\n?/g, `\n`);\n const t = new T(\"!xml\");\n let r = t, s = \"\", n = \"\";\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"/\") {\n const u = y(e, \">\", i, \"Closing Tag is not closed.\");\n let o = e.substring(i + 2, u).trim();\n if (this.options.removeNSPrefix) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1));\n }\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && (s = this.saveTextToParentTag(s, r, n));\n const a = n.substring(n.lastIndexOf(\".\") + 1);\n if (o && this.options.unpairedTags.indexOf(o) !== -1)\n throw new Error(`Unpaired tag can not be used as closing tag: </${o}>`);\n let l = 0;\n a && this.options.unpairedTags.indexOf(a) !== -1 ? (l = n.lastIndexOf(\".\", n.lastIndexOf(\".\") - 1), this.tagsNodeStack.pop()) : l = n.lastIndexOf(\".\"), n = n.substring(0, l), r = this.tagsNodeStack.pop(), s = \"\", i = u;\n } else if (e[i + 1] === \"?\") {\n let u = x(e, i, !1, \"?>\");\n if (!u)\n throw new Error(\"Pi Tag is not closed.\");\n if (s = this.saveTextToParentTag(s, r, n), !(this.options.ignoreDeclaration && u.tagName === \"?xml\" || this.options.ignorePiTags)) {\n const o = new T(u.tagName);\n o.add(this.options.textNodeName, \"\"), u.tagName !== u.tagExp && u.attrExpPresent && (o[\":@\"] = this.buildAttributesMap(u.tagExp, n, u.tagName)), this.addChild(r, o, n);\n }\n i = u.closeIndex + 1;\n } else if (e.substr(i + 1, 3) === \"!--\") {\n const u = y(e, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const o = e.substring(i + 4, u - 2);\n s = this.saveTextToParentTag(s, r, n), r.add(this.options.commentPropName, [{ [this.options.textNodeName]: o }]);\n }\n i = u;\n } else if (e.substr(i + 1, 2) === \"!D\") {\n const u = tt(e, i);\n this.docTypeEntities = u.entities, i = u.i;\n } else if (e.substr(i + 1, 2) === \"![\") {\n const u = y(e, \"]]>\", i, \"CDATA is not closed.\") - 2, o = e.substring(i + 9, u);\n if (s = this.saveTextToParentTag(s, r, n), this.options.cdataPropName)\n r.add(this.options.cdataPropName, [{ [this.options.textNodeName]: o }]);\n else {\n let a = this.parseTextData(o, r.tagname, n, !0, !1, !0);\n a == null && (a = \"\"), r.add(this.options.textNodeName, a);\n }\n i = u + 2;\n } else {\n let u = x(e, i, this.options.removeNSPrefix), o = u.tagName;\n const a = u.rawTagName;\n let l = u.tagExp, f = u.attrExpPresent, c = u.closeIndex;\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && s && r.tagname !== \"!xml\" && (s = this.saveTextToParentTag(s, r, n, !1));\n const g = r;\n if (g && this.options.unpairedTags.indexOf(g.tagname) !== -1 && (r = this.tagsNodeStack.pop(), n = n.substring(0, n.lastIndexOf(\".\"))), o !== t.tagname && (n += n ? \".\" + o : o), this.isItStopNode(this.options.stopNodes, n, o)) {\n let h = \"\";\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1)\n i = u.closeIndex;\n else if (this.options.unpairedTags.indexOf(o) !== -1)\n i = u.closeIndex;\n else {\n const E = this.readStopNodeData(e, a, c + 1);\n if (!E)\n throw new Error(`Unexpected end of ${a}`);\n i = E.i, h = E.tagContent;\n }\n const _ = new T(o);\n o !== l && f && (_[\":@\"] = this.buildAttributesMap(l, n, o)), h && (h = this.parseTextData(h, o, n, !0, f, !0, !0)), n = n.substr(0, n.lastIndexOf(\".\")), _.add(this.options.textNodeName, h), this.addChild(r, _, n);\n } else {\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1) {\n o[o.length - 1] === \"/\" ? (o = o.substr(0, o.length - 1), n = n.substr(0, n.length - 1), l = o) : l = l.substr(0, l.length - 1), this.options.transformTagName && (o = this.options.transformTagName(o));\n const h = new T(o);\n o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), n = n.substr(0, n.lastIndexOf(\".\"));\n } else {\n const h = new T(o);\n this.tagsNodeStack.push(r), o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), r = h;\n }\n s = \"\", i = c;\n }\n }\n else\n s += e[i];\n return t.child;\n};\nfunction lt(e, t, r) {\n const s = this.options.updateTag(t.tagname, r, t[\":@\"]);\n s === !1 || (typeof s == \"string\" && (t.tagname = s), e.addChild(t));\n}\nconst ft = function(e) {\n if (this.options.processEntities) {\n for (let t in this.docTypeEntities) {\n const r = this.docTypeEntities[t];\n e = e.replace(r.regx, r.val);\n }\n for (let t in this.lastEntities) {\n const r = this.lastEntities[t];\n e = e.replace(r.regex, r.val);\n }\n if (this.options.htmlEntities)\n for (let t in this.htmlEntities) {\n const r = this.htmlEntities[t];\n e = e.replace(r.regex, r.val);\n }\n e = e.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return e;\n};\nfunction ct(e, t, r, s) {\n return e && (s === void 0 && (s = Object.keys(t.child).length === 0), e = this.parseTextData(\n e,\n t.tagname,\n r,\n !1,\n t[\":@\"] ? Object.keys(t[\":@\"]).length !== 0 : !1,\n s\n ), e !== void 0 && e !== \"\" && t.add(this.options.textNodeName, e), e = \"\"), e;\n}\nfunction ht(e, t, r) {\n const s = \"*.\" + r;\n for (const n in e) {\n const i = e[n];\n if (s === i || t === i)\n return !0;\n }\n return !1;\n}\nfunction pt(e, t, r = \">\") {\n let s, n = \"\";\n for (let i = t; i < e.length; i++) {\n let d = e[i];\n if (s)\n d === s && (s = \"\");\n else if (d === '\"' || d === \"'\")\n s = d;\n else if (d === r[0])\n if (r[1]) {\n if (e[i + 1] === r[1])\n return {\n data: n,\n index: i\n };\n } else\n return {\n data: n,\n index: i\n };\n else\n d === \"\t\" && (d = \" \");\n n += d;\n }\n}\nfunction y(e, t, r, s) {\n const n = e.indexOf(t, r);\n if (n === -1)\n throw new Error(s);\n return n + t.length - 1;\n}\nfunction x(e, t, r, s = \">\") {\n const n = pt(e, t + 1, s);\n if (!n)\n return;\n let i = n.data;\n const d = n.index, u = i.search(/\\s/);\n let o = i, a = !0;\n u !== -1 && (o = i.substr(0, u).replace(/\\s\\s*$/, \"\"), i = i.substr(u + 1));\n const l = o;\n if (r) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1), a = o !== n.data.substr(f + 1));\n }\n return {\n tagName: o,\n tagExp: i,\n closeIndex: d,\n attrExpPresent: a,\n rawTagName: l\n };\n}\nfunction gt(e, t, r) {\n const s = r;\n let n = 1;\n for (; r < e.length; r++)\n if (e[r] === \"<\")\n if (e[r + 1] === \"/\") {\n const i = y(e, \">\", r, `${t} is not closed`);\n if (e.substring(r + 2, i).trim() === t && (n--, n === 0))\n return {\n tagContent: e.substring(s, r),\n i\n };\n r = i;\n } else if (e[r + 1] === \"?\")\n r = y(e, \"?>\", r + 1, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 3) === \"!--\")\n r = y(e, \"-->\", r + 3, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 2) === \"![\")\n r = y(e, \"]]>\", r, \"StopNode is not closed.\") - 2;\n else {\n const i = x(e, r, \">\");\n i && ((i && i.tagName) === t && i.tagExp[i.tagExp.length - 1] !== \"/\" && n++, r = i.closeIndex);\n }\n}\nfunction $(e, t, r) {\n if (t && typeof e == \"string\") {\n const s = e.trim();\n return s === \"true\" ? !0 : s === \"false\" ? !1 : rt(e, r);\n } else\n return B.isExist(e) ? e : \"\";\n}\nvar wt = nt, ne = {};\nfunction mt(e, t) {\n return ie(e, t);\n}\nfunction ie(e, t, r) {\n let s;\n const n = {};\n for (let i = 0; i < e.length; i++) {\n const d = e[i], u = Nt(d);\n let o = \"\";\n if (r === void 0 ? o = u : o = r + \".\" + u, u === t.textNodeName)\n s === void 0 ? s = d[u] : s += \"\" + d[u];\n else {\n if (u === void 0)\n continue;\n if (d[u]) {\n let a = ie(d[u], t, o);\n const l = bt(a, t);\n d[\":@\"] ? Et(a, d[\":@\"], o, t) : Object.keys(a).length === 1 && a[t.textNodeName] !== void 0 && !t.alwaysCreateTextNode ? a = a[t.textNodeName] : Object.keys(a).length === 0 && (t.alwaysCreateTextNode ? a[t.textNodeName] = \"\" : a = \"\"), n[u] !== void 0 && n.hasOwnProperty(u) ? (Array.isArray(n[u]) || (n[u] = [n[u]]), n[u].push(a)) : t.isArray(u, o, l) ? n[u] = [a] : n[u] = a;\n }\n }\n }\n return typeof s == \"string\" ? s.length > 0 && (n[t.textNodeName] = s) : s !== void 0 && (n[t.textNodeName] = s), n;\n}\nfunction Nt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (s !== \":@\")\n return s;\n }\n}\nfunction Et(e, t, r, s) {\n if (t) {\n const n = Object.keys(t), i = n.length;\n for (let d = 0; d < i; d++) {\n const u = n[d];\n s.isArray(u, r + \".\" + u, !0, !0) ? e[u] = [t[u]] : e[u] = t[u];\n }\n }\n}\nfunction bt(e, t) {\n const { textNodeName: r } = t, s = Object.keys(e).length;\n return !!(s === 0 || s === 1 && (e[r] || typeof e[r] == \"boolean\" || e[r] === 0));\n}\nne.prettify = mt;\nconst { buildOptions: yt } = k, _t = wt, { prettify: vt } = ne, Tt = S;\nlet It = class {\n constructor(t) {\n this.externalEntities = {}, this.options = yt(t);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(t, r) {\n if (typeof t != \"string\")\n if (t.toString)\n t = t.toString();\n else\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n if (r) {\n r === !0 && (r = {});\n const i = Tt.validate(t, r);\n if (i !== !0)\n throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`);\n }\n const s = new _t(this.options);\n s.addExternalEntities(this.externalEntities);\n const n = s.parseXml(t);\n return this.options.preserveOrder || n === void 0 ? n : vt(n, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(t, r) {\n if (r.indexOf(\"&\") !== -1)\n throw new Error(\"Entity value can't have '&'\");\n if (t.indexOf(\"&\") !== -1 || t.indexOf(\";\") !== -1)\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '
'\");\n if (r === \"&\")\n throw new Error(\"An entity with value '&' is not permitted\");\n this.externalEntities[t] = r;\n }\n};\nvar At = It;\nconst Ot = `\n`;\nfunction Ct(e, t) {\n let r = \"\";\n return t.format && t.indentBy.length > 0 && (r = Ot), se(e, t, \"\", r);\n}\nfunction se(e, t, r, s) {\n let n = \"\", i = !1;\n for (let d = 0; d < e.length; d++) {\n const u = e[d], o = Pt(u);\n if (o === void 0)\n continue;\n let a = \"\";\n if (r.length === 0 ? a = o : a = `${r}.${o}`, o === t.textNodeName) {\n let h = u[o];\n xt(a, t) || (h = t.tagValueProcessor(o, h), h = oe(h, t)), i && (n += s), n += h, i = !1;\n continue;\n } else if (o === t.cdataPropName) {\n i && (n += s), n += `<![CDATA[${u[o][0][t.textNodeName]}]]>`, i = !1;\n continue;\n } else if (o === t.commentPropName) {\n n += s + `<!--${u[o][0][t.textNodeName]}-->`, i = !0;\n continue;\n } else if (o[0] === \"?\") {\n const h = K(u[\":@\"], t), _ = o === \"?xml\" ? \"\" : s;\n let E = u[o][0][t.textNodeName];\n E = E.length !== 0 ? \" \" + E : \"\", n += _ + `<${o}${E}${h}?>`, i = !0;\n continue;\n }\n let l = s;\n l !== \"\" && (l += t.indentBy);\n const f = K(u[\":@\"], t), c = s + `<${o}${f}`, g = se(u[o], t, a, l);\n t.unpairedTags.indexOf(o) !== -1 ? t.suppressUnpairedNode ? n += c + \">\" : n += c + \"/>\" : (!g || g.length === 0) && t.suppressEmptyNode ? n += c + \"/>\" : g && g.endsWith(\">\") ? n += c + `>${g}${s}</${o}>` : (n += c + \">\", g && s !== \"\" && (g.includes(\"/>\") || g.includes(\"</\")) ? n += s + t.indentBy + g + s : n += g, n += `</${o}>`), i = !0;\n }\n return n;\n}\nfunction Pt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (e.hasOwnProperty(s) && s !== \":@\")\n return s;\n }\n}\nfunction K(e, t) {\n let r = \"\";\n if (e && !t.ignoreAttributes)\n for (let s in e) {\n if (!e.hasOwnProperty(s))\n continue;\n let n = t.attributeValueProcessor(s, e[s]);\n n = oe(n, t), n === !0 && t.suppressBooleanAttributes ? r += ` ${s.substr(t.attributeNamePrefix.length)}` : r += ` ${s.substr(t.attributeNamePrefix.length)}=\"${n}\"`;\n }\n return r;\n}\nfunction xt(e, t) {\n e = e.substr(0, e.length - t.textNodeName.length - 1);\n let r = e.substr(e.lastIndexOf(\".\") + 1);\n for (let s in t.stopNodes)\n if (t.stopNodes[s] === e || t.stopNodes[s] === \"*.\" + r)\n return !0;\n return !1;\n}\nfunction oe(e, t) {\n if (e && e.length > 0 && t.processEntities)\n for (let r = 0; r < t.entities.length; r++) {\n const s = t.entities[r];\n e = e.replace(s.regex, s.val);\n }\n return e;\n}\nvar $t = Ct;\nconst Ft = $t, Vt = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n cdataPropName: !1,\n format: !1,\n indentBy: \" \",\n suppressEmptyNode: !1,\n suppressUnpairedNode: !0,\n suppressBooleanAttributes: !0,\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n preserveOrder: !1,\n commentPropName: !1,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: !0,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: !1\n};\nfunction b(e) {\n this.options = Object.assign({}, Vt, e), this.options.ignoreAttributes || this.options.attributesGroupName ? this.isAttribute = function() {\n return !1;\n } : (this.attrPrefixLen = this.options.attributeNamePrefix.length, this.isAttribute = St), this.processTextOrObjNode = Lt, this.options.format ? (this.indentate = Rt, this.tagEndChar = `>\n`, this.newLine = `\n`) : (this.indentate = function() {\n return \"\";\n }, this.tagEndChar = \">\", this.newLine = \"\");\n}\nb.prototype.build = function(e) {\n return this.options.preserveOrder ? Ft(e, this.options) : (Array.isArray(e) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1 && (e = {\n [this.options.arrayNodeName]: e\n }), this.j2x(e, 0).val);\n};\nb.prototype.j2x = function(e, t) {\n let r = \"\", s = \"\";\n for (let n in e)\n if (Object.prototype.hasOwnProperty.call(e, n))\n if (typeof e[n] > \"u\")\n this.isAttribute(n) && (s += \"\");\n else if (e[n] === null)\n this.isAttribute(n) ? s += \"\" : n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar;\n else if (e[n] instanceof Date)\n s += this.buildTextValNode(e[n], n, \"\", t);\n else if (typeof e[n] != \"object\") {\n const i = this.isAttribute(n);\n if (i)\n r += this.buildAttrPairStr(i, \"\" + e[n]);\n else if (n === this.options.textNodeName) {\n let d = this.options.tagValueProcessor(n, \"\" + e[n]);\n s += this.replaceEntitiesValue(d);\n } else\n s += this.buildTextValNode(e[n], n, \"\", t);\n } else if (Array.isArray(e[n])) {\n const i = e[n].length;\n let d = \"\";\n for (let u = 0; u < i; u++) {\n const o = e[n][u];\n typeof o > \"u\" || (o === null ? n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar : typeof o == \"object\" ? this.options.oneListGroup ? d += this.j2x(o, t + 1).val : d += this.processTextOrObjNode(o, n, t) : d += this.buildTextValNode(o, n, \"\", t));\n }\n this.options.oneListGroup && (d = this.buildObjectNode(d, n, \"\", t)), s += d;\n } else if (this.options.attributesGroupName && n === this.options.attributesGroupName) {\n const i = Object.keys(e[n]), d = i.length;\n for (let u = 0; u < d; u++)\n r += this.buildAttrPairStr(i[u], \"\" + e[n][i[u]]);\n } else\n s += this.processTextOrObjNode(e[n], n, t);\n return { attrStr: r, val: s };\n};\nb.prototype.buildAttrPairStr = function(e, t) {\n return t = this.options.attributeValueProcessor(e, \"\" + t), t = this.replaceEntitiesValue(t), this.options.suppressBooleanAttributes && t === \"true\" ? \" \" + e : \" \" + e + '=\"' + t + '\"';\n};\nfunction Lt(e, t, r) {\n const s = this.j2x(e, r + 1);\n return e[this.options.textNodeName] !== void 0 && Object.keys(e).length === 1 ? this.buildTextValNode(e[this.options.textNodeName], t, s.attrStr, r) : this.buildObjectNode(s.val, t, s.attrStr, r);\n}\nb.prototype.buildObjectNode = function(e, t, r, s) {\n if (e === \"\")\n return t[0] === \"?\" ? this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar : this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar;\n {\n let n = \"</\" + t + this.tagEndChar, i = \"\";\n return t[0] === \"?\" && (i = \"?\", n = \"\"), (r || r === \"\") && e.indexOf(\"<\") === -1 ? this.indentate(s) + \"<\" + t + r + i + \">\" + e + n : this.options.commentPropName !== !1 && t === this.options.commentPropName && i.length === 0 ? this.indentate(s) + `<!--${e}-->` + this.newLine : this.indentate(s) + \"<\" + t + r + i + this.tagEndChar + e + this.indentate(s) + n;\n }\n};\nb.prototype.closeTag = function(e) {\n let t = \"\";\n return this.options.unpairedTags.indexOf(e) !== -1 ? this.options.suppressUnpairedNode || (t = \"/\") : this.options.suppressEmptyNode ? t = \"/\" : t = `></${e}`, t;\n};\nb.prototype.buildTextValNode = function(e, t, r, s) {\n if (this.options.cdataPropName !== !1 && t === this.options.cdataPropName)\n return this.indentate(s) + `<![CDATA[${e}]]>` + this.newLine;\n if (this.options.commentPropName !== !1 && t === this.options.commentPropName)\n return this.indentate(s) + `<!--${e}-->` + this.newLine;\n if (t[0] === \"?\")\n return this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar;\n {\n let n = this.options.tagValueProcessor(t, e);\n return n = this.replaceEntitiesValue(n), n === \"\" ? this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar : this.indentate(s) + \"<\" + t + r + \">\" + n + \"</\" + t + this.tagEndChar;\n }\n};\nb.prototype.replaceEntitiesValue = function(e) {\n if (e && e.length > 0 && this.options.processEntities)\n for (let t = 0; t < this.options.entities.length; t++) {\n const r = this.options.entities[t];\n e = e.replace(r.regex, r.val);\n }\n return e;\n};\nfunction Rt(e) {\n return this.options.indentBy.repeat(e);\n}\nfunction St(e) {\n return e.startsWith(this.options.attributeNamePrefix) && e !== this.options.textNodeName ? e.substr(this.attrPrefixLen) : !1;\n}\nvar Mt = b;\nconst kt = S, Bt = At, qt = Mt;\nvar W = {\n XMLParser: Bt,\n XMLValidator: kt,\n XMLBuilder: qt\n};\nfunction Xt(e) {\n if (typeof e != \"string\")\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof e}\\``);\n if (e = e.trim(), e.length === 0 || W.XMLValidator.validate(e) !== !0)\n return !1;\n let t;\n const r = new W.XMLParser();\n try {\n t = r.parse(e);\n } catch {\n return !1;\n }\n return !(!t || !(\"svg\" in t));\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass cr {\n _view;\n constructor(t) {\n Ut(t), this._view = t;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(t) {\n this._view.icon = t;\n }\n get order() {\n return this._view.order;\n }\n set order(t) {\n this._view.order = t;\n }\n get params() {\n return this._view.params;\n }\n set params(t) {\n this._view.params = t;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(t) {\n this._view.expanded = t;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst Ut = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"View id is required and must be a string\");\n if (!e.name || typeof e.name != \"string\")\n throw new Error(\"View name is required and must be a string\");\n if (e.columns && e.columns.length > 0 && (!e.caption || typeof e.caption != \"string\"))\n throw new Error(\"View caption is required for top-level views and must be a string\");\n if (!e.getContents || typeof e.getContents != \"function\")\n throw new Error(\"View getContents is required and must be a function\");\n if (!e.icon || typeof e.icon != \"string\" || !Xt(e.icon))\n throw new Error(\"View icon is required and must be a valid svg string\");\n if (!(\"order\" in e) || typeof e.order != \"number\")\n throw new Error(\"View order is required and must be a number\");\n if (e.columns && e.columns.forEach((t) => {\n if (!(t instanceof Ie))\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }), e.emptyView && typeof e.emptyView != \"function\")\n throw new Error(\"View emptyView must be a function\");\n if (e.parent && typeof e.parent != \"string\")\n throw new Error(\"View parent must be a string\");\n if (\"sticky\" in e && typeof e.sticky != \"boolean\")\n throw new Error(\"View sticky must be a boolean\");\n if (\"expanded\" in e && typeof e.expanded != \"boolean\")\n throw new Error(\"View expanded must be a boolean\");\n if (e.defaultSortKey && typeof e.defaultSortKey != \"string\")\n throw new Error(\"View defaultSortKey must be a string\");\n return !0;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst hr = function(e) {\n return F().registerEntry(e);\n}, pr = function(e) {\n return F().unregisterEntry(e);\n}, gr = function(e) {\n return F().getEntries(e).sort((r, s) => r.order !== void 0 && s.order !== void 0 && r.order !== s.order ? r.order - s.order : r.displayName.localeCompare(s.displayName, void 0, { numeric: !0, sensitivity: \"base\" }));\n};\nexport {\n Ie as Column,\n Z as DefaultType,\n ye as File,\n Qt as FileAction,\n R as FileType,\n _e as Folder,\n tr as Header,\n Te as Navigation,\n D as Node,\n Q as NodeStatus,\n N as Permission,\n cr as View,\n hr as addNewFileMenuEntry,\n ur as davGetClient,\n sr as davGetDefaultPropfind,\n Ee as davGetFavoritesReport,\n or as davGetRecentSearch,\n be as davParsePermissions,\n te as davRemoteURL,\n ve as davResultToNode,\n ee as davRootPath,\n Y as defaultDavNamespaces,\n j as defaultDavProperties,\n Yt as formatFileSize,\n L as getDavNameSpaces,\n V as getDavProperties,\n dr as getFavoriteNodes,\n er as getFileActions,\n nr as getFileListHeaders,\n ar as getNavigation,\n gr as getNewFileMenuEntries,\n Jt as parseFileSize,\n ir as registerDavProperty,\n Dt as registerFileAction,\n rr as registerFileListHeaders,\n pr as removeNewFileMenuEntry\n};\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 \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"1359\":\"d217768bf3f39a7359dd\",\"1439\":\"41c39783c33a6fb28f5c\",\"3239\":\"b380e9fda46ca498c72f\",\"4529\":\"bb61b58e95ee6934e7d9\",\"8484\":\"938301f58da67708d5b8\",\"8618\":\"1e8f15db3b14455fef8f\",\"8753\":\"79b1e1f3f1b7fdbe0988\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\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(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 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 = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(46472)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","localStorage","getBuilder","persist","build","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","name","localeCompare","defaults","id","canAdd","canRemove","state","users","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","initGroups","_ref3","group","assign","addGroup","_ref4","gid","displayName","find","unshift","e","console","error","renameGroup","_ref5","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref6","userid","user","enabled","push","removeUserGroup","_ref7","indexOf","addUserSubAdmin","_ref8","subadmin","removeUserSubAdmin","_ref9","deleteUser","userIndex","this","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref10","updateUserCounts","_ref11","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref12","key","value","humanValue","parseFileSize","resetUsers","setShowConfig","_ref13","setItem","JSON","stringify","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","actions","searchUsers","context","_ref14","offset","limit","search","api","generateOcsUrl","catch","isCancel","getUser","userId","_ref15","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getDisabledUsers","_ref16","_ref17","limitParam","getUsersFromList","_ref18","getUsersFromGroup","_ref19","groupid","groupId","getCapabilities","password_policy","minLength","_ref20","_ref21","_ref22","_ref23","_ref24","wipeUserDevices","addUser","_ref25","_ref26","dispatch","password","email","quota","language","manager","_ref27","userStatus","_ref28","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","isHTML","initCategories","categories","updateCount","updateCategories","categoriesPromise","gettingCategoriesPromise","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","Vue","loading","stopLoading","generateUrl","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","bundles","loadState","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","setServerData","serverData","getServerData","setAppConfig","use","Vuex","API_FAILURE","meta","store","useStore","Store","modules","settings","oc","strict","process","getLoggerBuilder","setApp","detectUser","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","_c","_self","_setupProxy","attrs","_v","extend","encodeReserveRE","encodeReserveReplacer","c","charCodeAt","toString","commaRE","encode","str","decode","decodeURIComponent","err","castQueryParamValue","String","parseQuery","query","res","split","param","parts","shift","val","join","stringifyQuery","obj","result","val2","x","trailingSlashRE","createRoute","record","redirectedFrom","router","clone","route","path","hash","fullPath","getFullPath","matched","formatMatch","freeze","START","parent","ref","_stringifyQuery","isSameRoute","onlyPath","isObjectEqual","aKeys","bKeys","every","i","aVal","bVal","handleRouteEntered","instances","instance","cbs","enteredCbs","i$1","_isBeingDestroyed","View","functional","props","type","default","render","_","children","routerView","h","$createElement","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","$vnode","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","component","configProps","fillPropsinData","components","registerRouteInstance","vm","current","hook","prepatch","vnode","componentInstance","init","propsToPass","config","resolveProps","resolvePath","relative","base","append","firstChar","charAt","stack","pop","segments","segment","cleanPath","isarray","arr","prototype","call","pathToRegexp_1","pathToRegexp","RegExp","match","prefix","delimiter","optional","repeat","partial","asterisk","pattern","attachKeys","regexpToRegexp","flags","arrayToRegexp","tokensToRegExp","parse","stringToRegexp","parse_1","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","PATH_REGEXP","tokens","index","defaultDelimiter","exec","m","escaped","slice","next","capture","modifier","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","pretty","TypeError","j","test","re","sensitive","end","endsWithDelimiter","compile","regexpCompileCache","create","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","params$1","rawPath","parsedPath","hashIndex","queryIndex","parsePath","basePath","extraQuery","_parseQuery","parsedQuery","resolveQuery","_Vue","noop","Link","to","required","tag","custom","Boolean","exact","exactPath","activeClass","exactActiveClass","ariaCurrentValue","event","this$1$1","$router","resolve","href","classes","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","target","queryIncludes","isIncludedRoute","handler","guardEvent","on","click","class","scopedSlot","$scopedSlots","$hasNormal","navigate","isActive","isExactActive","findAnchor","$slots","isStatic","aData","handler$1","event$1","aAttrs","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","currentTarget","getAttribute","preventDefault","child","inBrowser","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","parentRoute","pathList","pathMap","nameMap","addRouteRecord","l","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","alias","redirect","beforeEnter","childMatchAs","aliases","aliasRoute","createMatcher","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","hasOwnProperty","resolveRecordPath","aliasedMatch","aliasedRecord","addRoute","parentOrRoute","getRoutes","addRoutes","len","Time","performance","now","Date","genStateKey","toFixed","_key","getStateKey","setStateKey","positionStore","setupScroll","history","scrollRestoration","protocolAndPath","protocol","host","absolutePath","stateCopy","replaceState","addEventListener","handlePopState","removeEventListener","handleScroll","from","isPop","behavior","scrollBehavior","$nextTick","position","getScrollPosition","shouldScroll","scrollToPosition","saveScrollPosition","pageXOffset","y","pageYOffset","isValidPosition","isNumber","normalizePosition","v","hashStartsWithNumberRE","isObject","selector","el","document","getElementById","querySelector","docRect","documentElement","getBoundingClientRect","elRect","left","top","getElementPosition","style","scrollTo","ua","supportsPushState","navigator","userAgent","pushState","NavigationFailureType","redirected","aborted","cancelled","duplicated","createNavigationCancelledError","createRouterError","_isRouter","propertiesToLog","isError","isNavigationFailure","errorType","runQueue","queue","fn","cb","step","flatMapComponents","flatten","apply","hasSymbol","Symbol","toStringTag","once","called","args","History","baseEl","normalizeBase","pending","ready","readyCbs","readyErrorCbs","errorCbs","listeners","extractGuards","records","bind","reverse","guards","def","guard","extractGuard","bindGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","prev","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","max","Math","updated","activated","deactivated","resolveQueue","extractLeaveGuards","beforeHooks","extractUpdateHooks","hasAsync","cid","resolvedDef","__esModule","resolved","reason","msg","comp","iterator","createNavigationAbortedError","createNavigationRedirectedError","enterGuards","bindEnterGuard","extractEnterGuards","resolveHooks","setupListeners","teardown","cleanupListener","HTML5History","_startLocation","getLocation","__proto__","constructor","expectScroll","supportsScroll","handleRoutingEvent","go","n","fromRoute","getCurrentLocation","pathname","pathLowerCase","toLowerCase","baseLowerCase","HashHistory","fallback","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","targetIndex","VueRouter","matcher","mode","prototypeAccessors","configurable","$once","routeOrError","handleInitialScroll","_route","beforeEach","registerHook","beforeResolve","afterEach","back","forward","getMatchedComponents","createHref","normalizedTo","defineProperties","VueRouter$1","list","install","isDef","registerInstance","callVal","$options","_parentVnode","mixin","beforeCreate","_router","util","defineReactive","destroyed","defineProperty","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","START_LOCATION","AppStore","defineAsyncComponent","AppStoreNavigation","AppstoreSidebar","navigation","sidebar","Router","VTooltip","defaultHtml","sync","__webpack_nonce__","btoa","_getRequestToken","getRequestToken","PiniaVuePlugin","pinia","createPinia","SettingsApp","cloneRoute","exports","moduleName","registerModule","namespaced","transition","currentPath","isTimeTraveling","storeUnwatch","watch","afterEachUnHook","unregisterModule","setUid","uid","C","P","Yt","r","s","Number","floor","log","min","d","pow","parseFloat","toLocaleString","Jt","toLocaleLowerCase","replaceAll","round","k","g","p","N","NONE","CREATE","READ","UPDATE","DELETE","SHARE","ALL","Y","nc","V","_nc_dav_properties","L","_nc_dav_namespaces","sr","or","R","Folder","File","J","X","URL","startsWith","mtime","crtime","mime","size","permissions","owner","attributes","root","status","Q","NEW","FAILED","LOADING","LOCKED","D","_data","_attributes","_knownDavService","set","updateMtime","Reflect","deleteProperty","Proxy","encodedSource","origin","basename","extension","dirname","isDavRessource","fileid","move","rename","ye","_e","super","ee","te","ur","headers","setHeaders","requesttoken","patch","u","method","fetch","dr","async","getDirectoryContents","details","includeSelf","filename","ve","be","lastmod","parseInt","getcontentlength","hasPreview","O","isExist","isEmptyObject","merge","o","f","getValue","isName","getAllMatches","startIndex","lastIndex","nameRegexp","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","buildOptions","defaultOptions","ne","ie","Nt","bt","Et","prettify","yt","vt","se","Pt","xt","oe","K","E","indentBy","suppressUnpairedNode","suppressEmptyNode","endsWith","suppressBooleanAttributes","lastIndexOf","entities","Ft","format","Vt","oneListGroup","isAttribute","attrPrefixLen","St","processTextOrObjNode","Lt","indentate","Rt","tagEndChar","newLine","j2x","buildTextValNode","attrStr","buildObjectNode","arrayNodeName","buildAttrPairStr","replaceEntitiesValue","closeTag","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","loaded","__webpack_modules__","chunkIds","priority","notFulfilled","Infinity","fulfilled","getter","definition","enumerable","chunkId","all","reduce","promises","globalThis","Function","prop","done","script","needAttach","scripts","getElementsByTagName","createElement","charset","timeout","setAttribute","src","onScriptComplete","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","head","appendChild","nmd","paths","scriptUrl","importScripts","currentScript","baseURI","self","installedChunks","installedChunkData","promise","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=4293a8618362016b22ad","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/users-settings.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/logger.ts","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue","webpack:///nextcloud/apps/settings/src/views/SettingsApp.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/views/SettingsApp.vue?3a67","webpack:///nextcloud/apps/settings/src/router/routes.ts","webpack:///nextcloud/apps/settings/src/router/index.ts","webpack:///nextcloud/apps/settings/src/main-apps-users-management.ts","webpack:///nextcloud/node_modules/vue-router/dist/vue-router.esm.js","webpack:///nextcloud/node_modules/vuex-router-sync/index.js","webpack:///nextcloud/node_modules/@nextcloud/files/dist/index.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/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/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 = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\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\tscript.timeout = 120;\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 * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n * @author Stephan Orbaugh <stephan.orbaugh@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { parseFileSize } from '@nextcloud/files'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nimport api from './api.js'\nimport logger from '../logger.ts'\n\nconst localStorage = getBuilder('settings').persist(true).build()\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tdisabledUsersOffset: 0,\n\tdisabledUsersLimit: 25,\n\tuserCount: 0,\n\tshowConfig: {\n\t\tshowStoragePath: localStorage.getItem('account_settings__showStoragePath') === 'true',\n\t\tshowUserBackend: localStorage.getItem('account_settings__showUserBackend') === 'true',\n\t\tshowLastLogin: localStorage.getItem('account_settings__showLastLogin') === 'true',\n\t\tshowNewUserForm: localStorage.getItem('account_settings__showNewUserForm') === 'true',\n\t\tshowLanguages: localStorage.getItem('account_settings__showLanguages') === 'true',\n\t},\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\tconst existingUsers = state.users.map(({ id }) => id)\n\t\tconst newUsers = Object.values(usersObj)\n\t\t\t.filter(({ id }) => !existingUsers.includes(id))\n\n\t\tconst users = state.users.concat(newUsers)\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tupdateDisabledUsers(state, _usersObj) {\n\t\tstate.disabledUsersOffset += state.disabledUsersLimit\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.unshift(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tthis.commit('updateUserCounts', { user: state.users[userIndex], actionType: 'remove' })\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tconst user = response.data.ocs.data\n\t\tstate.users.unshift(user)\n\t\tthis.commit('updateUserCounts', { user, actionType: 'create' })\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\tthis.commit('updateUserCounts', { user, actionType: enabled ? 'enable' : 'disable' })\n\t},\n\t// update active/disabled counts, groups counts\n\tupdateUserCounts(state, { user, actionType }) {\n\t\t// 0 is a special value\n\t\tif (state.userCount === 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst disabledGroup = state.groups.find(group => group.id === 'disabled')\n\t\tswitch (actionType) {\n\t\tcase 'enable':\n\t\tcase 'disable':\n\t\t\tdisabledGroup.usercount += user.enabled ? -1 : 1 // update Disabled Users count\n\t\t\tstate.userCount += user.enabled ? 1 : -1 // update Active Users count\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\tgroup.disabled += user.enabled ? -1 : 1 // update group disabled count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'create':\n\t\t\tstate.userCount++ // increment Active Users count\n\n\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\tstate.groups\n\t\t\t\t\t.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t .usercount++ // increment group total count\n\t\t\t})\n\t\t\tbreak\n\t\tcase 'remove':\n\t\t\tif (user.enabled) {\n\t\t\t\tstate.userCount-- // decrement Active Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tif (!group) {\n\t\t\t\t\t\tconsole.warn('User group ' + userGroup + ' does not exist during user removal')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tgroup.usercount-- // decrement group total count\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdisabledGroup.usercount-- // decrement Disabled Users count\n\t\t\t\tuser.groups.forEach(userGroup => {\n\t\t\t\t\tconst group = state.groups.find(groupSearch => groupSearch.id === userGroup)\n\t\t\t\t\tgroup.disabled-- // decrement group disabled count\n\t\t\t\t})\n\t\t\t}\n\t\t\tbreak\n\t\tdefault:\n\t\t\tlogger.error(`Unknown action type in updateUserCounts: '${actionType}'`)\n\t\t\t// not throwing error to interrupt execution as this is not fatal\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = parseFileSize(value, true)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t\tstate.disabledUsersOffset = 0\n\t},\n\n\tsetShowConfig(state, { key, value }) {\n\t\tlocalStorage.setItem(`account_settings__${key}`, JSON.stringify(value))\n\t\tstate.showConfig[key] = value\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetDisabledUsersOffset(state) {\n\t\treturn state.disabledUsersOffset\n\t},\n\tgetDisabledUsersLimit(state) {\n\t\treturn state.disabledUsersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n\tgetShowConfig(state) {\n\t\treturn state.showConfig\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * search users\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @return {Promise}\n\t */\n\tsearchUsers(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search })).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get user details\n\t *\n\t * @param {object} context store context\n\t * @param {string} userId user id\n\t * @return {Promise}\n\t */\n\tgetUser(context, userId) {\n\t\treturn api.get(generateOcsUrl(`cloud/users/${userId}`)).catch((error) => {\n\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t})\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\n\t\t/**\n\t\t * Adding filters in the search bar such as in:files, in:users, etc.\n\t\t * collides with this particular search, so we need to remove them\n\t\t * here and leave only the original search query\n\t\t */\n\t\tsearch = search.replace(/in:[^\\s]+/g, '').trim()\n\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\t/**\n\t * Get disabled users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @return {Promise<number>}\n\t */\n\tasync getDisabledUsers(context, { offset, limit }) {\n\t\tconst url = generateOcsUrl('cloud/users/disabled?offset={offset}&limit={limit}', { offset, limit })\n\t\ttry {\n\t\t\tconst response = await api.get(url)\n\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\tif (usersCount > 0) {\n\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\tcontext.commit('updateDisabledUsers', response.data.ocs.data.users)\n\t\t\t}\n\t\t\treturn usersCount\n\t\t} catch (error) {\n\t\t\tcontext.commit('API_FAILURE', error)\n\t\t}\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (getCapabilities().password_policy && getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', getCapabilities().password_policy.minLength)\n\t\t\treturn getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @param {string} options.manager User manager\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language, manager }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language, manager })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname', 'manager']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tapps: [],\n\tbundles: loadState('settings', 'appstoreBundles', []),\n\tcategories: [],\n\tupdateCount: loadState('settings', 'appstoreUpdateCount', 0),\n\tloading: {},\n\tgettingCategoriesPromise: null,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tupdateCategories(state, categoriesPromise) {\n\t\tstate.gettingCategoriesPromise = categoriesPromise\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tsetInstallState(state, { appId, canInstall }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tif (app) {\n\t\t\tapp.canInstall = canInstall === true\n\t\t}\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetAppBundles(state) {\n\t\treturn state.bundles\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n\tgetCategoryById: (state) => (selectedCategoryId) => {\n\t\treturn state.categories.find((category) => category.id === selectedCategoryId)\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tshowError(t('settings', 'Error: This app cannot be enabled because it makes the server unstable'))\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\tcontext.dispatch('disableApp', { appId })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('setInstallState', { appId, canInstall: true })\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tasync getCategories(context, { shouldRefetchCategories = false } = {}) {\n\t\tif (shouldRefetchCategories || !context.state.gettingCategoriesPromise) {\n\t\t\tcontext.commit('startLoading', 'categories')\n\t\t\ttry {\n\t\t\t\tconst categoriesPromise = api.get(generateUrl('settings/apps/categories'))\n\t\t\t\tcontext.commit('updateCategories', categoriesPromise)\n\t\t\t\tconst categoriesPromiseResponse = await categoriesPromise\n\t\t\t\tif (categoriesPromiseResponse.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', categoriesPromiseResponse.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\treturn false\n\t\t\t} catch (error) {\n\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t}\n\t\t}\n\t\treturn context.state.gettingCategoriesPromise\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\n\nconst state = {\n\tserverData: loadState('settings', 'usersSettings', {}),\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api.js'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users.js'\nimport apps from './apps.js'\nimport settings from './users-settings.js'\nimport oc from './oc.js'\nimport { showError } from '@nextcloud/dialogs'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + message, { isHTML: true })\n\t\t} catch (e) {\n\t\t\tshowError(t('settings', 'An error occurred during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nlet store = null\n\nexport const useStore = () => {\n\tif (store === null) {\n\t\tstore = new Store({\n\t\t\tmodules: {\n\t\t\t\tusers,\n\t\t\t\tapps,\n\t\t\t\tsettings,\n\t\t\t\toc,\n\t\t\t},\n\t\t\tstrict: debug,\n\t\t\tmutations,\n\t\t})\n\t}\n\treturn store\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger';\nexport default getLoggerBuilder()\n .setApp('settings')\n .detectUser()\n .build();\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.NcContent,{attrs:{\"app-name\":\"settings\"}},[_c('router-view',{attrs:{\"name\":\"navigation\"}}),_vm._v(\" \"),_c('router-view'),_vm._v(\" \"),_c('router-view',{attrs:{\"name\":\"sidebar\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??clonedRuleSet-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.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-4.use[1]!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./SettingsApp.vue?vue&type=template&id=b0b62a76\"\nimport script from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./SettingsApp.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Dynamic loading\nconst AppStore = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStore.vue');\nconst AppStoreNavigation = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreNavigation.vue');\nconst AppStoreSidebar = () => import(/* webpackChunkName: 'settings-apps-view' */ '../views/AppStoreSidebar.vue');\nconst UserManagement = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagement.vue');\nconst UserManagementNavigation = () => import(/* webpackChunkName: 'settings-users' */ '../views/UserManagementNavigation.vue');\nconst routes = [\n {\n name: 'users',\n path: '/:index(index.php/)?settings/users',\n components: {\n default: UserManagement,\n navigation: UserManagementNavigation,\n },\n props: true,\n children: [\n {\n path: ':selectedGroup',\n name: 'group',\n },\n ],\n },\n {\n path: '/:index(index.php/)?settings/apps',\n name: 'apps',\n // redirect to our default route - the app discover section\n redirect: {\n name: 'apps-category',\n params: {\n category: 'discover',\n },\n },\n components: {\n default: AppStore,\n navigation: AppStoreNavigation,\n sidebar: AppStoreSidebar,\n },\n children: [\n {\n path: ':category',\n name: 'apps-category',\n children: [\n {\n path: ':id',\n name: 'apps-details',\n },\n ],\n },\n ],\n },\n];\nexport default routes;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport { generateUrl } from '@nextcloud/router';\nimport routes from './routes.ts';\nVue.use(Router);\nconst router = new Router({\n mode: 'history',\n // if index.php is in the url AND we got this far, then it's working:\n // let's keep using index.php in the url\n base: generateUrl(''),\n linkActiveClass: 'active',\n routes,\n});\nexport default router;\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { sync } from 'vuex-router-sync';\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n';\nimport SettingsApp from './views/SettingsApp.vue';\nimport router from './router/index.ts';\nimport { useStore } from './store/index.js';\nimport { getRequestToken } from '@nextcloud/auth';\nimport { PiniaVuePlugin, createPinia } from 'pinia';\nVue.use(VTooltip, { defaultHtml: false });\nconst store = useStore();\nsync(store, router);\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken() ?? '');\n// bind to window\nVue.prototype.t = t;\nVue.prototype.n = n;\nVue.use(PiniaVuePlugin);\nconst pinia = createPinia();\nexport default new Vue({\n router,\n store,\n pinia,\n render: h => h(SettingsApp),\n el: '#content',\n});\n","/*!\n * vue-router v3.6.5\n * (c) 2022 Evan You\n * @license MIT\n */\n/* */\n\nfunction assert (condition, message) {\n if (!condition) {\n throw new Error((\"[vue-router] \" + message))\n }\n}\n\nfunction warn (condition, message) {\n if (!condition) {\n typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n }\n}\n\nfunction extend (a, b) {\n for (var key in b) {\n a[key] = b[key];\n }\n return a\n}\n\n/* */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n .replace(encodeReserveRE, encodeReserveReplacer)\n .replace(commaRE, ','); };\n\nfunction decode (str) {\n try {\n return decodeURIComponent(str)\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"Error decoding \\\"\" + str + \"\\\". Leaving it intact.\"));\n }\n }\n return str\n}\n\nfunction resolveQuery (\n query,\n extraQuery,\n _parseQuery\n) {\n if ( extraQuery === void 0 ) extraQuery = {};\n\n var parse = _parseQuery || parseQuery;\n var parsedQuery;\n try {\n parsedQuery = parse(query || '');\n } catch (e) {\n process.env.NODE_ENV !== 'production' && warn(false, e.message);\n parsedQuery = {};\n }\n for (var key in extraQuery) {\n var value = extraQuery[key];\n parsedQuery[key] = Array.isArray(value)\n ? value.map(castQueryParamValue)\n : castQueryParamValue(value);\n }\n return parsedQuery\n}\n\nvar castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };\n\nfunction parseQuery (query) {\n var res = {};\n\n query = query.trim().replace(/^(\\?|#|&)/, '');\n\n if (!query) {\n return res\n }\n\n query.split('&').forEach(function (param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = decode(parts.shift());\n var val = parts.length > 0 ? decode(parts.join('=')) : null;\n\n if (res[key] === undefined) {\n res[key] = val;\n } else if (Array.isArray(res[key])) {\n res[key].push(val);\n } else {\n res[key] = [res[key], val];\n }\n });\n\n return res\n}\n\nfunction stringifyQuery (obj) {\n var res = obj\n ? Object.keys(obj)\n .map(function (key) {\n var val = obj[key];\n\n if (val === undefined) {\n return ''\n }\n\n if (val === null) {\n return encode(key)\n }\n\n if (Array.isArray(val)) {\n var result = [];\n val.forEach(function (val2) {\n if (val2 === undefined) {\n return\n }\n if (val2 === null) {\n result.push(encode(key));\n } else {\n result.push(encode(key) + '=' + encode(val2));\n }\n });\n return result.join('&')\n }\n\n return encode(key) + '=' + encode(val)\n })\n .filter(function (x) { return x.length > 0; })\n .join('&')\n : null;\n return res ? (\"?\" + res) : ''\n}\n\n/* */\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n record,\n location,\n redirectedFrom,\n router\n) {\n var stringifyQuery = router && router.options.stringifyQuery;\n\n var query = location.query || {};\n try {\n query = clone(query);\n } catch (e) {}\n\n var route = {\n name: location.name || (record && record.name),\n meta: (record && record.meta) || {},\n path: location.path || '/',\n hash: location.hash || '',\n query: query,\n params: location.params || {},\n fullPath: getFullPath(location, stringifyQuery),\n matched: record ? formatMatch(record) : []\n };\n if (redirectedFrom) {\n route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);\n }\n return Object.freeze(route)\n}\n\nfunction clone (value) {\n if (Array.isArray(value)) {\n return value.map(clone)\n } else if (value && typeof value === 'object') {\n var res = {};\n for (var key in value) {\n res[key] = clone(value[key]);\n }\n return res\n } else {\n return value\n }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n path: '/'\n});\n\nfunction formatMatch (record) {\n var res = [];\n while (record) {\n res.unshift(record);\n record = record.parent;\n }\n return res\n}\n\nfunction getFullPath (\n ref,\n _stringifyQuery\n) {\n var path = ref.path;\n var query = ref.query; if ( query === void 0 ) query = {};\n var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n var stringify = _stringifyQuery || stringifyQuery;\n return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b, onlyPath) {\n if (b === START) {\n return a === b\n } else if (!b) {\n return false\n } else if (a.path && b.path) {\n return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query))\n } else if (a.name && b.name) {\n return (\n a.name === b.name &&\n (onlyPath || (\n a.hash === b.hash &&\n isObjectEqual(a.query, b.query) &&\n isObjectEqual(a.params, b.params))\n )\n )\n } else {\n return false\n }\n}\n\nfunction isObjectEqual (a, b) {\n if ( a === void 0 ) a = {};\n if ( b === void 0 ) b = {};\n\n // handle null value #1566\n if (!a || !b) { return a === b }\n var aKeys = Object.keys(a).sort();\n var bKeys = Object.keys(b).sort();\n if (aKeys.length !== bKeys.length) {\n return false\n }\n return aKeys.every(function (key, i) {\n var aVal = a[key];\n var bKey = bKeys[i];\n if (bKey !== key) { return false }\n var bVal = b[key];\n // query values can be null and undefined\n if (aVal == null || bVal == null) { return aVal === bVal }\n // check nested equality\n if (typeof aVal === 'object' && typeof bVal === 'object') {\n return isObjectEqual(aVal, bVal)\n }\n return String(aVal) === String(bVal)\n })\n}\n\nfunction isIncludedRoute (current, target) {\n return (\n current.path.replace(trailingSlashRE, '/').indexOf(\n target.path.replace(trailingSlashRE, '/')\n ) === 0 &&\n (!target.hash || current.hash === target.hash) &&\n queryIncludes(current.query, target.query)\n )\n}\n\nfunction queryIncludes (current, target) {\n for (var key in target) {\n if (!(key in current)) {\n return false\n }\n }\n return true\n}\n\nfunction handleRouteEntered (route) {\n for (var i = 0; i < route.matched.length; i++) {\n var record = route.matched[i];\n for (var name in record.instances) {\n var instance = record.instances[name];\n var cbs = record.enteredCbs[name];\n if (!instance || !cbs) { continue }\n delete record.enteredCbs[name];\n for (var i$1 = 0; i$1 < cbs.length; i$1++) {\n if (!instance._isBeingDestroyed) { cbs[i$1](instance); }\n }\n }\n }\n}\n\nvar View = {\n name: 'RouterView',\n functional: true,\n props: {\n name: {\n type: String,\n default: 'default'\n }\n },\n render: function render (_, ref) {\n var props = ref.props;\n var children = ref.children;\n var parent = ref.parent;\n var data = ref.data;\n\n // used by devtools to display a router-view badge\n data.routerView = true;\n\n // directly use parent context's createElement() function\n // so that components rendered by router-view can resolve named slots\n var h = parent.$createElement;\n var name = props.name;\n var route = parent.$route;\n var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n // determine current view depth, also check to see if the tree\n // has been toggled inactive but kept-alive.\n var depth = 0;\n var inactive = false;\n while (parent && parent._routerRoot !== parent) {\n var vnodeData = parent.$vnode ? parent.$vnode.data : {};\n if (vnodeData.routerView) {\n depth++;\n }\n if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {\n inactive = true;\n }\n parent = parent.$parent;\n }\n data.routerViewDepth = depth;\n\n // render previous view if the tree is inactive and kept-alive\n if (inactive) {\n var cachedData = cache[name];\n var cachedComponent = cachedData && cachedData.component;\n if (cachedComponent) {\n // #2301\n // pass props\n if (cachedData.configProps) {\n fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);\n }\n return h(cachedComponent, data, children)\n } else {\n // render previous empty view\n return h()\n }\n }\n\n var matched = route.matched[depth];\n var component = matched && matched.components[name];\n\n // render empty node if no matched route or no config component\n if (!matched || !component) {\n cache[name] = null;\n return h()\n }\n\n // cache component\n cache[name] = { component: component };\n\n // attach instance registration hook\n // this will be called in the instance's injected lifecycle hooks\n data.registerRouteInstance = function (vm, val) {\n // val could be undefined for unregistration\n var current = matched.instances[name];\n if (\n (val && current !== vm) ||\n (!val && current === vm)\n ) {\n matched.instances[name] = val;\n }\n }\n\n // also register instance in prepatch hook\n // in case the same component instance is reused across different routes\n ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n matched.instances[name] = vnode.componentInstance;\n };\n\n // register instance in init hook\n // in case kept-alive component be actived when routes changed\n data.hook.init = function (vnode) {\n if (vnode.data.keepAlive &&\n vnode.componentInstance &&\n vnode.componentInstance !== matched.instances[name]\n ) {\n matched.instances[name] = vnode.componentInstance;\n }\n\n // if the route transition has already been confirmed then we weren't\n // able to call the cbs during confirmation as the component was not\n // registered yet, so we call it here.\n handleRouteEntered(route);\n };\n\n var configProps = matched.props && matched.props[name];\n // save route and configProps in cache\n if (configProps) {\n extend(cache[name], {\n route: route,\n configProps: configProps\n });\n fillPropsinData(component, data, route, configProps);\n }\n\n return h(component, data, children)\n }\n};\n\nfunction fillPropsinData (component, data, route, configProps) {\n // resolve props\n var propsToPass = data.props = resolveProps(route, configProps);\n if (propsToPass) {\n // clone to prevent mutation\n propsToPass = data.props = extend({}, propsToPass);\n // pass non-declared props as attrs\n var attrs = data.attrs = data.attrs || {};\n for (var key in propsToPass) {\n if (!component.props || !(key in component.props)) {\n attrs[key] = propsToPass[key];\n delete propsToPass[key];\n }\n }\n }\n}\n\nfunction resolveProps (route, config) {\n switch (typeof config) {\n case 'undefined':\n return\n case 'object':\n return config\n case 'function':\n return config(route)\n case 'boolean':\n return config ? route.params : undefined\n default:\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n \"expecting an object, function or boolean.\"\n );\n }\n }\n}\n\n/* */\n\nfunction resolvePath (\n relative,\n base,\n append\n) {\n var firstChar = relative.charAt(0);\n if (firstChar === '/') {\n return relative\n }\n\n if (firstChar === '?' || firstChar === '#') {\n return base + relative\n }\n\n var stack = base.split('/');\n\n // remove trailing segment if:\n // - not appending\n // - appending to trailing slash (last segment is empty)\n if (!append || !stack[stack.length - 1]) {\n stack.pop();\n }\n\n // resolve relative path\n var segments = relative.replace(/^\\//, '').split('/');\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n if (segment === '..') {\n stack.pop();\n } else if (segment !== '.') {\n stack.push(segment);\n }\n }\n\n // ensure leading slash\n if (stack[0] !== '') {\n stack.unshift('');\n }\n\n return stack.join('/')\n}\n\nfunction parsePath (path) {\n var hash = '';\n var query = '';\n\n var hashIndex = path.indexOf('#');\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex);\n path = path.slice(0, hashIndex);\n }\n\n var queryIndex = path.indexOf('?');\n if (queryIndex >= 0) {\n query = path.slice(queryIndex + 1);\n path = path.slice(0, queryIndex);\n }\n\n return {\n path: path,\n query: query,\n hash: hash\n }\n}\n\nfunction cleanPath (path) {\n return path.replace(/\\/(?:\\s*\\/)+/g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = [];\n var key = 0;\n var index = 0;\n var path = '';\n var defaultDelimiter = options && options.delimiter || '/';\n var res;\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0];\n var escaped = res[1];\n var offset = res.index;\n path += str.slice(index, offset);\n index = offset + m.length;\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1];\n continue\n }\n\n var next = str[index];\n var prefix = res[2];\n var name = res[3];\n var capture = res[4];\n var group = res[5];\n var modifier = res[6];\n var asterisk = res[7];\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path);\n path = '';\n }\n\n var partial = prefix != null && next != null && next !== prefix;\n var repeat = modifier === '+' || modifier === '*';\n var optional = modifier === '?' || modifier === '*';\n var delimiter = res[2] || defaultDelimiter;\n var pattern = capture || group;\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n });\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index);\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path);\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length);\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));\n }\n }\n\n return function (obj, opts) {\n var path = '';\n var data = obj || {};\n var options = opts || {};\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n path += token;\n\n continue\n }\n\n var value = data[token.name];\n var segment;\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix;\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j]);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment;\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment;\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys;\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n });\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = [];\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source);\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n var strict = options.strict;\n var end = options.end !== false;\n var route = '';\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (typeof token === 'string') {\n route += escapeString(token);\n } else {\n var prefix = escapeString(token.prefix);\n var capture = '(?:' + token.pattern + ')';\n\n keys.push(token);\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*';\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?';\n } else {\n capture = prefix + '(' + capture + ')?';\n }\n } else {\n capture = prefix + '(' + capture + ')';\n }\n\n route += capture;\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/');\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n }\n\n if (end) {\n route += '$';\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options);\n keys = [];\n }\n\n options = options || {};\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/* */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n path,\n params,\n routeMsg\n) {\n params = params || {};\n try {\n var filler =\n regexpCompileCache[path] ||\n (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n\n // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}\n // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string\n if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }\n\n return filler(params, { pretty: true })\n } catch (e) {\n if (process.env.NODE_ENV !== 'production') {\n // Fix #3072 no warn if `pathMatch` is string\n warn(typeof params.pathMatch === 'string', (\"missing param for \" + routeMsg + \": \" + (e.message)));\n }\n return ''\n } finally {\n // delete the 0 if it was added\n delete params[0];\n }\n}\n\n/* */\n\nfunction normalizeLocation (\n raw,\n current,\n append,\n router\n) {\n var next = typeof raw === 'string' ? { path: raw } : raw;\n // named target\n if (next._normalized) {\n return next\n } else if (next.name) {\n next = extend({}, raw);\n var params = next.params;\n if (params && typeof params === 'object') {\n next.params = extend({}, params);\n }\n return next\n }\n\n // relative params\n if (!next.path && next.params && current) {\n next = extend({}, next);\n next._normalized = true;\n var params$1 = extend(extend({}, current.params), next.params);\n if (current.name) {\n next.name = current.name;\n next.params = params$1;\n } else if (current.matched.length) {\n var rawPath = current.matched[current.matched.length - 1].path;\n next.path = fillParams(rawPath, params$1, (\"path \" + (current.path)));\n } else if (process.env.NODE_ENV !== 'production') {\n warn(false, \"relative params navigation requires a current route.\");\n }\n return next\n }\n\n var parsedPath = parsePath(next.path || '');\n var basePath = (current && current.path) || '/';\n var path = parsedPath.path\n ? resolvePath(parsedPath.path, basePath, append || next.append)\n : basePath;\n\n var query = resolveQuery(\n parsedPath.query,\n next.query,\n router && router.options.parseQuery\n );\n\n var hash = next.hash || parsedPath.hash;\n if (hash && hash.charAt(0) !== '#') {\n hash = \"#\" + hash;\n }\n\n return {\n _normalized: true,\n path: path,\n query: query,\n hash: hash\n }\n}\n\n/* */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar noop = function () {};\n\nvar warnedCustomSlot;\nvar warnedTagProp;\nvar warnedEventProp;\n\nvar Link = {\n name: 'RouterLink',\n props: {\n to: {\n type: toTypes,\n required: true\n },\n tag: {\n type: String,\n default: 'a'\n },\n custom: Boolean,\n exact: Boolean,\n exactPath: Boolean,\n append: Boolean,\n replace: Boolean,\n activeClass: String,\n exactActiveClass: String,\n ariaCurrentValue: {\n type: String,\n default: 'page'\n },\n event: {\n type: eventTypes,\n default: 'click'\n }\n },\n render: function render (h) {\n var this$1$1 = this;\n\n var router = this.$router;\n var current = this.$route;\n var ref = router.resolve(\n this.to,\n current,\n this.append\n );\n var location = ref.location;\n var route = ref.route;\n var href = ref.href;\n\n var classes = {};\n var globalActiveClass = router.options.linkActiveClass;\n var globalExactActiveClass = router.options.linkExactActiveClass;\n // Support global empty active class\n var activeClassFallback =\n globalActiveClass == null ? 'router-link-active' : globalActiveClass;\n var exactActiveClassFallback =\n globalExactActiveClass == null\n ? 'router-link-exact-active'\n : globalExactActiveClass;\n var activeClass =\n this.activeClass == null ? activeClassFallback : this.activeClass;\n var exactActiveClass =\n this.exactActiveClass == null\n ? exactActiveClassFallback\n : this.exactActiveClass;\n\n var compareTarget = route.redirectedFrom\n ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)\n : route;\n\n classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);\n classes[activeClass] = this.exact || this.exactPath\n ? classes[exactActiveClass]\n : isIncludedRoute(current, compareTarget);\n\n var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;\n\n var handler = function (e) {\n if (guardEvent(e)) {\n if (this$1$1.replace) {\n router.replace(location, noop);\n } else {\n router.push(location, noop);\n }\n }\n };\n\n var on = { click: guardEvent };\n if (Array.isArray(this.event)) {\n this.event.forEach(function (e) {\n on[e] = handler;\n });\n } else {\n on[this.event] = handler;\n }\n\n var data = { class: classes };\n\n var scopedSlot =\n !this.$scopedSlots.$hasNormal &&\n this.$scopedSlots.default &&\n this.$scopedSlots.default({\n href: href,\n route: route,\n navigate: handler,\n isActive: classes[activeClass],\n isExactActive: classes[exactActiveClass]\n });\n\n if (scopedSlot) {\n if (process.env.NODE_ENV !== 'production' && !this.custom) {\n !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\\n<router-link v-slot=\"{ navigate, href }\" custom></router-link>\\n');\n warnedCustomSlot = true;\n }\n if (scopedSlot.length === 1) {\n return scopedSlot[0]\n } else if (scopedSlot.length > 1 || !scopedSlot.length) {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false,\n (\"<router-link> with to=\\\"\" + (this.to) + \"\\\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.\")\n );\n }\n return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if ('tag' in this.$options.propsData && !warnedTagProp) {\n warn(\n false,\n \"<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedTagProp = true;\n }\n if ('event' in this.$options.propsData && !warnedEventProp) {\n warn(\n false,\n \"<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n );\n warnedEventProp = true;\n }\n }\n\n if (this.tag === 'a') {\n data.on = on;\n data.attrs = { href: href, 'aria-current': ariaCurrentValue };\n } else {\n // find the first <a> child and apply listener and href\n var a = findAnchor(this.$slots.default);\n if (a) {\n // in case the <a> is a static node\n a.isStatic = false;\n var aData = (a.data = extend({}, a.data));\n aData.on = aData.on || {};\n // transform existing events in both objects into arrays so we can push later\n for (var event in aData.on) {\n var handler$1 = aData.on[event];\n if (event in on) {\n aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];\n }\n }\n // append new listeners for router-link\n for (var event$1 in on) {\n if (event$1 in aData.on) {\n // on[event] is always a function\n aData.on[event$1].push(on[event$1]);\n } else {\n aData.on[event$1] = handler;\n }\n }\n\n var aAttrs = (a.data.attrs = extend({}, a.data.attrs));\n aAttrs.href = href;\n aAttrs['aria-current'] = ariaCurrentValue;\n } else {\n // doesn't have <a> child, apply listener to self\n data.on = on;\n }\n }\n\n return h(this.tag, data, this.$slots.default)\n }\n};\n\nfunction guardEvent (e) {\n // don't redirect with control keys\n if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n // don't redirect when preventDefault called\n if (e.defaultPrevented) { return }\n // don't redirect on right click\n if (e.button !== undefined && e.button !== 0) { return }\n // don't redirect if `target=\"_blank\"`\n if (e.currentTarget && e.currentTarget.getAttribute) {\n var target = e.currentTarget.getAttribute('target');\n if (/\\b_blank\\b/i.test(target)) { return }\n }\n // this may be a Weex event which doesn't have this method\n if (e.preventDefault) {\n e.preventDefault();\n }\n return true\n}\n\nfunction findAnchor (children) {\n if (children) {\n var child;\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n if (child.tag === 'a') {\n return child\n }\n if (child.children && (child = findAnchor(child.children))) {\n return child\n }\n }\n }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n if (install.installed && _Vue === Vue) { return }\n install.installed = true;\n\n _Vue = Vue;\n\n var isDef = function (v) { return v !== undefined; };\n\n var registerInstance = function (vm, callVal) {\n var i = vm.$options._parentVnode;\n if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n i(vm, callVal);\n }\n };\n\n Vue.mixin({\n beforeCreate: function beforeCreate () {\n if (isDef(this.$options.router)) {\n this._routerRoot = this;\n this._router = this.$options.router;\n this._router.init(this);\n Vue.util.defineReactive(this, '_route', this._router.history.current);\n } else {\n this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n }\n registerInstance(this, this);\n },\n destroyed: function destroyed () {\n registerInstance(this);\n }\n });\n\n Object.defineProperty(Vue.prototype, '$router', {\n get: function get () { return this._routerRoot._router }\n });\n\n Object.defineProperty(Vue.prototype, '$route', {\n get: function get () { return this._routerRoot._route }\n });\n\n Vue.component('RouterView', View);\n Vue.component('RouterLink', Link);\n\n var strats = Vue.config.optionMergeStrategies;\n // use the same hook merging strategy for route hooks\n strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/* */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/* */\n\nfunction createRouteMap (\n routes,\n oldPathList,\n oldPathMap,\n oldNameMap,\n parentRoute\n) {\n // the path list is used to control path matching priority\n var pathList = oldPathList || [];\n // $flow-disable-line\n var pathMap = oldPathMap || Object.create(null);\n // $flow-disable-line\n var nameMap = oldNameMap || Object.create(null);\n\n routes.forEach(function (route) {\n addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);\n });\n\n // ensure wildcard routes are always at the end\n for (var i = 0, l = pathList.length; i < l; i++) {\n if (pathList[i] === '*') {\n pathList.push(pathList.splice(i, 1)[0]);\n l--;\n i--;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n // warn if routes do not include leading slashes\n var found = pathList\n // check for missing leading slash\n .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });\n\n if (found.length > 0) {\n var pathNames = found.map(function (path) { return (\"- \" + path); }).join('\\n');\n warn(false, (\"Non-nested routes must include a leading slash character. Fix the following routes: \\n\" + pathNames));\n }\n }\n\n return {\n pathList: pathList,\n pathMap: pathMap,\n nameMap: nameMap\n }\n}\n\nfunction addRouteRecord (\n pathList,\n pathMap,\n nameMap,\n route,\n parent,\n matchAs\n) {\n var path = route.path;\n var name = route.name;\n if (process.env.NODE_ENV !== 'production') {\n assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n assert(\n typeof route.component !== 'string',\n \"route config \\\"component\\\" for path: \" + (String(\n path || name\n )) + \" cannot be a \" + \"string id. Use an actual component instead.\"\n );\n\n warn(\n // eslint-disable-next-line no-control-regex\n !/[^\\u0000-\\u007F]+/.test(path),\n \"Route with path \\\"\" + path + \"\\\" contains unencoded characters, make sure \" +\n \"your path is correctly encoded before passing it to the router. Use \" +\n \"encodeURI to encode static segments of your path.\"\n );\n }\n\n var pathToRegexpOptions =\n route.pathToRegexpOptions || {};\n var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);\n\n if (typeof route.caseSensitive === 'boolean') {\n pathToRegexpOptions.sensitive = route.caseSensitive;\n }\n\n var record = {\n path: normalizedPath,\n regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n components: route.components || { default: route.component },\n alias: route.alias\n ? typeof route.alias === 'string'\n ? [route.alias]\n : route.alias\n : [],\n instances: {},\n enteredCbs: {},\n name: name,\n parent: parent,\n matchAs: matchAs,\n redirect: route.redirect,\n beforeEnter: route.beforeEnter,\n meta: route.meta || {},\n props:\n route.props == null\n ? {}\n : route.components\n ? route.props\n : { default: route.props }\n };\n\n if (route.children) {\n // Warn if route is named, does not redirect and has a default child route.\n // If users navigate to this route by name, the default child will\n // not be rendered (GH Issue #629)\n if (process.env.NODE_ENV !== 'production') {\n if (\n route.name &&\n !route.redirect &&\n route.children.some(function (child) { return /^\\/?$/.test(child.path); })\n ) {\n warn(\n false,\n \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'}\\\"), \" +\n \"the default child route will not be rendered. Remove the name from \" +\n \"this route and use the name of the default child route for named \" +\n \"links instead.\"\n );\n }\n }\n route.children.forEach(function (child) {\n var childMatchAs = matchAs\n ? cleanPath((matchAs + \"/\" + (child.path)))\n : undefined;\n addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n });\n }\n\n if (!pathMap[record.path]) {\n pathList.push(record.path);\n pathMap[record.path] = record;\n }\n\n if (route.alias !== undefined) {\n var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];\n for (var i = 0; i < aliases.length; ++i) {\n var alias = aliases[i];\n if (process.env.NODE_ENV !== 'production' && alias === path) {\n warn(\n false,\n (\"Found an alias with the same value as the path: \\\"\" + path + \"\\\". You have to remove that alias. It will be ignored in development.\")\n );\n // skip in dev to make it work\n continue\n }\n\n var aliasRoute = {\n path: alias,\n children: route.children\n };\n addRouteRecord(\n pathList,\n pathMap,\n nameMap,\n aliasRoute,\n parent,\n record.path || '/' // matchAs\n );\n }\n }\n\n if (name) {\n if (!nameMap[name]) {\n nameMap[name] = record;\n } else if (process.env.NODE_ENV !== 'production' && !matchAs) {\n warn(\n false,\n \"Duplicate named routes definition: \" +\n \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n );\n }\n }\n}\n\nfunction compileRouteRegex (\n path,\n pathToRegexpOptions\n) {\n var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n if (process.env.NODE_ENV !== 'production') {\n var keys = Object.create(null);\n regex.keys.forEach(function (key) {\n warn(\n !keys[key.name],\n (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\")\n );\n keys[key.name] = true;\n });\n }\n return regex\n}\n\nfunction normalizePath (\n path,\n parent,\n strict\n) {\n if (!strict) { path = path.replace(/\\/$/, ''); }\n if (path[0] === '/') { return path }\n if (parent == null) { return path }\n return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/* */\n\n\n\nfunction createMatcher (\n routes,\n router\n) {\n var ref = createRouteMap(routes);\n var pathList = ref.pathList;\n var pathMap = ref.pathMap;\n var nameMap = ref.nameMap;\n\n function addRoutes (routes) {\n createRouteMap(routes, pathList, pathMap, nameMap);\n }\n\n function addRoute (parentOrRoute, route) {\n var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;\n // $flow-disable-line\n createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);\n\n // add aliases of parent\n if (parent && parent.alias.length) {\n createRouteMap(\n // $flow-disable-line route is defined if parent is\n parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),\n pathList,\n pathMap,\n nameMap,\n parent\n );\n }\n }\n\n function getRoutes () {\n return pathList.map(function (path) { return pathMap[path]; })\n }\n\n function match (\n raw,\n currentRoute,\n redirectedFrom\n ) {\n var location = normalizeLocation(raw, currentRoute, false, router);\n var name = location.name;\n\n if (name) {\n var record = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n }\n if (!record) { return _createRoute(null, location) }\n var paramNames = record.regex.keys\n .filter(function (key) { return !key.optional; })\n .map(function (key) { return key.name; });\n\n if (typeof location.params !== 'object') {\n location.params = {};\n }\n\n if (currentRoute && typeof currentRoute.params === 'object') {\n for (var key in currentRoute.params) {\n if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n location.params[key] = currentRoute.params[key];\n }\n }\n }\n\n location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n return _createRoute(record, location, redirectedFrom)\n } else if (location.path) {\n location.params = {};\n for (var i = 0; i < pathList.length; i++) {\n var path = pathList[i];\n var record$1 = pathMap[path];\n if (matchRoute(record$1.regex, location.path, location.params)) {\n return _createRoute(record$1, location, redirectedFrom)\n }\n }\n }\n // no match\n return _createRoute(null, location)\n }\n\n function redirect (\n record,\n location\n ) {\n var originalRedirect = record.redirect;\n var redirect = typeof originalRedirect === 'function'\n ? originalRedirect(createRoute(record, location, null, router))\n : originalRedirect;\n\n if (typeof redirect === 'string') {\n redirect = { path: redirect };\n }\n\n if (!redirect || typeof redirect !== 'object') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\n false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n );\n }\n return _createRoute(null, location)\n }\n\n var re = redirect;\n var name = re.name;\n var path = re.path;\n var query = location.query;\n var hash = location.hash;\n var params = location.params;\n query = re.hasOwnProperty('query') ? re.query : query;\n hash = re.hasOwnProperty('hash') ? re.hash : hash;\n params = re.hasOwnProperty('params') ? re.params : params;\n\n if (name) {\n // resolved named direct\n var targetRecord = nameMap[name];\n if (process.env.NODE_ENV !== 'production') {\n assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n }\n return match({\n _normalized: true,\n name: name,\n query: query,\n hash: hash,\n params: params\n }, undefined, location)\n } else if (path) {\n // 1. resolve relative redirect\n var rawPath = resolveRecordPath(path, record);\n // 2. resolve params\n var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n // 3. rematch with existing query and hash\n return match({\n _normalized: true,\n path: resolvedPath,\n query: query,\n hash: hash\n }, undefined, location)\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n }\n return _createRoute(null, location)\n }\n }\n\n function alias (\n record,\n location,\n matchAs\n ) {\n var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n var aliasedMatch = match({\n _normalized: true,\n path: aliasedPath\n });\n if (aliasedMatch) {\n var matched = aliasedMatch.matched;\n var aliasedRecord = matched[matched.length - 1];\n location.params = aliasedMatch.params;\n return _createRoute(aliasedRecord, location)\n }\n return _createRoute(null, location)\n }\n\n function _createRoute (\n record,\n location,\n redirectedFrom\n ) {\n if (record && record.redirect) {\n return redirect(record, redirectedFrom || location)\n }\n if (record && record.matchAs) {\n return alias(record, location, record.matchAs)\n }\n return createRoute(record, location, redirectedFrom, router)\n }\n\n return {\n match: match,\n addRoute: addRoute,\n getRoutes: getRoutes,\n addRoutes: addRoutes\n }\n}\n\nfunction matchRoute (\n regex,\n path,\n params\n) {\n var m = path.match(regex);\n\n if (!m) {\n return false\n } else if (!params) {\n return true\n }\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = regex.keys[i - 1];\n if (key) {\n // Fix #1994: using * with props: true generates a param named 0\n params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];\n }\n }\n\n return true\n}\n\nfunction resolveRecordPath (path, record) {\n return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/* */\n\n// use User Timing api (if present) for more accurate key precision\nvar Time =\n inBrowser && window.performance && window.performance.now\n ? window.performance\n : Date;\n\nfunction genStateKey () {\n return Time.now().toFixed(3)\n}\n\nvar _key = genStateKey();\n\nfunction getStateKey () {\n return _key\n}\n\nfunction setStateKey (key) {\n return (_key = key)\n}\n\n/* */\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n // Prevent browser scroll behavior on History popstate\n if ('scrollRestoration' in window.history) {\n window.history.scrollRestoration = 'manual';\n }\n // Fix for #1585 for Firefox\n // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678\n // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with\n // window.location.protocol + '//' + window.location.host\n // location.host contains the port and location.hostname doesn't\n var protocolAndPath = window.location.protocol + '//' + window.location.host;\n var absolutePath = window.location.href.replace(protocolAndPath, '');\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, window.history.state);\n stateCopy.key = getStateKey();\n window.history.replaceState(stateCopy, '', absolutePath);\n window.addEventListener('popstate', handlePopState);\n return function () {\n window.removeEventListener('popstate', handlePopState);\n }\n}\n\nfunction handleScroll (\n router,\n to,\n from,\n isPop\n) {\n if (!router.app) {\n return\n }\n\n var behavior = router.options.scrollBehavior;\n if (!behavior) {\n return\n }\n\n if (process.env.NODE_ENV !== 'production') {\n assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n }\n\n // wait until re-render finishes before scrolling\n router.app.$nextTick(function () {\n var position = getScrollPosition();\n var shouldScroll = behavior.call(\n router,\n to,\n from,\n isPop ? position : null\n );\n\n if (!shouldScroll) {\n return\n }\n\n if (typeof shouldScroll.then === 'function') {\n shouldScroll\n .then(function (shouldScroll) {\n scrollToPosition((shouldScroll), position);\n })\n .catch(function (err) {\n if (process.env.NODE_ENV !== 'production') {\n assert(false, err.toString());\n }\n });\n } else {\n scrollToPosition(shouldScroll, position);\n }\n });\n}\n\nfunction saveScrollPosition () {\n var key = getStateKey();\n if (key) {\n positionStore[key] = {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n }\n}\n\nfunction handlePopState (e) {\n saveScrollPosition();\n if (e.state && e.state.key) {\n setStateKey(e.state.key);\n }\n}\n\nfunction getScrollPosition () {\n var key = getStateKey();\n if (key) {\n return positionStore[key]\n }\n}\n\nfunction getElementPosition (el, offset) {\n var docEl = document.documentElement;\n var docRect = docEl.getBoundingClientRect();\n var elRect = el.getBoundingClientRect();\n return {\n x: elRect.left - docRect.left - offset.x,\n y: elRect.top - docRect.top - offset.y\n }\n}\n\nfunction isValidPosition (obj) {\n return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n y: isNumber(obj.y) ? obj.y : window.pageYOffset\n }\n}\n\nfunction normalizeOffset (obj) {\n return {\n x: isNumber(obj.x) ? obj.x : 0,\n y: isNumber(obj.y) ? obj.y : 0\n }\n}\n\nfunction isNumber (v) {\n return typeof v === 'number'\n}\n\nvar hashStartsWithNumberRE = /^#\\d/;\n\nfunction scrollToPosition (shouldScroll, position) {\n var isObject = typeof shouldScroll === 'object';\n if (isObject && typeof shouldScroll.selector === 'string') {\n // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]\n // but at the same time, it doesn't make much sense to select an element with an id and an extra selector\n var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line\n ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line\n : document.querySelector(shouldScroll.selector);\n\n if (el) {\n var offset =\n shouldScroll.offset && typeof shouldScroll.offset === 'object'\n ? shouldScroll.offset\n : {};\n offset = normalizeOffset(offset);\n position = getElementPosition(el, offset);\n } else if (isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n } else if (isObject && isValidPosition(shouldScroll)) {\n position = normalizePosition(shouldScroll);\n }\n\n if (position) {\n // $flow-disable-line\n if ('scrollBehavior' in document.documentElement.style) {\n window.scrollTo({\n left: position.x,\n top: position.y,\n // $flow-disable-line\n behavior: shouldScroll.behavior\n });\n } else {\n window.scrollTo(position.x, position.y);\n }\n }\n}\n\n/* */\n\nvar supportsPushState =\n inBrowser &&\n (function () {\n var ua = window.navigator.userAgent;\n\n if (\n (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n ua.indexOf('Mobile Safari') !== -1 &&\n ua.indexOf('Chrome') === -1 &&\n ua.indexOf('Windows Phone') === -1\n ) {\n return false\n }\n\n return window.history && typeof window.history.pushState === 'function'\n })();\n\nfunction pushState (url, replace) {\n saveScrollPosition();\n // try...catch the pushState call to get around Safari\n // DOM Exception 18 where it limits to 100 pushState calls\n var history = window.history;\n try {\n if (replace) {\n // preserve existing history state as it could be overriden by the user\n var stateCopy = extend({}, history.state);\n stateCopy.key = getStateKey();\n history.replaceState(stateCopy, '', url);\n } else {\n history.pushState({ key: setStateKey(genStateKey()) }, '', url);\n }\n } catch (e) {\n window.location[replace ? 'replace' : 'assign'](url);\n }\n}\n\nfunction replaceState (url) {\n pushState(url, true);\n}\n\n// When changing thing, also edit router.d.ts\nvar NavigationFailureType = {\n redirected: 2,\n aborted: 4,\n cancelled: 8,\n duplicated: 16\n};\n\nfunction createNavigationRedirectedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.redirected,\n (\"Redirected when going from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (stringifyRoute(\n to\n )) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createNavigationDuplicatedError (from, to) {\n var error = createRouterError(\n from,\n to,\n NavigationFailureType.duplicated,\n (\"Avoided redundant navigation to current location: \\\"\" + (from.fullPath) + \"\\\".\")\n );\n // backwards compatible with the first introduction of Errors\n error.name = 'NavigationDuplicated';\n return error\n}\n\nfunction createNavigationCancelledError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.cancelled,\n (\"Navigation cancelled from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" with a new navigation.\")\n )\n}\n\nfunction createNavigationAbortedError (from, to) {\n return createRouterError(\n from,\n to,\n NavigationFailureType.aborted,\n (\"Navigation aborted from \\\"\" + (from.fullPath) + \"\\\" to \\\"\" + (to.fullPath) + \"\\\" via a navigation guard.\")\n )\n}\n\nfunction createRouterError (from, to, type, message) {\n var error = new Error(message);\n error._isRouter = true;\n error.from = from;\n error.to = to;\n error.type = type;\n\n return error\n}\n\nvar propertiesToLog = ['params', 'query', 'hash'];\n\nfunction stringifyRoute (to) {\n if (typeof to === 'string') { return to }\n if ('path' in to) { return to.path }\n var location = {};\n propertiesToLog.forEach(function (key) {\n if (key in to) { location[key] = to[key]; }\n });\n return JSON.stringify(location, null, 2)\n}\n\nfunction isError (err) {\n return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nfunction isNavigationFailure (err, errorType) {\n return (\n isError(err) &&\n err._isRouter &&\n (errorType == null || err.type === errorType)\n )\n}\n\n/* */\n\nfunction runQueue (queue, fn, cb) {\n var step = function (index) {\n if (index >= queue.length) {\n cb();\n } else {\n if (queue[index]) {\n fn(queue[index], function () {\n step(index + 1);\n });\n } else {\n step(index + 1);\n }\n }\n };\n step(0);\n}\n\n/* */\n\nfunction resolveAsyncComponents (matched) {\n return function (to, from, next) {\n var hasAsync = false;\n var pending = 0;\n var error = null;\n\n flatMapComponents(matched, function (def, _, match, key) {\n // if it's a function and doesn't have cid attached,\n // assume it's an async component resolve function.\n // we are not using Vue's default async resolving mechanism because\n // we want to halt the navigation until the incoming component has been\n // resolved.\n if (typeof def === 'function' && def.cid === undefined) {\n hasAsync = true;\n pending++;\n\n var resolve = once(function (resolvedDef) {\n if (isESModule(resolvedDef)) {\n resolvedDef = resolvedDef.default;\n }\n // save resolved on async factory in case it's used elsewhere\n def.resolved = typeof resolvedDef === 'function'\n ? resolvedDef\n : _Vue.extend(resolvedDef);\n match.components[key] = resolvedDef;\n pending--;\n if (pending <= 0) {\n next();\n }\n });\n\n var reject = once(function (reason) {\n var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n process.env.NODE_ENV !== 'production' && warn(false, msg);\n if (!error) {\n error = isError(reason)\n ? reason\n : new Error(msg);\n next(error);\n }\n });\n\n var res;\n try {\n res = def(resolve, reject);\n } catch (e) {\n reject(e);\n }\n if (res) {\n if (typeof res.then === 'function') {\n res.then(resolve, reject);\n } else {\n // new syntax in Vue 2.3\n var comp = res.component;\n if (comp && typeof comp.then === 'function') {\n comp.then(resolve, reject);\n }\n }\n }\n }\n });\n\n if (!hasAsync) { next(); }\n }\n}\n\nfunction flatMapComponents (\n matched,\n fn\n) {\n return flatten(matched.map(function (m) {\n return Object.keys(m.components).map(function (key) { return fn(\n m.components[key],\n m.instances[key],\n m, key\n ); })\n }))\n}\n\nfunction flatten (arr) {\n return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n typeof Symbol === 'function' &&\n typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n var called = false;\n return function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (called) { return }\n called = true;\n return fn.apply(this, args)\n }\n}\n\n/* */\n\nvar History = function History (router, base) {\n this.router = router;\n this.base = normalizeBase(base);\n // start with a route object that stands for \"nowhere\"\n this.current = START;\n this.pending = null;\n this.ready = false;\n this.readyCbs = [];\n this.readyErrorCbs = [];\n this.errorCbs = [];\n this.listeners = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n if (this.ready) {\n cb();\n } else {\n this.readyCbs.push(cb);\n if (errorCb) {\n this.readyErrorCbs.push(errorCb);\n }\n }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (\n location,\n onComplete,\n onAbort\n) {\n var this$1$1 = this;\n\n var route;\n // catch redirect option https://github.com/vuejs/vue-router/issues/3201\n try {\n route = this.router.match(location, this.current);\n } catch (e) {\n this.errorCbs.forEach(function (cb) {\n cb(e);\n });\n // Exception should still be thrown\n throw e\n }\n var prev = this.current;\n this.confirmTransition(\n route,\n function () {\n this$1$1.updateRoute(route);\n onComplete && onComplete(route);\n this$1$1.ensureURL();\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n\n // fire ready cbs once\n if (!this$1$1.ready) {\n this$1$1.ready = true;\n this$1$1.readyCbs.forEach(function (cb) {\n cb(route);\n });\n }\n },\n function (err) {\n if (onAbort) {\n onAbort(err);\n }\n if (err && !this$1$1.ready) {\n // Initial redirection should not mark the history as ready yet\n // because it's triggered by the redirection instead\n // https://github.com/vuejs/vue-router/issues/3225\n // https://github.com/vuejs/vue-router/issues/3331\n if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {\n this$1$1.ready = true;\n this$1$1.readyErrorCbs.forEach(function (cb) {\n cb(err);\n });\n }\n }\n }\n );\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n var this$1$1 = this;\n\n var current = this.current;\n this.pending = route;\n var abort = function (err) {\n // changed after adding errors with\n // https://github.com/vuejs/vue-router/pull/3047 before that change,\n // redirect and aborted navigation would produce an err == null\n if (!isNavigationFailure(err) && isError(err)) {\n if (this$1$1.errorCbs.length) {\n this$1$1.errorCbs.forEach(function (cb) {\n cb(err);\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'uncaught error during route navigation:');\n }\n console.error(err);\n }\n }\n onAbort && onAbort(err);\n };\n var lastRouteIndex = route.matched.length - 1;\n var lastCurrentIndex = current.matched.length - 1;\n if (\n isSameRoute(route, current) &&\n // in the case the route map has been dynamically appended to\n lastRouteIndex === lastCurrentIndex &&\n route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]\n ) {\n this.ensureURL();\n if (route.hash) {\n handleScroll(this.router, current, route, false);\n }\n return abort(createNavigationDuplicatedError(current, route))\n }\n\n var ref = resolveQueue(\n this.current.matched,\n route.matched\n );\n var updated = ref.updated;\n var deactivated = ref.deactivated;\n var activated = ref.activated;\n\n var queue = [].concat(\n // in-component leave guards\n extractLeaveGuards(deactivated),\n // global before hooks\n this.router.beforeHooks,\n // in-component update hooks\n extractUpdateHooks(updated),\n // in-config enter guards\n activated.map(function (m) { return m.beforeEnter; }),\n // async components\n resolveAsyncComponents(activated)\n );\n\n var iterator = function (hook, next) {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n try {\n hook(route, current, function (to) {\n if (to === false) {\n // next(false) -> abort navigation, ensure current URL\n this$1$1.ensureURL(true);\n abort(createNavigationAbortedError(current, route));\n } else if (isError(to)) {\n this$1$1.ensureURL(true);\n abort(to);\n } else if (\n typeof to === 'string' ||\n (typeof to === 'object' &&\n (typeof to.path === 'string' || typeof to.name === 'string'))\n ) {\n // next('/') or next({ path: '/' }) -> redirect\n abort(createNavigationRedirectedError(current, route));\n if (typeof to === 'object' && to.replace) {\n this$1$1.replace(to);\n } else {\n this$1$1.push(to);\n }\n } else {\n // confirm transition and pass on the value\n next(to);\n }\n });\n } catch (e) {\n abort(e);\n }\n };\n\n runQueue(queue, iterator, function () {\n // wait until async components are resolved before\n // extracting in-component enter guards\n var enterGuards = extractEnterGuards(activated);\n var queue = enterGuards.concat(this$1$1.router.resolveHooks);\n runQueue(queue, iterator, function () {\n if (this$1$1.pending !== route) {\n return abort(createNavigationCancelledError(current, route))\n }\n this$1$1.pending = null;\n onComplete(route);\n if (this$1$1.router.app) {\n this$1$1.router.app.$nextTick(function () {\n handleRouteEntered(route);\n });\n }\n });\n });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n this.current = route;\n this.cb && this.cb(route);\n};\n\nHistory.prototype.setupListeners = function setupListeners () {\n // Default implementation is empty\n};\n\nHistory.prototype.teardown = function teardown () {\n // clean up event listeners\n // https://github.com/vuejs/vue-router/issues/2341\n this.listeners.forEach(function (cleanupListener) {\n cleanupListener();\n });\n this.listeners = [];\n\n // reset current history route\n // https://github.com/vuejs/vue-router/issues/3294\n this.current = START;\n this.pending = null;\n};\n\nfunction normalizeBase (base) {\n if (!base) {\n if (inBrowser) {\n // respect <base> tag\n var baseEl = document.querySelector('base');\n base = (baseEl && baseEl.getAttribute('href')) || '/';\n // strip full URL origin\n base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n } else {\n base = '/';\n }\n }\n // make sure there's the starting slash\n if (base.charAt(0) !== '/') {\n base = '/' + base;\n }\n // remove trailing slash\n return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n current,\n next\n) {\n var i;\n var max = Math.max(current.length, next.length);\n for (i = 0; i < max; i++) {\n if (current[i] !== next[i]) {\n break\n }\n }\n return {\n updated: next.slice(0, i),\n activated: next.slice(i),\n deactivated: current.slice(i)\n }\n}\n\nfunction extractGuards (\n records,\n name,\n bind,\n reverse\n) {\n var guards = flatMapComponents(records, function (def, instance, match, key) {\n var guard = extractGuard(def, name);\n if (guard) {\n return Array.isArray(guard)\n ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n : bind(guard, instance, match, key)\n }\n });\n return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n def,\n key\n) {\n if (typeof def !== 'function') {\n // extend now so that global mixins are applied.\n def = _Vue.extend(def);\n }\n return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n if (instance) {\n return function boundRouteGuard () {\n return guard.apply(instance, arguments)\n }\n }\n}\n\nfunction extractEnterGuards (\n activated\n) {\n return extractGuards(\n activated,\n 'beforeRouteEnter',\n function (guard, _, match, key) {\n return bindEnterGuard(guard, match, key)\n }\n )\n}\n\nfunction bindEnterGuard (\n guard,\n match,\n key\n) {\n return function routeEnterGuard (to, from, next) {\n return guard(to, from, function (cb) {\n if (typeof cb === 'function') {\n if (!match.enteredCbs[key]) {\n match.enteredCbs[key] = [];\n }\n match.enteredCbs[key].push(cb);\n }\n next(cb);\n })\n }\n}\n\n/* */\n\nvar HTML5History = /*@__PURE__*/(function (History) {\n function HTML5History (router, base) {\n History.call(this, router, base);\n\n this._startLocation = getLocation(this.base);\n }\n\n if ( History ) HTML5History.__proto__ = History;\n HTML5History.prototype = Object.create( History && History.prototype );\n HTML5History.prototype.constructor = HTML5History;\n\n HTML5History.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n\n // Avoiding first `popstate` event dispatched in some browsers but first\n // history route not updated since async guard at the same time.\n var location = getLocation(this$1$1.base);\n if (this$1$1.current === START && location === this$1$1._startLocation) {\n return\n }\n\n this$1$1.transitionTo(location, function (route) {\n if (supportsScroll) {\n handleScroll(router, route, current, true);\n }\n });\n };\n window.addEventListener('popstate', handleRoutingEvent);\n this.listeners.push(function () {\n window.removeEventListener('popstate', handleRoutingEvent);\n });\n };\n\n HTML5History.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n pushState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(location, function (route) {\n replaceState(cleanPath(this$1$1.base + route.fullPath));\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n }, onAbort);\n };\n\n HTML5History.prototype.ensureURL = function ensureURL (push) {\n if (getLocation(this.base) !== this.current.fullPath) {\n var current = cleanPath(this.base + this.current.fullPath);\n push ? pushState(current) : replaceState(current);\n }\n };\n\n HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n return getLocation(this.base)\n };\n\n return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n var path = window.location.pathname;\n var pathLowerCase = path.toLowerCase();\n var baseLowerCase = base.toLowerCase();\n // base=\"/a\" shouldn't turn path=\"/app\" into \"/a/pp\"\n // https://github.com/vuejs/vue-router/issues/3555\n // so we ensure the trailing slash in the base\n if (base && ((pathLowerCase === baseLowerCase) ||\n (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {\n path = path.slice(base.length);\n }\n return (path || '/') + window.location.search + window.location.hash\n}\n\n/* */\n\nvar HashHistory = /*@__PURE__*/(function (History) {\n function HashHistory (router, base, fallback) {\n History.call(this, router, base);\n // check history fallback deeplinking\n if (fallback && checkFallback(this.base)) {\n return\n }\n ensureSlash();\n }\n\n if ( History ) HashHistory.__proto__ = History;\n HashHistory.prototype = Object.create( History && History.prototype );\n HashHistory.prototype.constructor = HashHistory;\n\n // this is delayed until the app mounts\n // to avoid the hashchange listener being fired too early\n HashHistory.prototype.setupListeners = function setupListeners () {\n var this$1$1 = this;\n\n if (this.listeners.length > 0) {\n return\n }\n\n var router = this.router;\n var expectScroll = router.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll) {\n this.listeners.push(setupScroll());\n }\n\n var handleRoutingEvent = function () {\n var current = this$1$1.current;\n if (!ensureSlash()) {\n return\n }\n this$1$1.transitionTo(getHash(), function (route) {\n if (supportsScroll) {\n handleScroll(this$1$1.router, route, current, true);\n }\n if (!supportsPushState) {\n replaceHash(route.fullPath);\n }\n });\n };\n var eventType = supportsPushState ? 'popstate' : 'hashchange';\n window.addEventListener(\n eventType,\n handleRoutingEvent\n );\n this.listeners.push(function () {\n window.removeEventListener(eventType, handleRoutingEvent);\n });\n };\n\n HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n pushHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n var ref = this;\n var fromRoute = ref.current;\n this.transitionTo(\n location,\n function (route) {\n replaceHash(route.fullPath);\n handleScroll(this$1$1.router, route, fromRoute, false);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n HashHistory.prototype.go = function go (n) {\n window.history.go(n);\n };\n\n HashHistory.prototype.ensureURL = function ensureURL (push) {\n var current = this.current.fullPath;\n if (getHash() !== current) {\n push ? pushHash(current) : replaceHash(current);\n }\n };\n\n HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n return getHash()\n };\n\n return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n var location = getLocation(base);\n if (!/^\\/#/.test(location)) {\n window.location.replace(cleanPath(base + '/#' + location));\n return true\n }\n}\n\nfunction ensureSlash () {\n var path = getHash();\n if (path.charAt(0) === '/') {\n return true\n }\n replaceHash('/' + path);\n return false\n}\n\nfunction getHash () {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var index = href.indexOf('#');\n // empty path\n if (index < 0) { return '' }\n\n href = href.slice(index + 1);\n\n return href\n}\n\nfunction getUrl (path) {\n var href = window.location.href;\n var i = href.indexOf('#');\n var base = i >= 0 ? href.slice(0, i) : href;\n return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n if (supportsPushState) {\n pushState(getUrl(path));\n } else {\n window.location.hash = path;\n }\n}\n\nfunction replaceHash (path) {\n if (supportsPushState) {\n replaceState(getUrl(path));\n } else {\n window.location.replace(getUrl(path));\n }\n}\n\n/* */\n\nvar AbstractHistory = /*@__PURE__*/(function (History) {\n function AbstractHistory (router, base) {\n History.call(this, router, base);\n this.stack = [];\n this.index = -1;\n }\n\n if ( History ) AbstractHistory.__proto__ = History;\n AbstractHistory.prototype = Object.create( History && History.prototype );\n AbstractHistory.prototype.constructor = AbstractHistory;\n\n AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);\n this$1$1.index++;\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n this.transitionTo(\n location,\n function (route) {\n this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);\n onComplete && onComplete(route);\n },\n onAbort\n );\n };\n\n AbstractHistory.prototype.go = function go (n) {\n var this$1$1 = this;\n\n var targetIndex = this.index + n;\n if (targetIndex < 0 || targetIndex >= this.stack.length) {\n return\n }\n var route = this.stack[targetIndex];\n this.confirmTransition(\n route,\n function () {\n var prev = this$1$1.current;\n this$1$1.index = targetIndex;\n this$1$1.updateRoute(route);\n this$1$1.router.afterHooks.forEach(function (hook) {\n hook && hook(route, prev);\n });\n },\n function (err) {\n if (isNavigationFailure(err, NavigationFailureType.duplicated)) {\n this$1$1.index = targetIndex;\n }\n }\n );\n };\n\n AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n var current = this.stack[this.stack.length - 1];\n return current ? current.fullPath : '/'\n };\n\n AbstractHistory.prototype.ensureURL = function ensureURL () {\n // noop\n };\n\n return AbstractHistory;\n}(History));\n\n/* */\n\n\n\nvar VueRouter = function VueRouter (options) {\n if ( options === void 0 ) options = {};\n\n if (process.env.NODE_ENV !== 'production') {\n warn(this instanceof VueRouter, \"Router must be called with the new operator.\");\n }\n this.app = null;\n this.apps = [];\n this.options = options;\n this.beforeHooks = [];\n this.resolveHooks = [];\n this.afterHooks = [];\n this.matcher = createMatcher(options.routes || [], this);\n\n var mode = options.mode || 'hash';\n this.fallback =\n mode === 'history' && !supportsPushState && options.fallback !== false;\n if (this.fallback) {\n mode = 'hash';\n }\n if (!inBrowser) {\n mode = 'abstract';\n }\n this.mode = mode;\n\n switch (mode) {\n case 'history':\n this.history = new HTML5History(this, options.base);\n break\n case 'hash':\n this.history = new HashHistory(this, options.base, this.fallback);\n break\n case 'abstract':\n this.history = new AbstractHistory(this, options.base);\n break\n default:\n if (process.env.NODE_ENV !== 'production') {\n assert(false, (\"invalid mode: \" + mode));\n }\n }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (raw, current, redirectedFrom) {\n return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n var this$1$1 = this;\n\n process.env.NODE_ENV !== 'production' &&\n assert(\n install.installed,\n \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n \"before creating root instance.\"\n );\n\n this.apps.push(app);\n\n // set up app destroyed handler\n // https://github.com/vuejs/vue-router/issues/2639\n app.$once('hook:destroyed', function () {\n // clean out app from this.apps array once destroyed\n var index = this$1$1.apps.indexOf(app);\n if (index > -1) { this$1$1.apps.splice(index, 1); }\n // ensure we still have a main app or null if no apps\n // we do not release the router so it can be reused\n if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }\n\n if (!this$1$1.app) { this$1$1.history.teardown(); }\n });\n\n // main app previously initialized\n // return as we don't need to set up new history listener\n if (this.app) {\n return\n }\n\n this.app = app;\n\n var history = this.history;\n\n if (history instanceof HTML5History || history instanceof HashHistory) {\n var handleInitialScroll = function (routeOrError) {\n var from = history.current;\n var expectScroll = this$1$1.options.scrollBehavior;\n var supportsScroll = supportsPushState && expectScroll;\n\n if (supportsScroll && 'fullPath' in routeOrError) {\n handleScroll(this$1$1, routeOrError, from, false);\n }\n };\n var setupListeners = function (routeOrError) {\n history.setupListeners();\n handleInitialScroll(routeOrError);\n };\n history.transitionTo(\n history.getCurrentLocation(),\n setupListeners,\n setupListeners\n );\n }\n\n history.listen(function (route) {\n this$1$1.apps.forEach(function (app) {\n app._route = route;\n });\n });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.push(location, resolve, reject);\n })\n } else {\n this.history.push(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n var this$1$1 = this;\n\n // $flow-disable-line\n if (!onComplete && !onAbort && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n this$1$1.history.replace(location, resolve, reject);\n })\n } else {\n this.history.replace(location, onComplete, onAbort);\n }\n};\n\nVueRouter.prototype.go = function go (n) {\n this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n var route = to\n ? to.matched\n ? to\n : this.resolve(to).route\n : this.currentRoute;\n if (!route) {\n return []\n }\n return [].concat.apply(\n [],\n route.matched.map(function (m) {\n return Object.keys(m.components).map(function (key) {\n return m.components[key]\n })\n })\n )\n};\n\nVueRouter.prototype.resolve = function resolve (\n to,\n current,\n append\n) {\n current = current || this.history.current;\n var location = normalizeLocation(to, current, append, this);\n var route = this.match(location, current);\n var fullPath = route.redirectedFrom || route.fullPath;\n var base = this.history.base;\n var href = createHref(base, fullPath, this.mode);\n return {\n location: location,\n route: route,\n href: href,\n // for backwards compat\n normalizedTo: location,\n resolved: route\n }\n};\n\nVueRouter.prototype.getRoutes = function getRoutes () {\n return this.matcher.getRoutes()\n};\n\nVueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {\n this.matcher.addRoute(parentOrRoute, route);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n if (process.env.NODE_ENV !== 'production') {\n warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');\n }\n this.matcher.addRoutes(routes);\n if (this.history.current !== START) {\n this.history.transitionTo(this.history.getCurrentLocation());\n }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nvar VueRouter$1 = VueRouter;\n\nfunction registerHook (list, fn) {\n list.push(fn);\n return function () {\n var i = list.indexOf(fn);\n if (i > -1) { list.splice(i, 1); }\n }\n}\n\nfunction createHref (base, fullPath, mode) {\n var path = mode === 'hash' ? '#' + fullPath : fullPath;\n return base ? cleanPath(base + '/' + path) : path\n}\n\n// We cannot remove this as it would be a breaking change\nVueRouter.install = install;\nVueRouter.version = '3.6.5';\nVueRouter.isNavigationFailure = isNavigationFailure;\nVueRouter.NavigationFailureType = NavigationFailureType;\nVueRouter.START_LOCATION = START;\n\nif (inBrowser && window.Vue) {\n window.Vue.use(VueRouter);\n}\n\nvar version = '3.6.5';\n\nexport { NavigationFailureType, Link as RouterLink, View as RouterView, START as START_LOCATION, VueRouter$1 as default, isNavigationFailure, version };\n","exports.sync = function (store, router, options) {\n var moduleName = (options || {}).moduleName || 'route'\n\n store.registerModule(moduleName, {\n namespaced: true,\n state: cloneRoute(router.currentRoute),\n mutations: {\n 'ROUTE_CHANGED': function ROUTE_CHANGED (state, transition) {\n store.state[moduleName] = cloneRoute(transition.to, transition.from)\n }\n }\n })\n\n var isTimeTraveling = false\n var currentPath\n\n // sync router on store change\n var storeUnwatch = store.watch(\n function (state) { return state[moduleName]; },\n function (route) {\n var fullPath = route.fullPath;\n if (fullPath === currentPath) {\n return\n }\n if (currentPath != null) {\n isTimeTraveling = true\n router.push(route)\n }\n currentPath = fullPath\n },\n { sync: true }\n )\n\n // sync store on router navigation\n var afterEachUnHook = router.afterEach(function (to, from) {\n if (isTimeTraveling) {\n isTimeTraveling = false\n return\n }\n currentPath = to.fullPath\n store.commit(moduleName + '/ROUTE_CHANGED', { to: to, from: from })\n })\n\n return function unsync () {\n // On unsync, remove router hook\n if (afterEachUnHook != null) {\n afterEachUnHook()\n }\n\n // On unsync, remove store watch\n if (storeUnwatch != null) {\n storeUnwatch()\n }\n\n // On unsync, unregister Module with store\n store.unregisterModule(moduleName)\n }\n}\n\nfunction cloneRoute (to, from) {\n var clone = {\n name: to.name,\n path: to.path,\n hash: to.hash,\n query: to.query,\n params: to.params,\n fullPath: to.fullPath,\n meta: to.meta\n }\n if (from) {\n clone.from = cloneRoute(from)\n }\n return Object.freeze(clone)\n}\n\n","import { getCurrentUser as A, onRequestTokenUpdate as ue, getRequestToken as de } from \"@nextcloud/auth\";\nimport { getLoggerBuilder as q } from \"@nextcloud/logger\";\nimport { getCanonicalLocale as ae } from \"@nextcloud/l10n\";\nimport { join as le, basename as fe, extname as ce, dirname as I } from \"path\";\nimport { encodePath as he } from \"@nextcloud/paths\";\nimport { generateRemoteUrl as pe } from \"@nextcloud/router\";\nimport { createClient as ge, getPatcher as we } from \"webdav\";\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst me = (e) => e === null ? q().setApp(\"files\").build() : q().setApp(\"files\").setUid(e.uid).build(), m = me(A());\n/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ne {\n _entries = [];\n registerEntry(t) {\n this.validateEntry(t), this._entries.push(t);\n }\n unregisterEntry(t) {\n const r = typeof t == \"string\" ? this.getEntryIndex(t) : this.getEntryIndex(t.id);\n if (r === -1) {\n m.warn(\"Entry not found, nothing removed\", { entry: t, entries: this.getEntries() });\n return;\n }\n this._entries.splice(r, 1);\n }\n /**\n * Get the list of registered entries\n *\n * @param {Folder} context the creation context. Usually the current folder\n */\n getEntries(t) {\n return t ? this._entries.filter((r) => typeof r.enabled == \"function\" ? r.enabled(t) : !0) : this._entries;\n }\n getEntryIndex(t) {\n return this._entries.findIndex((r) => r.id === t);\n }\n validateEntry(t) {\n if (!t.id || !t.displayName || !(t.iconSvgInline || t.iconClass) || !t.handler)\n throw new Error(\"Invalid entry\");\n if (typeof t.id != \"string\" || typeof t.displayName != \"string\")\n throw new Error(\"Invalid id or displayName property\");\n if (t.iconClass && typeof t.iconClass != \"string\" || t.iconSvgInline && typeof t.iconSvgInline != \"string\")\n throw new Error(\"Invalid icon provided\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (typeof t.handler != \"function\")\n throw new Error(\"Invalid handler property\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order property\");\n if (this.getEntryIndex(t.id) !== -1)\n throw new Error(\"Duplicate entry\");\n }\n}\nconst F = function() {\n return typeof window._nc_newfilemenu > \"u\" && (window._nc_newfilemenu = new Ne(), m.debug(\"NewFileMenu initialized\")), window._nc_newfilemenu;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst C = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"], P = [\"B\", \"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\"];\nfunction Yt(e, t = !1, r = !1, s = !1) {\n r = r && !s, typeof e == \"string\" && (e = Number(e));\n let n = e > 0 ? Math.floor(Math.log(e) / Math.log(s ? 1e3 : 1024)) : 0;\n n = Math.min((r ? P.length : C.length) - 1, n);\n const i = r ? P[n] : C[n];\n let d = (e / Math.pow(s ? 1e3 : 1024, n)).toFixed(1);\n return t === !0 && n === 0 ? (d !== \"0.0\" ? \"< 1 \" : \"0 \") + (r ? P[1] : C[1]) : (n < 2 ? d = parseFloat(d).toFixed(0) : d = parseFloat(d).toLocaleString(ae()), d + \" \" + i);\n}\nfunction Jt(e, t = !1) {\n try {\n e = `${e}`.toLocaleLowerCase().replaceAll(/\\s+/g, \"\").replaceAll(\",\", \".\");\n } catch {\n return null;\n }\n const r = e.match(/^([0-9]*(\\.[0-9]*)?)([kmgtp]?)(i?)b?$/);\n if (r === null || r[1] === \".\" || r[1] === \"\")\n return null;\n const s = {\n \"\": 0,\n k: 1,\n m: 2,\n g: 3,\n t: 4,\n p: 5,\n e: 6\n }, n = `${r[1]}`, i = r[4] === \"i\" || t ? 1024 : 1e3;\n return Math.round(Number.parseFloat(n) * i ** s[r[3]]);\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Z = /* @__PURE__ */ ((e) => (e.DEFAULT = \"default\", e.HIDDEN = \"hidden\", e))(Z || {});\nclass Qt {\n _action;\n constructor(t) {\n this.validateAction(t), this._action = t;\n }\n get id() {\n return this._action.id;\n }\n get displayName() {\n return this._action.displayName;\n }\n get title() {\n return this._action.title;\n }\n get iconSvgInline() {\n return this._action.iconSvgInline;\n }\n get enabled() {\n return this._action.enabled;\n }\n get exec() {\n return this._action.exec;\n }\n get execBatch() {\n return this._action.execBatch;\n }\n get order() {\n return this._action.order;\n }\n get parent() {\n return this._action.parent;\n }\n get default() {\n return this._action.default;\n }\n get inline() {\n return this._action.inline;\n }\n get renderInline() {\n return this._action.renderInline;\n }\n validateAction(t) {\n if (!t.id || typeof t.id != \"string\")\n throw new Error(\"Invalid id\");\n if (!t.displayName || typeof t.displayName != \"function\")\n throw new Error(\"Invalid displayName function\");\n if (\"title\" in t && typeof t.title != \"function\")\n throw new Error(\"Invalid title function\");\n if (!t.iconSvgInline || typeof t.iconSvgInline != \"function\")\n throw new Error(\"Invalid iconSvgInline function\");\n if (!t.exec || typeof t.exec != \"function\")\n throw new Error(\"Invalid exec function\");\n if (\"enabled\" in t && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled function\");\n if (\"execBatch\" in t && typeof t.execBatch != \"function\")\n throw new Error(\"Invalid execBatch function\");\n if (\"order\" in t && typeof t.order != \"number\")\n throw new Error(\"Invalid order\");\n if (\"parent\" in t && typeof t.parent != \"string\")\n throw new Error(\"Invalid parent\");\n if (t.default && !Object.values(Z).includes(t.default))\n throw new Error(\"Invalid default\");\n if (\"inline\" in t && typeof t.inline != \"function\")\n throw new Error(\"Invalid inline function\");\n if (\"renderInline\" in t && typeof t.renderInline != \"function\")\n throw new Error(\"Invalid renderInline function\");\n }\n}\nconst Dt = function(e) {\n if (typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions.find((t) => t.id === e.id)) {\n m.error(`FileAction ${e.id} already registered`, { action: e });\n return;\n }\n window._nc_fileactions.push(e);\n}, er = function() {\n return typeof window._nc_fileactions > \"u\" && (window._nc_fileactions = [], m.debug(\"FileActions initialized\")), window._nc_fileactions;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass tr {\n _header;\n constructor(t) {\n this.validateHeader(t), this._header = t;\n }\n get id() {\n return this._header.id;\n }\n get order() {\n return this._header.order;\n }\n get enabled() {\n return this._header.enabled;\n }\n get render() {\n return this._header.render;\n }\n get updated() {\n return this._header.updated;\n }\n validateHeader(t) {\n if (!t.id || !t.render || !t.updated)\n throw new Error(\"Invalid header: id, render and updated are required\");\n if (typeof t.id != \"string\")\n throw new Error(\"Invalid id property\");\n if (t.enabled !== void 0 && typeof t.enabled != \"function\")\n throw new Error(\"Invalid enabled property\");\n if (t.render && typeof t.render != \"function\")\n throw new Error(\"Invalid render property\");\n if (t.updated && typeof t.updated != \"function\")\n throw new Error(\"Invalid updated property\");\n }\n}\nconst rr = function(e) {\n if (typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader.find((t) => t.id === e.id)) {\n m.error(`Header ${e.id} already registered`, { header: e });\n return;\n }\n window._nc_filelistheader.push(e);\n}, nr = function() {\n return typeof window._nc_filelistheader > \"u\" && (window._nc_filelistheader = [], m.debug(\"FileListHeaders initialized\")), window._nc_filelistheader;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar N = /* @__PURE__ */ ((e) => (e[e.NONE = 0] = \"NONE\", e[e.CREATE = 4] = \"CREATE\", e[e.READ = 1] = \"READ\", e[e.UPDATE = 2] = \"UPDATE\", e[e.DELETE = 8] = \"DELETE\", e[e.SHARE = 16] = \"SHARE\", e[e.ALL = 31] = \"ALL\", e))(N || {});\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst j = [\n \"d:getcontentlength\",\n \"d:getcontenttype\",\n \"d:getetag\",\n \"d:getlastmodified\",\n \"d:quota-available-bytes\",\n \"d:resourcetype\",\n \"nc:has-preview\",\n \"nc:is-encrypted\",\n \"nc:mount-type\",\n \"nc:share-attributes\",\n \"oc:comments-unread\",\n \"oc:favorite\",\n \"oc:fileid\",\n \"oc:owner-display-name\",\n \"oc:owner-id\",\n \"oc:permissions\",\n \"oc:share-types\",\n \"oc:size\",\n \"ocs:share-permissions\"\n], Y = {\n d: \"DAV:\",\n nc: \"http://nextcloud.org/ns\",\n oc: \"http://owncloud.org/ns\",\n ocs: \"http://open-collaboration-services.org/ns\"\n}, ir = function(e, t = { nc: \"http://nextcloud.org/ns\" }) {\n typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j], window._nc_dav_namespaces = { ...Y });\n const r = { ...window._nc_dav_namespaces, ...t };\n if (window._nc_dav_properties.find((n) => n === e))\n return m.error(`${e} already registered`, { prop: e }), !1;\n if (e.startsWith(\"<\") || e.split(\":\").length !== 2)\n return m.error(`${e} is not valid. See example: 'oc:fileid'`, { prop: e }), !1;\n const s = e.split(\":\")[0];\n return r[s] ? (window._nc_dav_properties.push(e), window._nc_dav_namespaces = r, !0) : (m.error(`${e} namespace unknown`, { prop: e, namespaces: r }), !1);\n}, V = function() {\n return typeof window._nc_dav_properties > \"u\" && (window._nc_dav_properties = [...j]), window._nc_dav_properties.map((e) => `<${e} />`).join(\" \");\n}, L = function() {\n return typeof window._nc_dav_namespaces > \"u\" && (window._nc_dav_namespaces = { ...Y }), Object.keys(window._nc_dav_namespaces).map((e) => `xmlns:${e}=\"${window._nc_dav_namespaces?.[e]}\"`).join(\" \");\n}, sr = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<d:propfind ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:propfind>`;\n}, Ee = function() {\n return `<?xml version=\"1.0\"?>\n\t\t<oc:filter-files ${L()}>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t\t<oc:filter-rules>\n\t\t\t\t<oc:favorite>1</oc:favorite>\n\t\t\t</oc:filter-rules>\n\t\t</oc:filter-files>`;\n}, or = function(e) {\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<d:searchrequest ${L()}\n\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\">\n\t<d:basicsearch>\n\t\t<d:select>\n\t\t\t<d:prop>\n\t\t\t\t${V()}\n\t\t\t</d:prop>\n\t\t</d:select>\n\t\t<d:from>\n\t\t\t<d:scope>\n\t\t\t\t<d:href>/files/${A()?.uid}/</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>\n\t\t</d:from>\n\t\t<d:where>\n\t\t\t<d:and>\n\t\t\t\t<d:or>\n\t\t\t\t\t<d:not>\n\t\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t\t<d:getcontenttype/>\n\t\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t\t<d:literal>httpd/unix-directory</d:literal>\n\t\t\t\t\t\t</d:eq>\n\t\t\t\t\t</d:not>\n\t\t\t\t\t<d:eq>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t<oc:size/>\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t\t<d:literal>0</d:literal>\n\t\t\t\t\t</d:eq>\n\t\t\t\t</d:or>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${e}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t</d:and>\n\t\t</d:where>\n\t\t<d:orderby>\n\t\t\t<d:order>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<d:getlastmodified/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:descending/>\n\t\t\t</d:order>\n\t\t</d:orderby>\n\t\t<d:limit>\n\t\t\t<d:nresults>100</d:nresults>\n\t\t\t<ns:firstresult>0</ns:firstresult>\n\t\t</d:limit>\n\t</d:basicsearch>\n</d:searchrequest>`;\n};\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst be = function(e = \"\") {\n let t = N.NONE;\n return e && ((e.includes(\"C\") || e.includes(\"K\")) && (t |= N.CREATE), e.includes(\"G\") && (t |= N.READ), (e.includes(\"W\") || e.includes(\"N\") || e.includes(\"V\")) && (t |= N.UPDATE), e.includes(\"D\") && (t |= N.DELETE), e.includes(\"R\") && (t |= N.SHARE)), t;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar R = /* @__PURE__ */ ((e) => (e.Folder = \"folder\", e.File = \"file\", e))(R || {});\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst J = function(e, t) {\n return e.match(t) !== null;\n}, X = (e, t) => {\n if (e.id && typeof e.id != \"number\")\n throw new Error(\"Invalid id type of value\");\n if (!e.source)\n throw new Error(\"Missing mandatory source\");\n try {\n new URL(e.source);\n } catch {\n throw new Error(\"Invalid source format, source must be a valid URL\");\n }\n if (!e.source.startsWith(\"http\"))\n throw new Error(\"Invalid source format, only http(s) is supported\");\n if (e.mtime && !(e.mtime instanceof Date))\n throw new Error(\"Invalid mtime type\");\n if (e.crtime && !(e.crtime instanceof Date))\n throw new Error(\"Invalid crtime type\");\n if (!e.mime || typeof e.mime != \"string\" || !e.mime.match(/^[-\\w.]+\\/[-+\\w.]+$/gi))\n throw new Error(\"Missing or invalid mandatory mime\");\n if (\"size\" in e && typeof e.size != \"number\" && e.size !== void 0)\n throw new Error(\"Invalid size type\");\n if (\"permissions\" in e && e.permissions !== void 0 && !(typeof e.permissions == \"number\" && e.permissions >= N.NONE && e.permissions <= N.ALL))\n throw new Error(\"Invalid permissions\");\n if (e.owner && e.owner !== null && typeof e.owner != \"string\")\n throw new Error(\"Invalid owner type\");\n if (e.attributes && typeof e.attributes != \"object\")\n throw new Error(\"Invalid attributes type\");\n if (e.root && typeof e.root != \"string\")\n throw new Error(\"Invalid root type\");\n if (e.root && !e.root.startsWith(\"/\"))\n throw new Error(\"Root must start with a leading slash\");\n if (e.root && !e.source.includes(e.root))\n throw new Error(\"Root must be part of the source\");\n if (e.root && J(e.source, t)) {\n const r = e.source.match(t)[0];\n if (!e.source.includes(le(r, e.root)))\n throw new Error(\"The root must be relative to the service. e.g /files/emma\");\n }\n if (e.status && !Object.values(Q).includes(e.status))\n throw new Error(\"Status must be a valid NodeStatus\");\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nvar Q = /* @__PURE__ */ ((e) => (e.NEW = \"new\", e.FAILED = \"failed\", e.LOADING = \"loading\", e.LOCKED = \"locked\", e))(Q || {});\nclass D {\n _data;\n _attributes;\n _knownDavService = /(remote|public)\\.php\\/(web)?dav/i;\n constructor(t, r) {\n X(t, r || this._knownDavService), this._data = t;\n const s = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set: (n, i, d) => (this.updateMtime(), Reflect.set(n, i, d)),\n deleteProperty: (n, i) => (this.updateMtime(), Reflect.deleteProperty(n, i))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n };\n this._attributes = new Proxy(t.attributes || {}, s), delete this._data.attributes, r && (this._knownDavService = r);\n }\n /**\n * Get the source url to this object\n */\n get source() {\n return this._data.source.replace(/\\/$/i, \"\");\n }\n /**\n * Get the encoded source url to this object for requests purposes\n */\n get encodedSource() {\n const { origin: t } = new URL(this.source);\n return t + he(this.source.slice(t.length));\n }\n /**\n * Get this object name\n */\n get basename() {\n return fe(this.source);\n }\n /**\n * Get this object's extension\n */\n get extension() {\n return ce(this.source);\n }\n /**\n * Get the directory path leading to this object\n * Will use the relative path to root if available\n */\n get dirname() {\n if (this.root) {\n let r = this.source;\n this.isDavRessource && (r = r.split(this._knownDavService).pop());\n const s = r.indexOf(this.root), n = this.root.replace(/\\/$/, \"\");\n return I(r.slice(s + n.length) || \"/\");\n }\n const t = new URL(this.source);\n return I(t.pathname);\n }\n /**\n * Get the file mime\n */\n get mime() {\n return this._data.mime;\n }\n /**\n * Get the file modification time\n */\n get mtime() {\n return this._data.mtime;\n }\n /**\n * Get the file creation time\n */\n get crtime() {\n return this._data.crtime;\n }\n /**\n * Get the file size\n */\n get size() {\n return this._data.size;\n }\n /**\n * Get the file attribute\n */\n get attributes() {\n return this._attributes;\n }\n /**\n * Get the file permissions\n */\n get permissions() {\n return this.owner === null && !this.isDavRessource ? N.READ : this._data.permissions !== void 0 ? this._data.permissions : N.NONE;\n }\n /**\n * Get the file owner\n */\n get owner() {\n return this.isDavRessource ? this._data.owner : null;\n }\n /**\n * Is this a dav-related ressource ?\n */\n get isDavRessource() {\n return J(this.source, this._knownDavService);\n }\n /**\n * Get the dav root of this object\n */\n get root() {\n return this._data.root ? this._data.root.replace(/^(.+)\\/$/, \"$1\") : this.isDavRessource && I(this.source).split(this._knownDavService).pop() || null;\n }\n /**\n * Get the absolute path of this object relative to the root\n */\n get path() {\n if (this.root) {\n let t = this.source;\n this.isDavRessource && (t = t.split(this._knownDavService).pop());\n const r = t.indexOf(this.root), s = this.root.replace(/\\/$/, \"\");\n return t.slice(r + s.length) || \"/\";\n }\n return (this.dirname + \"/\" + this.basename).replace(/\\/\\//g, \"/\");\n }\n /**\n * Get the node id if defined.\n * Will look for the fileid in attributes if undefined.\n */\n get fileid() {\n return this._data?.id || this.attributes?.fileid;\n }\n /**\n * Get the node status.\n */\n get status() {\n return this._data?.status;\n }\n /**\n * Set the node status.\n */\n set status(t) {\n this._data.status = t;\n }\n /**\n * Move the node to a new destination\n *\n * @param {string} destination the new source.\n * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg\n */\n move(t) {\n X({ ...this._data, source: t }, this._knownDavService), this._data.source = t, this.updateMtime();\n }\n /**\n * Rename the node\n * This aliases the move method for easier usage\n *\n * @param basename The new name of the node\n */\n rename(t) {\n if (t.includes(\"/\"))\n throw new Error(\"Invalid basename\");\n this.move(I(this.source) + \"/\" + t);\n }\n /**\n * Update the mtime if exists.\n */\n updateMtime() {\n this._data.mtime && (this._data.mtime = /* @__PURE__ */ new Date());\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass ye extends D {\n get type() {\n return R.File;\n }\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass _e extends D {\n constructor(t) {\n super({\n ...t,\n mime: \"httpd/unix-directory\"\n });\n }\n get type() {\n return R.Folder;\n }\n get extension() {\n return null;\n }\n get mime() {\n return \"httpd/unix-directory\";\n }\n}\n/**\n * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst ee = `/files/${A()?.uid}`, te = pe(\"dav\"), ur = function(e = te, t = {}) {\n const r = ge(e, { headers: t });\n function s(i) {\n r.setHeaders({\n ...t,\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: i ?? \"\"\n });\n }\n return ue(s), s(de()), we().patch(\"fetch\", (i, d) => {\n const u = d.headers;\n return u?.method && (d.method = u.method, delete u.method), fetch(i, d);\n }), r;\n}, dr = async (e, t = \"/\", r = ee) => (await e.getDirectoryContents(`${r}${t}`, {\n details: !0,\n data: Ee(),\n headers: {\n // see davGetClient for patched webdav client\n method: \"REPORT\"\n },\n includeSelf: !0\n})).data.filter((n) => n.filename !== t).map((n) => ve(n, r)), ve = function(e, t = ee, r = te) {\n const s = e.props, n = be(s?.permissions), i = s?.[\"owner-id\"] || A()?.uid, d = {\n id: s?.fileid || 0,\n source: `${r}${e.filename}`,\n mtime: new Date(Date.parse(e.lastmod)),\n mime: e.mime,\n size: s?.size || Number.parseInt(s.getcontentlength || \"0\"),\n permissions: n,\n owner: i,\n root: t,\n attributes: {\n ...e,\n ...s,\n hasPreview: s?.[\"has-preview\"]\n }\n };\n return delete d.attributes?.props, e.type === \"file\" ? new ye(d) : new _e(d);\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Te {\n _views = [];\n _currentView = null;\n register(t) {\n if (this._views.find((r) => r.id === t.id))\n throw new Error(`View id ${t.id} is already registered`);\n this._views.push(t);\n }\n remove(t) {\n const r = this._views.findIndex((s) => s.id === t);\n r !== -1 && this._views.splice(r, 1);\n }\n get views() {\n return this._views;\n }\n setActive(t) {\n this._currentView = t;\n }\n get active() {\n return this._currentView;\n }\n}\nconst ar = function() {\n return typeof window._nc_navigation > \"u\" && (window._nc_navigation = new Te(), m.debug(\"Navigation service initialized\")), window._nc_navigation;\n};\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass Ie {\n _column;\n constructor(t) {\n Ae(t), this._column = t;\n }\n get id() {\n return this._column.id;\n }\n get title() {\n return this._column.title;\n }\n get render() {\n return this._column.render;\n }\n get sort() {\n return this._column.sort;\n }\n get summary() {\n return this._column.summary;\n }\n}\nconst Ae = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"A column id is required\");\n if (!e.title || typeof e.title != \"string\")\n throw new Error(\"A column title is required\");\n if (!e.render || typeof e.render != \"function\")\n throw new Error(\"A render function is required\");\n if (e.sort && typeof e.sort != \"function\")\n throw new Error(\"Column sortFunction must be a function\");\n if (e.summary && typeof e.summary != \"function\")\n throw new Error(\"Column summary must be a function\");\n return !0;\n};\nvar S = {}, O = {};\n(function(e) {\n const t = \":A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\", r = t + \"\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\", s = \"[\" + t + \"][\" + r + \"]*\", n = new RegExp(\"^\" + s + \"$\"), i = function(u, o) {\n const a = [];\n let l = o.exec(u);\n for (; l; ) {\n const f = [];\n f.startIndex = o.lastIndex - l[0].length;\n const c = l.length;\n for (let g = 0; g < c; g++)\n f.push(l[g]);\n a.push(f), l = o.exec(u);\n }\n return a;\n }, d = function(u) {\n const o = n.exec(u);\n return !(o === null || typeof o > \"u\");\n };\n e.isExist = function(u) {\n return typeof u < \"u\";\n }, e.isEmptyObject = function(u) {\n return Object.keys(u).length === 0;\n }, e.merge = function(u, o, a) {\n if (o) {\n const l = Object.keys(o), f = l.length;\n for (let c = 0; c < f; c++)\n a === \"strict\" ? u[l[c]] = [o[l[c]]] : u[l[c]] = o[l[c]];\n }\n }, e.getValue = function(u) {\n return e.isExist(u) ? u : \"\";\n }, e.isName = d, e.getAllMatches = i, e.nameRegexp = s;\n})(O);\nconst M = O, Oe = {\n allowBooleanAttributes: !1,\n //A tag can have attributes without any value\n unpairedTags: []\n};\nS.validate = function(e, t) {\n t = Object.assign({}, Oe, t);\n const r = [];\n let s = !1, n = !1;\n e[0] === \"\\uFEFF\" && (e = e.substr(1));\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\" && e[i + 1] === \"?\") {\n if (i += 2, i = G(e, i), i.err)\n return i;\n } else if (e[i] === \"<\") {\n let d = i;\n if (i++, e[i] === \"!\") {\n i = z(e, i);\n continue;\n } else {\n let u = !1;\n e[i] === \"/\" && (u = !0, i++);\n let o = \"\";\n for (; i < e.length && e[i] !== \">\" && e[i] !== \" \" && e[i] !== \"\t\" && e[i] !== `\n` && e[i] !== \"\\r\"; i++)\n o += e[i];\n if (o = o.trim(), o[o.length - 1] === \"/\" && (o = o.substring(0, o.length - 1), i--), !Re(o)) {\n let f;\n return o.trim().length === 0 ? f = \"Invalid space after '<'.\" : f = \"Tag '\" + o + \"' is an invalid name.\", p(\"InvalidTag\", f, w(e, i));\n }\n const a = xe(e, i);\n if (a === !1)\n return p(\"InvalidAttr\", \"Attributes for '\" + o + \"' have open quote.\", w(e, i));\n let l = a.value;\n if (i = a.index, l[l.length - 1] === \"/\") {\n const f = i - l.length;\n l = l.substring(0, l.length - 1);\n const c = H(l, t);\n if (c === !0)\n s = !0;\n else\n return p(c.err.code, c.err.msg, w(e, f + c.err.line));\n } else if (u)\n if (a.tagClosed) {\n if (l.trim().length > 0)\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' can't have attributes or invalid starting.\", w(e, d));\n {\n const f = r.pop();\n if (o !== f.tagName) {\n let c = w(e, f.tagStartPos);\n return p(\n \"InvalidTag\",\n \"Expected closing tag '\" + f.tagName + \"' (opened in line \" + c.line + \", col \" + c.col + \") instead of closing tag '\" + o + \"'.\",\n w(e, d)\n );\n }\n r.length == 0 && (n = !0);\n }\n } else\n return p(\"InvalidTag\", \"Closing tag '\" + o + \"' doesn't have proper closing.\", w(e, i));\n else {\n const f = H(l, t);\n if (f !== !0)\n return p(f.err.code, f.err.msg, w(e, i - l.length + f.err.line));\n if (n === !0)\n return p(\"InvalidXml\", \"Multiple possible root nodes found.\", w(e, i));\n t.unpairedTags.indexOf(o) !== -1 || r.push({ tagName: o, tagStartPos: d }), s = !0;\n }\n for (i++; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"!\") {\n i++, i = z(e, i);\n continue;\n } else if (e[i + 1] === \"?\") {\n if (i = G(e, ++i), i.err)\n return i;\n } else\n break;\n else if (e[i] === \"&\") {\n const f = Ve(e, i);\n if (f == -1)\n return p(\"InvalidChar\", \"char '&' is not expected.\", w(e, i));\n i = f;\n } else if (n === !0 && !U(e[i]))\n return p(\"InvalidXml\", \"Extra text at the end\", w(e, i));\n e[i] === \"<\" && i--;\n }\n } else {\n if (U(e[i]))\n continue;\n return p(\"InvalidChar\", \"char '\" + e[i] + \"' is not expected.\", w(e, i));\n }\n if (s) {\n if (r.length == 1)\n return p(\"InvalidTag\", \"Unclosed tag '\" + r[0].tagName + \"'.\", w(e, r[0].tagStartPos));\n if (r.length > 0)\n return p(\"InvalidXml\", \"Invalid '\" + JSON.stringify(r.map((i) => i.tagName), null, 4).replace(/\\r?\\n/g, \"\") + \"' found.\", { line: 1, col: 1 });\n } else\n return p(\"InvalidXml\", \"Start tag expected.\", 1);\n return !0;\n};\nfunction U(e) {\n return e === \" \" || e === \"\t\" || e === `\n` || e === \"\\r\";\n}\nfunction G(e, t) {\n const r = t;\n for (; t < e.length; t++)\n if (e[t] == \"?\" || e[t] == \" \") {\n const s = e.substr(r, t - r);\n if (t > 5 && s === \"xml\")\n return p(\"InvalidXml\", \"XML declaration allowed only at the start of the document.\", w(e, t));\n if (e[t] == \"?\" && e[t + 1] == \">\") {\n t++;\n break;\n } else\n continue;\n }\n return t;\n}\nfunction z(e, t) {\n if (e.length > t + 5 && e[t + 1] === \"-\" && e[t + 2] === \"-\") {\n for (t += 3; t < e.length; t++)\n if (e[t] === \"-\" && e[t + 1] === \"-\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n } else if (e.length > t + 8 && e[t + 1] === \"D\" && e[t + 2] === \"O\" && e[t + 3] === \"C\" && e[t + 4] === \"T\" && e[t + 5] === \"Y\" && e[t + 6] === \"P\" && e[t + 7] === \"E\") {\n let r = 1;\n for (t += 8; t < e.length; t++)\n if (e[t] === \"<\")\n r++;\n else if (e[t] === \">\" && (r--, r === 0))\n break;\n } else if (e.length > t + 9 && e[t + 1] === \"[\" && e[t + 2] === \"C\" && e[t + 3] === \"D\" && e[t + 4] === \"A\" && e[t + 5] === \"T\" && e[t + 6] === \"A\" && e[t + 7] === \"[\") {\n for (t += 8; t < e.length; t++)\n if (e[t] === \"]\" && e[t + 1] === \"]\" && e[t + 2] === \">\") {\n t += 2;\n break;\n }\n }\n return t;\n}\nconst Ce = '\"', Pe = \"'\";\nfunction xe(e, t) {\n let r = \"\", s = \"\", n = !1;\n for (; t < e.length; t++) {\n if (e[t] === Ce || e[t] === Pe)\n s === \"\" ? s = e[t] : s !== e[t] || (s = \"\");\n else if (e[t] === \">\" && s === \"\") {\n n = !0;\n break;\n }\n r += e[t];\n }\n return s !== \"\" ? !1 : {\n value: r,\n index: t,\n tagClosed: n\n };\n}\nconst $e = new RegExp(`(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*(['\"])(([\\\\s\\\\S])*?)\\\\5)?`, \"g\");\nfunction H(e, t) {\n const r = M.getAllMatches(e, $e), s = {};\n for (let n = 0; n < r.length; n++) {\n if (r[n][1].length === 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' has no space in starting.\", v(r[n]));\n if (r[n][3] !== void 0 && r[n][4] === void 0)\n return p(\"InvalidAttr\", \"Attribute '\" + r[n][2] + \"' is without value.\", v(r[n]));\n if (r[n][3] === void 0 && !t.allowBooleanAttributes)\n return p(\"InvalidAttr\", \"boolean attribute '\" + r[n][2] + \"' is not allowed.\", v(r[n]));\n const i = r[n][2];\n if (!Le(i))\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is an invalid name.\", v(r[n]));\n if (!s.hasOwnProperty(i))\n s[i] = 1;\n else\n return p(\"InvalidAttr\", \"Attribute '\" + i + \"' is repeated.\", v(r[n]));\n }\n return !0;\n}\nfunction Fe(e, t) {\n let r = /\\d/;\n for (e[t] === \"x\" && (t++, r = /[\\da-fA-F]/); t < e.length; t++) {\n if (e[t] === \";\")\n return t;\n if (!e[t].match(r))\n break;\n }\n return -1;\n}\nfunction Ve(e, t) {\n if (t++, e[t] === \";\")\n return -1;\n if (e[t] === \"#\")\n return t++, Fe(e, t);\n let r = 0;\n for (; t < e.length; t++, r++)\n if (!(e[t].match(/\\w/) && r < 20)) {\n if (e[t] === \";\")\n break;\n return -1;\n }\n return t;\n}\nfunction p(e, t, r) {\n return {\n err: {\n code: e,\n msg: t,\n line: r.line || r,\n col: r.col\n }\n };\n}\nfunction Le(e) {\n return M.isName(e);\n}\nfunction Re(e) {\n return M.isName(e);\n}\nfunction w(e, t) {\n const r = e.substring(0, t).split(/\\r?\\n/);\n return {\n line: r.length,\n // column number is last line's length + 1, because column numbering starts at 1:\n col: r[r.length - 1].length + 1\n };\n}\nfunction v(e) {\n return e.startIndex + e[1].length;\n}\nvar k = {};\nconst re = {\n preserveOrder: !1,\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n removeNSPrefix: !1,\n // remove NS from tag name or attribute name if true\n allowBooleanAttributes: !1,\n //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseTagValue: !0,\n parseAttributeValue: !1,\n trimValues: !0,\n //Trim string values of tag and attributes\n cdataPropName: !1,\n numberParseOptions: {\n hex: !0,\n leadingZeros: !0,\n eNotation: !0\n },\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n stopNodes: [],\n //nested tags will not be parsed even for errors\n alwaysCreateTextNode: !1,\n isArray: () => !1,\n commentPropName: !1,\n unpairedTags: [],\n processEntities: !0,\n htmlEntities: !1,\n ignoreDeclaration: !1,\n ignorePiTags: !1,\n transformTagName: !1,\n transformAttributeName: !1,\n updateTag: function(e, t, r) {\n return e;\n }\n // skipEmptyListItem: false\n}, Se = function(e) {\n return Object.assign({}, re, e);\n};\nk.buildOptions = Se;\nk.defaultOptions = re;\nclass Me {\n constructor(t) {\n this.tagname = t, this.child = [], this[\":@\"] = {};\n }\n add(t, r) {\n t === \"__proto__\" && (t = \"#__proto__\"), this.child.push({ [t]: r });\n }\n addChild(t) {\n t.tagname === \"__proto__\" && (t.tagname = \"#__proto__\"), t[\":@\"] && Object.keys(t[\":@\"]).length > 0 ? this.child.push({ [t.tagname]: t.child, \":@\": t[\":@\"] }) : this.child.push({ [t.tagname]: t.child });\n }\n}\nvar ke = Me;\nconst Be = O;\nfunction qe(e, t) {\n const r = {};\n if (e[t + 3] === \"O\" && e[t + 4] === \"C\" && e[t + 5] === \"T\" && e[t + 6] === \"Y\" && e[t + 7] === \"P\" && e[t + 8] === \"E\") {\n t = t + 9;\n let s = 1, n = !1, i = !1, d = \"\";\n for (; t < e.length; t++)\n if (e[t] === \"<\" && !i) {\n if (n && Ge(e, t))\n t += 7, [entityName, val, t] = Xe(e, t + 1), val.indexOf(\"&\") === -1 && (r[We(entityName)] = {\n regx: RegExp(`&${entityName};`, \"g\"),\n val\n });\n else if (n && ze(e, t))\n t += 8;\n else if (n && He(e, t))\n t += 8;\n else if (n && Ke(e, t))\n t += 9;\n else if (Ue)\n i = !0;\n else\n throw new Error(\"Invalid DOCTYPE\");\n s++, d = \"\";\n } else if (e[t] === \">\") {\n if (i ? e[t - 1] === \"-\" && e[t - 2] === \"-\" && (i = !1, s--) : s--, s === 0)\n break;\n } else\n e[t] === \"[\" ? n = !0 : d += e[t];\n if (s !== 0)\n throw new Error(\"Unclosed DOCTYPE\");\n } else\n throw new Error(\"Invalid Tag instead of DOCTYPE\");\n return { entities: r, i: t };\n}\nfunction Xe(e, t) {\n let r = \"\";\n for (; t < e.length && e[t] !== \"'\" && e[t] !== '\"'; t++)\n r += e[t];\n if (r = r.trim(), r.indexOf(\" \") !== -1)\n throw new Error(\"External entites are not supported\");\n const s = e[t++];\n let n = \"\";\n for (; t < e.length && e[t] !== s; t++)\n n += e[t];\n return [r, n, t];\n}\nfunction Ue(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"-\" && e[t + 3] === \"-\";\n}\nfunction Ge(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"N\" && e[t + 4] === \"T\" && e[t + 5] === \"I\" && e[t + 6] === \"T\" && e[t + 7] === \"Y\";\n}\nfunction ze(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"E\" && e[t + 3] === \"L\" && e[t + 4] === \"E\" && e[t + 5] === \"M\" && e[t + 6] === \"E\" && e[t + 7] === \"N\" && e[t + 8] === \"T\";\n}\nfunction He(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"A\" && e[t + 3] === \"T\" && e[t + 4] === \"T\" && e[t + 5] === \"L\" && e[t + 6] === \"I\" && e[t + 7] === \"S\" && e[t + 8] === \"T\";\n}\nfunction Ke(e, t) {\n return e[t + 1] === \"!\" && e[t + 2] === \"N\" && e[t + 3] === \"O\" && e[t + 4] === \"T\" && e[t + 5] === \"A\" && e[t + 6] === \"T\" && e[t + 7] === \"I\" && e[t + 8] === \"O\" && e[t + 9] === \"N\";\n}\nfunction We(e) {\n if (Be.isName(e))\n return e;\n throw new Error(`Invalid entity name ${e}`);\n}\nvar Ze = qe;\nconst je = /^[-+]?0x[a-fA-F0-9]+$/, Ye = /^([\\-\\+])?(0*)(\\.[0-9]+([eE]\\-?[0-9]+)?|[0-9]+(\\.[0-9]+([eE]\\-?[0-9]+)?)?)$/;\n!Number.parseInt && window.parseInt && (Number.parseInt = window.parseInt);\n!Number.parseFloat && window.parseFloat && (Number.parseFloat = window.parseFloat);\nconst Je = {\n hex: !0,\n leadingZeros: !0,\n decimalPoint: \".\",\n eNotation: !0\n //skipLike: /regex/\n};\nfunction Qe(e, t = {}) {\n if (t = Object.assign({}, Je, t), !e || typeof e != \"string\")\n return e;\n let r = e.trim();\n if (t.skipLike !== void 0 && t.skipLike.test(r))\n return e;\n if (t.hex && je.test(r))\n return Number.parseInt(r, 16);\n {\n const s = Ye.exec(r);\n if (s) {\n const n = s[1], i = s[2];\n let d = De(s[3]);\n const u = s[4] || s[6];\n if (!t.leadingZeros && i.length > 0 && n && r[2] !== \".\")\n return e;\n if (!t.leadingZeros && i.length > 0 && !n && r[1] !== \".\")\n return e;\n {\n const o = Number(r), a = \"\" + o;\n return a.search(/[eE]/) !== -1 || u ? t.eNotation ? o : e : r.indexOf(\".\") !== -1 ? a === \"0\" && d === \"\" || a === d || n && a === \"-\" + d ? o : e : i ? d === a || n + d === a ? o : e : r === a || r === n + a ? o : e;\n }\n } else\n return e;\n }\n}\nfunction De(e) {\n return e && e.indexOf(\".\") !== -1 && (e = e.replace(/0+$/, \"\"), e === \".\" ? e = \"0\" : e[0] === \".\" ? e = \"0\" + e : e[e.length - 1] === \".\" && (e = e.substr(0, e.length - 1))), e;\n}\nvar et = Qe;\nconst B = O, T = ke, tt = Ze, rt = et;\n\"<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)\".replace(/NAME/g, B.nameRegexp);\nlet nt = class {\n constructor(t) {\n this.options = t, this.currentNode = null, this.tagsNodeStack = [], this.docTypeEntities = {}, this.lastEntities = {\n apos: { regex: /&(apos|#39|#x27);/g, val: \"'\" },\n gt: { regex: /&(gt|#62|#x3E);/g, val: \">\" },\n lt: { regex: /&(lt|#60|#x3C);/g, val: \"<\" },\n quot: { regex: /&(quot|#34|#x22);/g, val: '\"' }\n }, this.ampEntity = { regex: /&(amp|#38|#x26);/g, val: \"&\" }, this.htmlEntities = {\n space: { regex: /&(nbsp|#160);/g, val: \" \" },\n // \"lt\" : { regex: /&(lt|#60);/g, val: \"<\" },\n // \"gt\" : { regex: /&(gt|#62);/g, val: \">\" },\n // \"amp\" : { regex: /&(amp|#38);/g, val: \"&\" },\n // \"quot\" : { regex: /&(quot|#34);/g, val: \"\\\"\" },\n // \"apos\" : { regex: /&(apos|#39);/g, val: \"'\" },\n cent: { regex: /&(cent|#162);/g, val: \"¢\" },\n pound: { regex: /&(pound|#163);/g, val: \"£\" },\n yen: { regex: /&(yen|#165);/g, val: \"¥\" },\n euro: { regex: /&(euro|#8364);/g, val: \"€\" },\n copyright: { regex: /&(copy|#169);/g, val: \"©\" },\n reg: { regex: /&(reg|#174);/g, val: \"®\" },\n inr: { regex: /&(inr|#8377);/g, val: \"₹\" }\n }, this.addExternalEntities = it, this.parseXml = at, this.parseTextData = st, this.resolveNameSpace = ot, this.buildAttributesMap = dt, this.isItStopNode = ht, this.replaceEntitiesValue = ft, this.readStopNodeData = gt, this.saveTextToParentTag = ct, this.addChild = lt;\n }\n};\nfunction it(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n this.lastEntities[s] = {\n regex: new RegExp(\"&\" + s + \";\", \"g\"),\n val: e[s]\n };\n }\n}\nfunction st(e, t, r, s, n, i, d) {\n if (e !== void 0 && (this.options.trimValues && !s && (e = e.trim()), e.length > 0)) {\n d || (e = this.replaceEntitiesValue(e));\n const u = this.options.tagValueProcessor(t, e, r, n, i);\n return u == null ? e : typeof u != typeof e || u !== e ? u : this.options.trimValues ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e.trim() === e ? $(e, this.options.parseTagValue, this.options.numberParseOptions) : e;\n }\n}\nfunction ot(e) {\n if (this.options.removeNSPrefix) {\n const t = e.split(\":\"), r = e.charAt(0) === \"/\" ? \"/\" : \"\";\n if (t[0] === \"xmlns\")\n return \"\";\n t.length === 2 && (e = r + t[1]);\n }\n return e;\n}\nconst ut = new RegExp(`([^\\\\s=]+)\\\\s*(=\\\\s*(['\"])([\\\\s\\\\S]*?)\\\\3)?`, \"gm\");\nfunction dt(e, t, r) {\n if (!this.options.ignoreAttributes && typeof e == \"string\") {\n const s = B.getAllMatches(e, ut), n = s.length, i = {};\n for (let d = 0; d < n; d++) {\n const u = this.resolveNameSpace(s[d][1]);\n let o = s[d][4], a = this.options.attributeNamePrefix + u;\n if (u.length)\n if (this.options.transformAttributeName && (a = this.options.transformAttributeName(a)), a === \"__proto__\" && (a = \"#__proto__\"), o !== void 0) {\n this.options.trimValues && (o = o.trim()), o = this.replaceEntitiesValue(o);\n const l = this.options.attributeValueProcessor(u, o, t);\n l == null ? i[a] = o : typeof l != typeof o || l !== o ? i[a] = l : i[a] = $(\n o,\n this.options.parseAttributeValue,\n this.options.numberParseOptions\n );\n } else\n this.options.allowBooleanAttributes && (i[a] = !0);\n }\n if (!Object.keys(i).length)\n return;\n if (this.options.attributesGroupName) {\n const d = {};\n return d[this.options.attributesGroupName] = i, d;\n }\n return i;\n }\n}\nconst at = function(e) {\n e = e.replace(/\\r\\n?/g, `\n`);\n const t = new T(\"!xml\");\n let r = t, s = \"\", n = \"\";\n for (let i = 0; i < e.length; i++)\n if (e[i] === \"<\")\n if (e[i + 1] === \"/\") {\n const u = y(e, \">\", i, \"Closing Tag is not closed.\");\n let o = e.substring(i + 2, u).trim();\n if (this.options.removeNSPrefix) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1));\n }\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && (s = this.saveTextToParentTag(s, r, n));\n const a = n.substring(n.lastIndexOf(\".\") + 1);\n if (o && this.options.unpairedTags.indexOf(o) !== -1)\n throw new Error(`Unpaired tag can not be used as closing tag: </${o}>`);\n let l = 0;\n a && this.options.unpairedTags.indexOf(a) !== -1 ? (l = n.lastIndexOf(\".\", n.lastIndexOf(\".\") - 1), this.tagsNodeStack.pop()) : l = n.lastIndexOf(\".\"), n = n.substring(0, l), r = this.tagsNodeStack.pop(), s = \"\", i = u;\n } else if (e[i + 1] === \"?\") {\n let u = x(e, i, !1, \"?>\");\n if (!u)\n throw new Error(\"Pi Tag is not closed.\");\n if (s = this.saveTextToParentTag(s, r, n), !(this.options.ignoreDeclaration && u.tagName === \"?xml\" || this.options.ignorePiTags)) {\n const o = new T(u.tagName);\n o.add(this.options.textNodeName, \"\"), u.tagName !== u.tagExp && u.attrExpPresent && (o[\":@\"] = this.buildAttributesMap(u.tagExp, n, u.tagName)), this.addChild(r, o, n);\n }\n i = u.closeIndex + 1;\n } else if (e.substr(i + 1, 3) === \"!--\") {\n const u = y(e, \"-->\", i + 4, \"Comment is not closed.\");\n if (this.options.commentPropName) {\n const o = e.substring(i + 4, u - 2);\n s = this.saveTextToParentTag(s, r, n), r.add(this.options.commentPropName, [{ [this.options.textNodeName]: o }]);\n }\n i = u;\n } else if (e.substr(i + 1, 2) === \"!D\") {\n const u = tt(e, i);\n this.docTypeEntities = u.entities, i = u.i;\n } else if (e.substr(i + 1, 2) === \"![\") {\n const u = y(e, \"]]>\", i, \"CDATA is not closed.\") - 2, o = e.substring(i + 9, u);\n if (s = this.saveTextToParentTag(s, r, n), this.options.cdataPropName)\n r.add(this.options.cdataPropName, [{ [this.options.textNodeName]: o }]);\n else {\n let a = this.parseTextData(o, r.tagname, n, !0, !1, !0);\n a == null && (a = \"\"), r.add(this.options.textNodeName, a);\n }\n i = u + 2;\n } else {\n let u = x(e, i, this.options.removeNSPrefix), o = u.tagName;\n const a = u.rawTagName;\n let l = u.tagExp, f = u.attrExpPresent, c = u.closeIndex;\n this.options.transformTagName && (o = this.options.transformTagName(o)), r && s && r.tagname !== \"!xml\" && (s = this.saveTextToParentTag(s, r, n, !1));\n const g = r;\n if (g && this.options.unpairedTags.indexOf(g.tagname) !== -1 && (r = this.tagsNodeStack.pop(), n = n.substring(0, n.lastIndexOf(\".\"))), o !== t.tagname && (n += n ? \".\" + o : o), this.isItStopNode(this.options.stopNodes, n, o)) {\n let h = \"\";\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1)\n i = u.closeIndex;\n else if (this.options.unpairedTags.indexOf(o) !== -1)\n i = u.closeIndex;\n else {\n const E = this.readStopNodeData(e, a, c + 1);\n if (!E)\n throw new Error(`Unexpected end of ${a}`);\n i = E.i, h = E.tagContent;\n }\n const _ = new T(o);\n o !== l && f && (_[\":@\"] = this.buildAttributesMap(l, n, o)), h && (h = this.parseTextData(h, o, n, !0, f, !0, !0)), n = n.substr(0, n.lastIndexOf(\".\")), _.add(this.options.textNodeName, h), this.addChild(r, _, n);\n } else {\n if (l.length > 0 && l.lastIndexOf(\"/\") === l.length - 1) {\n o[o.length - 1] === \"/\" ? (o = o.substr(0, o.length - 1), n = n.substr(0, n.length - 1), l = o) : l = l.substr(0, l.length - 1), this.options.transformTagName && (o = this.options.transformTagName(o));\n const h = new T(o);\n o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), n = n.substr(0, n.lastIndexOf(\".\"));\n } else {\n const h = new T(o);\n this.tagsNodeStack.push(r), o !== l && f && (h[\":@\"] = this.buildAttributesMap(l, n, o)), this.addChild(r, h, n), r = h;\n }\n s = \"\", i = c;\n }\n }\n else\n s += e[i];\n return t.child;\n};\nfunction lt(e, t, r) {\n const s = this.options.updateTag(t.tagname, r, t[\":@\"]);\n s === !1 || (typeof s == \"string\" && (t.tagname = s), e.addChild(t));\n}\nconst ft = function(e) {\n if (this.options.processEntities) {\n for (let t in this.docTypeEntities) {\n const r = this.docTypeEntities[t];\n e = e.replace(r.regx, r.val);\n }\n for (let t in this.lastEntities) {\n const r = this.lastEntities[t];\n e = e.replace(r.regex, r.val);\n }\n if (this.options.htmlEntities)\n for (let t in this.htmlEntities) {\n const r = this.htmlEntities[t];\n e = e.replace(r.regex, r.val);\n }\n e = e.replace(this.ampEntity.regex, this.ampEntity.val);\n }\n return e;\n};\nfunction ct(e, t, r, s) {\n return e && (s === void 0 && (s = Object.keys(t.child).length === 0), e = this.parseTextData(\n e,\n t.tagname,\n r,\n !1,\n t[\":@\"] ? Object.keys(t[\":@\"]).length !== 0 : !1,\n s\n ), e !== void 0 && e !== \"\" && t.add(this.options.textNodeName, e), e = \"\"), e;\n}\nfunction ht(e, t, r) {\n const s = \"*.\" + r;\n for (const n in e) {\n const i = e[n];\n if (s === i || t === i)\n return !0;\n }\n return !1;\n}\nfunction pt(e, t, r = \">\") {\n let s, n = \"\";\n for (let i = t; i < e.length; i++) {\n let d = e[i];\n if (s)\n d === s && (s = \"\");\n else if (d === '\"' || d === \"'\")\n s = d;\n else if (d === r[0])\n if (r[1]) {\n if (e[i + 1] === r[1])\n return {\n data: n,\n index: i\n };\n } else\n return {\n data: n,\n index: i\n };\n else\n d === \"\t\" && (d = \" \");\n n += d;\n }\n}\nfunction y(e, t, r, s) {\n const n = e.indexOf(t, r);\n if (n === -1)\n throw new Error(s);\n return n + t.length - 1;\n}\nfunction x(e, t, r, s = \">\") {\n const n = pt(e, t + 1, s);\n if (!n)\n return;\n let i = n.data;\n const d = n.index, u = i.search(/\\s/);\n let o = i, a = !0;\n u !== -1 && (o = i.substr(0, u).replace(/\\s\\s*$/, \"\"), i = i.substr(u + 1));\n const l = o;\n if (r) {\n const f = o.indexOf(\":\");\n f !== -1 && (o = o.substr(f + 1), a = o !== n.data.substr(f + 1));\n }\n return {\n tagName: o,\n tagExp: i,\n closeIndex: d,\n attrExpPresent: a,\n rawTagName: l\n };\n}\nfunction gt(e, t, r) {\n const s = r;\n let n = 1;\n for (; r < e.length; r++)\n if (e[r] === \"<\")\n if (e[r + 1] === \"/\") {\n const i = y(e, \">\", r, `${t} is not closed`);\n if (e.substring(r + 2, i).trim() === t && (n--, n === 0))\n return {\n tagContent: e.substring(s, r),\n i\n };\n r = i;\n } else if (e[r + 1] === \"?\")\n r = y(e, \"?>\", r + 1, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 3) === \"!--\")\n r = y(e, \"-->\", r + 3, \"StopNode is not closed.\");\n else if (e.substr(r + 1, 2) === \"![\")\n r = y(e, \"]]>\", r, \"StopNode is not closed.\") - 2;\n else {\n const i = x(e, r, \">\");\n i && ((i && i.tagName) === t && i.tagExp[i.tagExp.length - 1] !== \"/\" && n++, r = i.closeIndex);\n }\n}\nfunction $(e, t, r) {\n if (t && typeof e == \"string\") {\n const s = e.trim();\n return s === \"true\" ? !0 : s === \"false\" ? !1 : rt(e, r);\n } else\n return B.isExist(e) ? e : \"\";\n}\nvar wt = nt, ne = {};\nfunction mt(e, t) {\n return ie(e, t);\n}\nfunction ie(e, t, r) {\n let s;\n const n = {};\n for (let i = 0; i < e.length; i++) {\n const d = e[i], u = Nt(d);\n let o = \"\";\n if (r === void 0 ? o = u : o = r + \".\" + u, u === t.textNodeName)\n s === void 0 ? s = d[u] : s += \"\" + d[u];\n else {\n if (u === void 0)\n continue;\n if (d[u]) {\n let a = ie(d[u], t, o);\n const l = bt(a, t);\n d[\":@\"] ? Et(a, d[\":@\"], o, t) : Object.keys(a).length === 1 && a[t.textNodeName] !== void 0 && !t.alwaysCreateTextNode ? a = a[t.textNodeName] : Object.keys(a).length === 0 && (t.alwaysCreateTextNode ? a[t.textNodeName] = \"\" : a = \"\"), n[u] !== void 0 && n.hasOwnProperty(u) ? (Array.isArray(n[u]) || (n[u] = [n[u]]), n[u].push(a)) : t.isArray(u, o, l) ? n[u] = [a] : n[u] = a;\n }\n }\n }\n return typeof s == \"string\" ? s.length > 0 && (n[t.textNodeName] = s) : s !== void 0 && (n[t.textNodeName] = s), n;\n}\nfunction Nt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (s !== \":@\")\n return s;\n }\n}\nfunction Et(e, t, r, s) {\n if (t) {\n const n = Object.keys(t), i = n.length;\n for (let d = 0; d < i; d++) {\n const u = n[d];\n s.isArray(u, r + \".\" + u, !0, !0) ? e[u] = [t[u]] : e[u] = t[u];\n }\n }\n}\nfunction bt(e, t) {\n const { textNodeName: r } = t, s = Object.keys(e).length;\n return !!(s === 0 || s === 1 && (e[r] || typeof e[r] == \"boolean\" || e[r] === 0));\n}\nne.prettify = mt;\nconst { buildOptions: yt } = k, _t = wt, { prettify: vt } = ne, Tt = S;\nlet It = class {\n constructor(t) {\n this.externalEntities = {}, this.options = yt(t);\n }\n /**\n * Parse XML dats to JS object \n * @param {string|Buffer} xmlData \n * @param {boolean|Object} validationOption \n */\n parse(t, r) {\n if (typeof t != \"string\")\n if (t.toString)\n t = t.toString();\n else\n throw new Error(\"XML data is accepted in String or Bytes[] form.\");\n if (r) {\n r === !0 && (r = {});\n const i = Tt.validate(t, r);\n if (i !== !0)\n throw Error(`${i.err.msg}:${i.err.line}:${i.err.col}`);\n }\n const s = new _t(this.options);\n s.addExternalEntities(this.externalEntities);\n const n = s.parseXml(t);\n return this.options.preserveOrder || n === void 0 ? n : vt(n, this.options);\n }\n /**\n * Add Entity which is not by default supported by this library\n * @param {string} key \n * @param {string} value \n */\n addEntity(t, r) {\n if (r.indexOf(\"&\") !== -1)\n throw new Error(\"Entity value can't have '&'\");\n if (t.indexOf(\"&\") !== -1 || t.indexOf(\";\") !== -1)\n throw new Error(\"An entity must be set without '&' and ';'. Eg. use '#xD' for '
'\");\n if (r === \"&\")\n throw new Error(\"An entity with value '&' is not permitted\");\n this.externalEntities[t] = r;\n }\n};\nvar At = It;\nconst Ot = `\n`;\nfunction Ct(e, t) {\n let r = \"\";\n return t.format && t.indentBy.length > 0 && (r = Ot), se(e, t, \"\", r);\n}\nfunction se(e, t, r, s) {\n let n = \"\", i = !1;\n for (let d = 0; d < e.length; d++) {\n const u = e[d], o = Pt(u);\n if (o === void 0)\n continue;\n let a = \"\";\n if (r.length === 0 ? a = o : a = `${r}.${o}`, o === t.textNodeName) {\n let h = u[o];\n xt(a, t) || (h = t.tagValueProcessor(o, h), h = oe(h, t)), i && (n += s), n += h, i = !1;\n continue;\n } else if (o === t.cdataPropName) {\n i && (n += s), n += `<![CDATA[${u[o][0][t.textNodeName]}]]>`, i = !1;\n continue;\n } else if (o === t.commentPropName) {\n n += s + `<!--${u[o][0][t.textNodeName]}-->`, i = !0;\n continue;\n } else if (o[0] === \"?\") {\n const h = K(u[\":@\"], t), _ = o === \"?xml\" ? \"\" : s;\n let E = u[o][0][t.textNodeName];\n E = E.length !== 0 ? \" \" + E : \"\", n += _ + `<${o}${E}${h}?>`, i = !0;\n continue;\n }\n let l = s;\n l !== \"\" && (l += t.indentBy);\n const f = K(u[\":@\"], t), c = s + `<${o}${f}`, g = se(u[o], t, a, l);\n t.unpairedTags.indexOf(o) !== -1 ? t.suppressUnpairedNode ? n += c + \">\" : n += c + \"/>\" : (!g || g.length === 0) && t.suppressEmptyNode ? n += c + \"/>\" : g && g.endsWith(\">\") ? n += c + `>${g}${s}</${o}>` : (n += c + \">\", g && s !== \"\" && (g.includes(\"/>\") || g.includes(\"</\")) ? n += s + t.indentBy + g + s : n += g, n += `</${o}>`), i = !0;\n }\n return n;\n}\nfunction Pt(e) {\n const t = Object.keys(e);\n for (let r = 0; r < t.length; r++) {\n const s = t[r];\n if (e.hasOwnProperty(s) && s !== \":@\")\n return s;\n }\n}\nfunction K(e, t) {\n let r = \"\";\n if (e && !t.ignoreAttributes)\n for (let s in e) {\n if (!e.hasOwnProperty(s))\n continue;\n let n = t.attributeValueProcessor(s, e[s]);\n n = oe(n, t), n === !0 && t.suppressBooleanAttributes ? r += ` ${s.substr(t.attributeNamePrefix.length)}` : r += ` ${s.substr(t.attributeNamePrefix.length)}=\"${n}\"`;\n }\n return r;\n}\nfunction xt(e, t) {\n e = e.substr(0, e.length - t.textNodeName.length - 1);\n let r = e.substr(e.lastIndexOf(\".\") + 1);\n for (let s in t.stopNodes)\n if (t.stopNodes[s] === e || t.stopNodes[s] === \"*.\" + r)\n return !0;\n return !1;\n}\nfunction oe(e, t) {\n if (e && e.length > 0 && t.processEntities)\n for (let r = 0; r < t.entities.length; r++) {\n const s = t.entities[r];\n e = e.replace(s.regex, s.val);\n }\n return e;\n}\nvar $t = Ct;\nconst Ft = $t, Vt = {\n attributeNamePrefix: \"@_\",\n attributesGroupName: !1,\n textNodeName: \"#text\",\n ignoreAttributes: !0,\n cdataPropName: !1,\n format: !1,\n indentBy: \" \",\n suppressEmptyNode: !1,\n suppressUnpairedNode: !0,\n suppressBooleanAttributes: !0,\n tagValueProcessor: function(e, t) {\n return t;\n },\n attributeValueProcessor: function(e, t) {\n return t;\n },\n preserveOrder: !1,\n commentPropName: !1,\n unpairedTags: [],\n entities: [\n { regex: new RegExp(\"&\", \"g\"), val: \"&\" },\n //it must be on top\n { regex: new RegExp(\">\", \"g\"), val: \">\" },\n { regex: new RegExp(\"<\", \"g\"), val: \"<\" },\n { regex: new RegExp(\"'\", \"g\"), val: \"'\" },\n { regex: new RegExp('\"', \"g\"), val: \""\" }\n ],\n processEntities: !0,\n stopNodes: [],\n // transformTagName: false,\n // transformAttributeName: false,\n oneListGroup: !1\n};\nfunction b(e) {\n this.options = Object.assign({}, Vt, e), this.options.ignoreAttributes || this.options.attributesGroupName ? this.isAttribute = function() {\n return !1;\n } : (this.attrPrefixLen = this.options.attributeNamePrefix.length, this.isAttribute = St), this.processTextOrObjNode = Lt, this.options.format ? (this.indentate = Rt, this.tagEndChar = `>\n`, this.newLine = `\n`) : (this.indentate = function() {\n return \"\";\n }, this.tagEndChar = \">\", this.newLine = \"\");\n}\nb.prototype.build = function(e) {\n return this.options.preserveOrder ? Ft(e, this.options) : (Array.isArray(e) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1 && (e = {\n [this.options.arrayNodeName]: e\n }), this.j2x(e, 0).val);\n};\nb.prototype.j2x = function(e, t) {\n let r = \"\", s = \"\";\n for (let n in e)\n if (Object.prototype.hasOwnProperty.call(e, n))\n if (typeof e[n] > \"u\")\n this.isAttribute(n) && (s += \"\");\n else if (e[n] === null)\n this.isAttribute(n) ? s += \"\" : n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar;\n else if (e[n] instanceof Date)\n s += this.buildTextValNode(e[n], n, \"\", t);\n else if (typeof e[n] != \"object\") {\n const i = this.isAttribute(n);\n if (i)\n r += this.buildAttrPairStr(i, \"\" + e[n]);\n else if (n === this.options.textNodeName) {\n let d = this.options.tagValueProcessor(n, \"\" + e[n]);\n s += this.replaceEntitiesValue(d);\n } else\n s += this.buildTextValNode(e[n], n, \"\", t);\n } else if (Array.isArray(e[n])) {\n const i = e[n].length;\n let d = \"\";\n for (let u = 0; u < i; u++) {\n const o = e[n][u];\n typeof o > \"u\" || (o === null ? n[0] === \"?\" ? s += this.indentate(t) + \"<\" + n + \"?\" + this.tagEndChar : s += this.indentate(t) + \"<\" + n + \"/\" + this.tagEndChar : typeof o == \"object\" ? this.options.oneListGroup ? d += this.j2x(o, t + 1).val : d += this.processTextOrObjNode(o, n, t) : d += this.buildTextValNode(o, n, \"\", t));\n }\n this.options.oneListGroup && (d = this.buildObjectNode(d, n, \"\", t)), s += d;\n } else if (this.options.attributesGroupName && n === this.options.attributesGroupName) {\n const i = Object.keys(e[n]), d = i.length;\n for (let u = 0; u < d; u++)\n r += this.buildAttrPairStr(i[u], \"\" + e[n][i[u]]);\n } else\n s += this.processTextOrObjNode(e[n], n, t);\n return { attrStr: r, val: s };\n};\nb.prototype.buildAttrPairStr = function(e, t) {\n return t = this.options.attributeValueProcessor(e, \"\" + t), t = this.replaceEntitiesValue(t), this.options.suppressBooleanAttributes && t === \"true\" ? \" \" + e : \" \" + e + '=\"' + t + '\"';\n};\nfunction Lt(e, t, r) {\n const s = this.j2x(e, r + 1);\n return e[this.options.textNodeName] !== void 0 && Object.keys(e).length === 1 ? this.buildTextValNode(e[this.options.textNodeName], t, s.attrStr, r) : this.buildObjectNode(s.val, t, s.attrStr, r);\n}\nb.prototype.buildObjectNode = function(e, t, r, s) {\n if (e === \"\")\n return t[0] === \"?\" ? this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar : this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar;\n {\n let n = \"</\" + t + this.tagEndChar, i = \"\";\n return t[0] === \"?\" && (i = \"?\", n = \"\"), (r || r === \"\") && e.indexOf(\"<\") === -1 ? this.indentate(s) + \"<\" + t + r + i + \">\" + e + n : this.options.commentPropName !== !1 && t === this.options.commentPropName && i.length === 0 ? this.indentate(s) + `<!--${e}-->` + this.newLine : this.indentate(s) + \"<\" + t + r + i + this.tagEndChar + e + this.indentate(s) + n;\n }\n};\nb.prototype.closeTag = function(e) {\n let t = \"\";\n return this.options.unpairedTags.indexOf(e) !== -1 ? this.options.suppressUnpairedNode || (t = \"/\") : this.options.suppressEmptyNode ? t = \"/\" : t = `></${e}`, t;\n};\nb.prototype.buildTextValNode = function(e, t, r, s) {\n if (this.options.cdataPropName !== !1 && t === this.options.cdataPropName)\n return this.indentate(s) + `<![CDATA[${e}]]>` + this.newLine;\n if (this.options.commentPropName !== !1 && t === this.options.commentPropName)\n return this.indentate(s) + `<!--${e}-->` + this.newLine;\n if (t[0] === \"?\")\n return this.indentate(s) + \"<\" + t + r + \"?\" + this.tagEndChar;\n {\n let n = this.options.tagValueProcessor(t, e);\n return n = this.replaceEntitiesValue(n), n === \"\" ? this.indentate(s) + \"<\" + t + r + this.closeTag(t) + this.tagEndChar : this.indentate(s) + \"<\" + t + r + \">\" + n + \"</\" + t + this.tagEndChar;\n }\n};\nb.prototype.replaceEntitiesValue = function(e) {\n if (e && e.length > 0 && this.options.processEntities)\n for (let t = 0; t < this.options.entities.length; t++) {\n const r = this.options.entities[t];\n e = e.replace(r.regex, r.val);\n }\n return e;\n};\nfunction Rt(e) {\n return this.options.indentBy.repeat(e);\n}\nfunction St(e) {\n return e.startsWith(this.options.attributeNamePrefix) && e !== this.options.textNodeName ? e.substr(this.attrPrefixLen) : !1;\n}\nvar Mt = b;\nconst kt = S, Bt = At, qt = Mt;\nvar W = {\n XMLParser: Bt,\n XMLValidator: kt,\n XMLBuilder: qt\n};\nfunction Xt(e) {\n if (typeof e != \"string\")\n throw new TypeError(`Expected a \\`string\\`, got \\`${typeof e}\\``);\n if (e = e.trim(), e.length === 0 || W.XMLValidator.validate(e) !== !0)\n return !1;\n let t;\n const r = new W.XMLParser();\n try {\n t = r.parse(e);\n } catch {\n return !1;\n }\n return !(!t || !(\"svg\" in t));\n}\n/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass cr {\n _view;\n constructor(t) {\n Ut(t), this._view = t;\n }\n get id() {\n return this._view.id;\n }\n get name() {\n return this._view.name;\n }\n get caption() {\n return this._view.caption;\n }\n get emptyTitle() {\n return this._view.emptyTitle;\n }\n get emptyCaption() {\n return this._view.emptyCaption;\n }\n get getContents() {\n return this._view.getContents;\n }\n get icon() {\n return this._view.icon;\n }\n set icon(t) {\n this._view.icon = t;\n }\n get order() {\n return this._view.order;\n }\n set order(t) {\n this._view.order = t;\n }\n get params() {\n return this._view.params;\n }\n set params(t) {\n this._view.params = t;\n }\n get columns() {\n return this._view.columns;\n }\n get emptyView() {\n return this._view.emptyView;\n }\n get parent() {\n return this._view.parent;\n }\n get sticky() {\n return this._view.sticky;\n }\n get expanded() {\n return this._view.expanded;\n }\n set expanded(t) {\n this._view.expanded = t;\n }\n get defaultSortKey() {\n return this._view.defaultSortKey;\n }\n}\nconst Ut = function(e) {\n if (!e.id || typeof e.id != \"string\")\n throw new Error(\"View id is required and must be a string\");\n if (!e.name || typeof e.name != \"string\")\n throw new Error(\"View name is required and must be a string\");\n if (e.columns && e.columns.length > 0 && (!e.caption || typeof e.caption != \"string\"))\n throw new Error(\"View caption is required for top-level views and must be a string\");\n if (!e.getContents || typeof e.getContents != \"function\")\n throw new Error(\"View getContents is required and must be a function\");\n if (!e.icon || typeof e.icon != \"string\" || !Xt(e.icon))\n throw new Error(\"View icon is required and must be a valid svg string\");\n if (!(\"order\" in e) || typeof e.order != \"number\")\n throw new Error(\"View order is required and must be a number\");\n if (e.columns && e.columns.forEach((t) => {\n if (!(t instanceof Ie))\n throw new Error(\"View columns must be an array of Column. Invalid column found\");\n }), e.emptyView && typeof e.emptyView != \"function\")\n throw new Error(\"View emptyView must be a function\");\n if (e.parent && typeof e.parent != \"string\")\n throw new Error(\"View parent must be a string\");\n if (\"sticky\" in e && typeof e.sticky != \"boolean\")\n throw new Error(\"View sticky must be a boolean\");\n if (\"expanded\" in e && typeof e.expanded != \"boolean\")\n throw new Error(\"View expanded must be a boolean\");\n if (e.defaultSortKey && typeof e.defaultSortKey != \"string\")\n throw new Error(\"View defaultSortKey must be a string\");\n return !0;\n};\n/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst hr = function(e) {\n return F().registerEntry(e);\n}, pr = function(e) {\n return F().unregisterEntry(e);\n}, gr = function(e) {\n return F().getEntries(e).sort((r, s) => r.order !== void 0 && s.order !== void 0 && r.order !== s.order ? r.order - s.order : r.displayName.localeCompare(s.displayName, void 0, { numeric: !0, sensitivity: \"base\" }));\n};\nexport {\n Ie as Column,\n Z as DefaultType,\n ye as File,\n Qt as FileAction,\n R as FileType,\n _e as Folder,\n tr as Header,\n Te as Navigation,\n D as Node,\n Q as NodeStatus,\n N as Permission,\n cr as View,\n hr as addNewFileMenuEntry,\n ur as davGetClient,\n sr as davGetDefaultPropfind,\n Ee as davGetFavoritesReport,\n or as davGetRecentSearch,\n be as davParsePermissions,\n te as davRemoteURL,\n ve as davResultToNode,\n ee as davRootPath,\n Y as defaultDavNamespaces,\n j as defaultDavProperties,\n Yt as formatFileSize,\n L as getDavNameSpaces,\n V as getDavProperties,\n dr as getFavoriteNodes,\n er as getFileActions,\n nr as getFileListHeaders,\n ar as getNavigation,\n gr as getNewFileMenuEntries,\n Jt as parseFileSize,\n ir as registerDavProperty,\n Dt as registerFileAction,\n rr as registerFileListHeaders,\n pr as removeNewFileMenuEntry\n};\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 \"\" + ({\"3239\":\"settings-users\",\"4529\":\"settings-apps-view\"}[chunkId] || chunkId) + \"-\" + chunkId + \".js?v=\" + {\"1359\":\"d217768bf3f39a7359dd\",\"1439\":\"41c39783c33a6fb28f5c\",\"1544\":\"d535e8c8987669bcb7a2\",\"3239\":\"b380e9fda46ca498c72f\",\"3865\":\"1b3dd2786e4df4dcbf8d\",\"4529\":\"114316009107c5c2ca02\",\"8618\":\"1e8f15db3b14455fef8f\",\"8630\":\"eb1ab06c4928352754c5\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2689;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\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(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2689: 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 = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4208], () => (__webpack_require__(74329)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","sanitize","url","replace","requireAdmin","confirmPassword","get","options","axios","post","data","put","delete","params","localStorage","getBuilder","persist","build","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","name","localeCompare","defaults","id","canAdd","canRemove","state","users","minPasswordLength","usersOffset","usersLimit","disabledUsersOffset","disabledUsersLimit","userCount","showConfig","showStoragePath","getItem","showUserBackend","showLastLogin","showNewUserForm","showLanguages","mutations","appendUsers","usersObj","existingUsers","map","_ref","newUsers","Object","values","filter","_ref2","includes","concat","updateDisabledUsers","_usersObj","setPasswordPolicyMinLength","length","initGroups","_ref3","group","assign","addGroup","_ref4","gid","displayName","find","unshift","e","console","error","renameGroup","_ref5","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","_ref6","userid","user","enabled","push","removeUserGroup","_ref7","indexOf","addUserSubAdmin","_ref8","subadmin","removeUserSubAdmin","_ref9","deleteUser","userIndex","this","commit","actionType","addUserData","response","ocs","enableDisableUser","_ref10","updateUserCounts","_ref11","disabledGroup","forEach","userGroup","warn","logger","setUserData","_ref12","key","value","humanValue","parseFileSize","resetUsers","setShowConfig","_ref13","setItem","JSON","stringify","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getDisabledUsersOffset","getDisabledUsersLimit","getUserCount","getShowConfig","actions","searchUsers","context","_ref14","offset","limit","search","api","generateOcsUrl","catch","isCancel","getUser","userId","_ref15","cancel","source","trim","encodeURIComponent","cancelToken","token","then","usersCount","keys","getDisabledUsers","_ref16","_ref17","limitParam","getUsersFromList","_ref18","getUsersFromGroup","_ref19","groupid","groupId","getCapabilities","password_policy","minLength","_ref20","_ref21","_ref22","_ref23","_ref24","wipeUserDevices","addUser","_ref25","_ref26","dispatch","password","email","quota","language","manager","_ref27","userStatus","_ref28","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","isHTML","initCategories","categories","updateCount","updateCategories","categoriesPromise","gettingCategoriesPromise","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","setInstallState","canInstall","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","updateApp","version","update","resetApps","reset","startLoading","Vue","loading","stopLoading","generateUrl","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","finally","getAllApps","getCategories","shouldRefetchCategories","arguments","undefined","categoriesPromiseResponse","bundles","loadState","getAppBundles","getUpdateCount","getCategoryById","selectedCategoryId","setServerData","serverData","getServerData","setAppConfig","use","Vuex","API_FAILURE","meta","store","useStore","Store","modules","settings","oc","strict","process","getLoggerBuilder","setApp","detectUser","_defineComponent","__name","setup","__props","__sfc","NcContent","_vm","_c","_self","_setupProxy","attrs","_v","path","components","default","UserManagement","navigation","UserManagementNavigation","props","children","redirect","AppStore","AppStoreNavigation","sidebar","AppStoreSidebar","Router","mode","base","linkActiveClass","routes","VTooltip","defaultHtml","sync","router","__webpack_nonce__","btoa","_getRequestToken","getRequestToken","prototype","n","PiniaVuePlugin","pinia","createPinia","render","h","SettingsApp","el","extend","encodeReserveRE","encodeReserveReplacer","c","charCodeAt","toString","commaRE","encode","str","decode","decodeURIComponent","err","castQueryParamValue","String","parseQuery","query","res","split","param","parts","shift","val","join","stringifyQuery","obj","result","val2","x","trailingSlashRE","createRoute","record","redirectedFrom","clone","route","hash","fullPath","getFullPath","matched","formatMatch","freeze","START","parent","ref","_stringifyQuery","isSameRoute","onlyPath","isObjectEqual","aKeys","bKeys","every","i","aVal","bVal","handleRouteEntered","instances","instance","cbs","enteredCbs","i$1","_isBeingDestroyed","View","functional","type","_","routerView","$createElement","$route","cache","_routerViewCache","depth","inactive","_routerRoot","vnodeData","$vnode","keepAlive","_directInactive","_inactive","$parent","routerViewDepth","cachedData","cachedComponent","component","configProps","fillPropsinData","registerRouteInstance","vm","current","hook","prepatch","vnode","componentInstance","init","propsToPass","config","resolveProps","resolvePath","relative","append","firstChar","charAt","stack","pop","segments","segment","cleanPath","isarray","arr","call","pathToRegexp_1","pathToRegexp","RegExp","match","prefix","delimiter","optional","repeat","partial","asterisk","pattern","attachKeys","regexpToRegexp","flags","arrayToRegexp","tokensToRegExp","parse","stringToRegexp","parse_1","tokensToFunction_1","tokensToFunction","tokensToRegExp_1","PATH_REGEXP","tokens","index","defaultDelimiter","exec","m","escaped","slice","next","capture","modifier","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","pretty","TypeError","j","test","re","sensitive","end","endsWithDelimiter","compile","regexpCompileCache","create","fillParams","routeMsg","filler","pathMatch","normalizeLocation","raw","_normalized","params$1","rawPath","parsedPath","hashIndex","queryIndex","parsePath","basePath","extraQuery","_parseQuery","parsedQuery","resolveQuery","_Vue","noop","Link","to","required","tag","custom","Boolean","exact","exactPath","activeClass","exactActiveClass","ariaCurrentValue","event","this$1$1","$router","resolve","href","classes","globalActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","target","queryIncludes","isIncludedRoute","handler","guardEvent","on","click","class","scopedSlot","$scopedSlots","$hasNormal","navigate","isActive","isExactActive","findAnchor","$slots","isStatic","aData","handler$1","event$1","aAttrs","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","currentTarget","getAttribute","preventDefault","child","inBrowser","createRouteMap","oldPathList","oldPathMap","oldNameMap","parentRoute","pathList","pathMap","nameMap","addRouteRecord","l","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","alias","beforeEnter","childMatchAs","aliases","aliasRoute","createMatcher","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","hasOwnProperty","resolveRecordPath","aliasedMatch","aliasedRecord","addRoute","parentOrRoute","getRoutes","addRoutes","len","Time","performance","now","Date","genStateKey","toFixed","_key","getStateKey","setStateKey","positionStore","setupScroll","history","scrollRestoration","protocolAndPath","protocol","host","absolutePath","stateCopy","replaceState","addEventListener","handlePopState","removeEventListener","handleScroll","from","isPop","behavior","scrollBehavior","$nextTick","position","getScrollPosition","shouldScroll","scrollToPosition","saveScrollPosition","pageXOffset","y","pageYOffset","isValidPosition","isNumber","normalizePosition","v","hashStartsWithNumberRE","isObject","selector","document","getElementById","querySelector","docRect","documentElement","getBoundingClientRect","elRect","left","top","getElementPosition","style","scrollTo","ua","supportsPushState","navigator","userAgent","pushState","NavigationFailureType","redirected","aborted","cancelled","duplicated","createNavigationCancelledError","createRouterError","_isRouter","propertiesToLog","isError","isNavigationFailure","errorType","runQueue","queue","fn","cb","step","flatMapComponents","flatten","apply","hasSymbol","Symbol","toStringTag","once","called","args","History","baseEl","normalizeBase","pending","ready","readyCbs","readyErrorCbs","errorCbs","listeners","extractGuards","records","bind","reverse","guards","def","guard","extractGuard","bindGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","prev","confirmTransition","updateRoute","ensureURL","afterHooks","abort","lastRouteIndex","lastCurrentIndex","max","Math","updated","activated","deactivated","resolveQueue","extractLeaveGuards","beforeHooks","extractUpdateHooks","hasAsync","cid","resolvedDef","__esModule","resolved","reason","msg","comp","iterator","createNavigationAbortedError","createNavigationRedirectedError","enterGuards","bindEnterGuard","extractEnterGuards","resolveHooks","setupListeners","teardown","cleanupListener","HTML5History","_startLocation","getLocation","__proto__","constructor","expectScroll","supportsScroll","handleRoutingEvent","go","fromRoute","getCurrentLocation","pathname","pathLowerCase","toLowerCase","baseLowerCase","HashHistory","fallback","checkFallback","ensureSlash","getHash","replaceHash","eventType","pushHash","getUrl","AbstractHistory","targetIndex","VueRouter","matcher","prototypeAccessors","configurable","$once","routeOrError","handleInitialScroll","_route","beforeEach","registerHook","beforeResolve","afterEach","back","forward","getMatchedComponents","createHref","normalizedTo","defineProperties","VueRouter$1","list","install","isDef","registerInstance","callVal","$options","_parentVnode","mixin","beforeCreate","_router","util","defineReactive","destroyed","defineProperty","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","START_LOCATION","cloneRoute","exports","moduleName","registerModule","namespaced","transition","currentPath","isTimeTraveling","storeUnwatch","watch","afterEachUnHook","unregisterModule","setUid","uid","C","P","Yt","r","s","Number","floor","log","min","d","pow","parseFloat","toLocaleString","Jt","toLocaleLowerCase","replaceAll","round","k","g","p","N","NONE","CREATE","READ","UPDATE","DELETE","SHARE","ALL","Y","nc","V","_nc_dav_properties","L","_nc_dav_namespaces","sr","or","R","Folder","File","J","X","URL","startsWith","mtime","crtime","mime","size","permissions","owner","attributes","root","status","Q","NEW","FAILED","LOADING","LOCKED","D","_data","_attributes","_knownDavService","set","updateMtime","Reflect","deleteProperty","Proxy","encodedSource","origin","basename","extension","dirname","isDavRessource","fileid","move","rename","ye","_e","super","ee","te","ur","headers","setHeaders","requesttoken","patch","u","method","fetch","dr","async","getDirectoryContents","details","includeSelf","filename","ve","be","lastmod","parseInt","getcontentlength","hasPreview","O","isExist","isEmptyObject","merge","o","f","getValue","isName","getAllMatches","startIndex","lastIndex","nameRegexp","preserveOrder","attributeNamePrefix","attributesGroupName","textNodeName","ignoreAttributes","removeNSPrefix","allowBooleanAttributes","parseTagValue","parseAttributeValue","trimValues","cdataPropName","numberParseOptions","hex","leadingZeros","eNotation","tagValueProcessor","attributeValueProcessor","stopNodes","alwaysCreateTextNode","commentPropName","unpairedTags","processEntities","htmlEntities","ignoreDeclaration","ignorePiTags","transformTagName","transformAttributeName","updateTag","buildOptions","defaultOptions","ne","ie","Nt","bt","Et","prettify","yt","vt","se","Pt","xt","oe","K","E","indentBy","suppressUnpairedNode","suppressEmptyNode","endsWith","suppressBooleanAttributes","lastIndexOf","entities","Ft","format","Vt","oneListGroup","isAttribute","attrPrefixLen","St","processTextOrObjNode","Lt","indentate","Rt","tagEndChar","newLine","j2x","buildTextValNode","attrStr","buildObjectNode","arrayNodeName","buildAttrPairStr","replaceEntitiesValue","closeTag","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","loaded","__webpack_modules__","chunkIds","priority","notFulfilled","Infinity","fulfilled","getter","definition","enumerable","chunkId","all","reduce","promises","globalThis","Function","prop","done","script","needAttach","scripts","getElementsByTagName","createElement","charset","timeout","setAttribute","src","onScriptComplete","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","head","appendChild","nmd","paths","scriptUrl","importScripts","currentScript","baseURI","self","installedChunks","installedChunkData","promise","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file diff --git a/lib/l10n/fa.js b/lib/l10n/fa.js index 81029756700..73d57c3ca42 100644 --- a/lib/l10n/fa.js +++ b/lib/l10n/fa.js @@ -14,7 +14,7 @@ OC.L10N.register( "Click the following button to confirm your email." : "Click the following button to confirm your email.", "Click the following link to confirm your email." : "Click the following link to confirm your email.", "Confirm your email" : "Confirm your email", - "Other activities" : "Other activities", + "Other activities" : "سایر فعالیت ها", "%1$s and %2$s" : "%1$sو%2$s", "%1$s, %2$s and %3$s" : "%1$s،%2$sو%3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s،%2$s،%3$sو%4$s", diff --git a/lib/l10n/fa.json b/lib/l10n/fa.json index f519eb24ed5..c42c47b3f5e 100644 --- a/lib/l10n/fa.json +++ b/lib/l10n/fa.json @@ -12,7 +12,7 @@ "Click the following button to confirm your email." : "Click the following button to confirm your email.", "Click the following link to confirm your email." : "Click the following link to confirm your email.", "Confirm your email" : "Confirm your email", - "Other activities" : "Other activities", + "Other activities" : "سایر فعالیت ها", "%1$s and %2$s" : "%1$sو%2$s", "%1$s, %2$s and %3$s" : "%1$s،%2$sو%3$s", "%1$s, %2$s, %3$s and %4$s" : "%1$s،%2$s،%3$sو%4$s", diff --git a/lib/l10n/uk.js b/lib/l10n/uk.js index ed167b98b77..2be78b8b47e 100644 --- a/lib/l10n/uk.js +++ b/lib/l10n/uk.js @@ -23,6 +23,7 @@ OC.L10N.register( "Enterprise bundle" : "Для бізнесу", "Groupware bundle" : "Для робочих груп", "Hub bundle" : "Основні застосунки", + "Public sector bundle" : "Для громадських організацій", "Social sharing bundle" : "Для соціальних мереж", "PHP %s or higher is required." : "Необхідно PHP %s або вище", "PHP with a version lower than %s is required." : "Потрібна версія PHP нижче %s ", diff --git a/lib/l10n/uk.json b/lib/l10n/uk.json index c23256a857c..3c8d3adbad0 100644 --- a/lib/l10n/uk.json +++ b/lib/l10n/uk.json @@ -21,6 +21,7 @@ "Enterprise bundle" : "Для бізнесу", "Groupware bundle" : "Для робочих груп", "Hub bundle" : "Основні застосунки", + "Public sector bundle" : "Для громадських організацій", "Social sharing bundle" : "Для соціальних мереж", "PHP %s or higher is required." : "Необхідно PHP %s або вище", "PHP with a version lower than %s is required." : "Потрібна версія PHP нижче %s ", diff --git a/lib/private/App/AppStore/Fetcher/AppDiscoverFetcher.php b/lib/private/App/AppStore/Fetcher/AppDiscoverFetcher.php index 48dba6d48dc..46a18eb4c32 100644 --- a/lib/private/App/AppStore/Fetcher/AppDiscoverFetcher.php +++ b/lib/private/App/AppStore/Fetcher/AppDiscoverFetcher.php @@ -61,41 +61,41 @@ class AppDiscoverFetcher extends Fetcher { /** * Get the app discover section entries * - * @param bool $allowUnstable Include also expired and upcoming entries + * @param bool $allowUnstable Include also upcoming entries */ public function get($allowUnstable = false) { $entries = parent::get(false); + $now = new DateTimeImmutable(); - if (!$allowUnstable) { - $now = new DateTimeImmutable(); - - // Remove expired or future entries - return array_filter($entries, function (array $entry) use ($now) { + return array_filter($entries, function (array $entry) use ($now, $allowUnstable) { + // Always remove expired entries + if (isset($entry['expiryDate'])) { try { - $date = new DateTimeImmutable($entry['date'] ?? ''); - if ($date > $now) { + $expiryDate = new DateTimeImmutable($entry['expiryDate']); + if ($expiryDate < $now) { return false; } } catch (\Throwable $e) { - // Invalid date format + // Invalid expiryDate format return false; } + } + // If not include upcoming entries, check for upcoming dates and remove those entries + if (!$allowUnstable && isset($entry['date'])) { try { - $expiryDate = new DateTimeImmutable($entry['expiryDate'] ?? ''); - if ($expiryDate < $now) { + $date = new DateTimeImmutable($entry['date']); + if ($date > $now) { return false; } } catch (\Throwable $e) { - // Invalid expiryDate format + // Invalid date format return false; } - - return true; - }); - } - - return $entries; + } + // Otherwise the entry is not time limited and should stay + return true; + }); } public function getETag(): string|null { diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index a5273d2f335..5fff0aec9d8 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -302,7 +302,8 @@ class DIContainer extends SimpleContainer implements IAppContainer { $c->get(IRequest::class), $c->get(IUserSession::class), $c->get(IControllerMethodReflector::class), - $c->get(OC\Security\RateLimiting\Limiter::class) + $c->get(OC\Security\RateLimiting\Limiter::class), + $c->get(ISession::class) ) ); $dispatcher->registerMiddleware( diff --git a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php index 6f84a0c94d0..ffaa0cd19cb 100644 --- a/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php +++ b/lib/private/AppFramework/Middleware/Security/RateLimitingMiddleware.php @@ -40,6 +40,7 @@ use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Middleware; use OCP\IRequest; +use OCP\ISession; use OCP\IUserSession; use ReflectionMethod; @@ -70,6 +71,7 @@ class RateLimitingMiddleware extends Middleware { protected IUserSession $userSession, protected ControllerMethodReflector $reflector, protected Limiter $limiter, + protected ISession $session, ) { } @@ -81,6 +83,11 @@ class RateLimitingMiddleware extends Middleware { parent::beforeController($controller, $methodName); $rateLimitIdentifier = get_class($controller) . '::' . $methodName; + if ($this->session->exists('app_api_system')) { + // Bypass rate limiting for app_api + return; + } + if ($this->userSession->isLoggedIn()) { $rateLimit = $this->readLimitFromAnnotationOrAttribute($controller, $methodName, 'UserRateThrottle', UserRateLimit::class); diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php index 36d7002a269..5ad48e26cc5 100644 --- a/lib/private/Files/View.php +++ b/lib/private/Files/View.php @@ -1481,6 +1481,13 @@ class View { //add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders $mounts = Filesystem::getMountManager()->findIn($path); + + // make sure nested mounts are sorted after their parent mounts + // otherwise doesn't propagate the etag across storage boundaries correctly + usort($mounts, function (IMountPoint $a, IMountPoint $b) { + return $a->getMountPoint() <=> $b->getMountPoint(); + }); + $dirLength = strlen($path); foreach ($mounts as $mount) { $mountPoint = $mount->getMountPoint(); diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php index 213423d4755..c22c65f6c7b 100644 --- a/lib/private/Share20/DefaultShareProvider.php +++ b/lib/private/Share20/DefaultShareProvider.php @@ -1153,10 +1153,12 @@ class DefaultShareProvider implements IShareProvider { $stmt = $query->execute(); while ($data = $stmt->fetch()) { - $shareMap[$data['parent']]->setPermissions((int)$data['permissions']); - $shareMap[$data['parent']]->setStatus((int)$data['accepted']); - $shareMap[$data['parent']]->setTarget($data['file_target']); - $shareMap[$data['parent']]->setParent($data['parent']); + if (array_key_exists($data['parent'], $shareMap)) { + $shareMap[$data['parent']]->setPermissions((int)$data['permissions']); + $shareMap[$data['parent']]->setStatus((int)$data['accepted']); + $shareMap[$data['parent']]->setTarget($data['file_target']); + $shareMap[$data['parent']]->setParent($data['parent']); + } } return array_values($shareMap); diff --git a/tests/lib/App/AppStore/Fetcher/AppDiscoverFetcherTest.php b/tests/lib/App/AppStore/Fetcher/AppDiscoverFetcherTest.php new file mode 100644 index 00000000000..b45a014ead1 --- /dev/null +++ b/tests/lib/App/AppStore/Fetcher/AppDiscoverFetcherTest.php @@ -0,0 +1,133 @@ +<?php +/** + * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de> + * + * @author Ferdinand Thiessen <opensource@fthiessen.de> + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace Test\App\AppStore\Fetcher; + +use OC\App\AppStore\Fetcher\AppDiscoverFetcher; +use OC\App\CompareVersion; +use OCP\Files\NotFoundException; +use OCP\Files\SimpleFS\ISimpleFile; +use OCP\Files\SimpleFS\ISimpleFolder; +use PHPUnit\Framework\MockObject\MockObject; + +class AppDiscoverFetcherTest extends FetcherBase { + protected CompareVersion|MockObject $compareVersion; + + protected function setUp(): void { + parent::setUp(); + $this->fileName = 'discover.json'; + $this->endpoint = 'https://apps.nextcloud.com/api/v1/discover.json'; + + $this->compareVersion = $this->createMock(CompareVersion::class); + + $this->fetcher = new AppDiscoverFetcher( + $this->appDataFactory, + $this->clientService, + $this->timeFactory, + $this->config, + $this->logger, + $this->registry, + $this->compareVersion, + ); + } + + public function testAppstoreDisabled() { + $this->config + ->method('getSystemValueBool') + ->willReturnCallback(function ($var, $default) { + if ($var === 'appstoreenabled') { + return false; + } + return $default; + }); + $this->appData + ->expects($this->never()) + ->method('getFolder'); + + $this->assertEquals([], $this->fetcher->get()); + } + + public function testNoInternet() { + $this->config + ->method('getSystemValueBool') + ->willReturnCallback(function ($var, $default) { + if ($var === 'has_internet_connection') { + return false; + } + return $default; + }); + $this->config + ->method('getSystemValueString') + ->willReturnCallback(function ($var, $default) { + return $default; + }); + $this->appData + ->expects($this->never()) + ->method('getFolder'); + + $this->assertEquals([], $this->fetcher->get()); + } + + /** + * @dataProvider dataGetETag + */ + public function testGetEtag(string|null $expected, bool $throws, string $content = '') { + $folder = $this->createMock(ISimpleFolder::class); + if (!$throws) { + $file = $this->createMock(ISimpleFile::class); + $file->expects($this->once()) + ->method('getContent') + ->willReturn($content); + $folder->expects($this->once()) + ->method('getFile') + ->with('discover.json') + ->willReturn($file); + } else { + $folder->expects($this->once()) + ->method('getFile') + ->with('discover.json') + ->willThrowException(new NotFoundException('')); + } + + $this->appData->expects($this->once()) + ->method('getFolder') + ->with('/') + ->willReturn($folder); + + $etag = $this->fetcher->getETag(); + $this->assertEquals($expected, $etag); + if ($expected !== null) { + $this->assertTrue(gettype($etag) === 'string'); + } + } + + public function dataGetETag(): array { + return [ + 'file not found' => [null, true], + 'empty file' => [null, false, ''], + 'missing etag' => [null, false, '{ "foo": "bar" }'], + 'valid etag' => ['test', false, '{ "ETag": "test" }'], + 'numeric etag' => ['132', false, '{ "ETag": 132 }'], + ]; + } +} diff --git a/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php index 47d479b18a1..c0988ff5a11 100644 --- a/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php +++ b/tests/lib/AppFramework/Middleware/Security/RateLimitingMiddlewareTest.php @@ -37,6 +37,7 @@ use OCP\AppFramework\Http\Attribute\UserRateLimit; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\TemplateResponse; use OCP\IRequest; +use OCP\ISession; use OCP\IUser; use OCP\IUserSession; use PHPUnit\Framework\MockObject\MockObject; @@ -77,6 +78,7 @@ class RateLimitingMiddlewareTest extends TestCase { private IUserSession|MockObject $userSession; private ControllerMethodReflector $reflector; private Limiter|MockObject $limiter; + private ISession|MockObject $session; private RateLimitingMiddleware $rateLimitingMiddleware; protected function setUp(): void { @@ -86,12 +88,14 @@ class RateLimitingMiddlewareTest extends TestCase { $this->userSession = $this->createMock(IUserSession::class); $this->reflector = new ControllerMethodReflector(); $this->limiter = $this->createMock(Limiter::class); + $this->session = $this->createMock(ISession::class); $this->rateLimitingMiddleware = new RateLimitingMiddleware( $this->request, $this->userSession, $this->reflector, - $this->limiter + $this->limiter, + $this->session ); } |