aboutsummaryrefslogtreecommitdiffstats
path: root/dist/settings-apps-view-4529.js.map
diff options
context:
space:
mode:
Diffstat (limited to 'dist/settings-apps-view-4529.js.map')
-rw-r--r--dist/settings-apps-view-4529.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/dist/settings-apps-view-4529.js.map b/dist/settings-apps-view-4529.js.map
index dbd3c106f10..12033486d42 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=cf981d1db3fc4b0689be","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/yocto-queue/index.js","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 }","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","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","Node","constructor","_defineProperty","_head","WeakMap","_tail","_size","_Symbol$iterator","Symbol","iterator","Queue","_classPrivateFieldInitSpec","writable","clear","enqueue","_this$size","node","_classPrivateFieldGet","next","_classPrivateFieldSet","dequeue","_this$size3","current","size","pLimit","concurrency","isInteger","POSITIVE_INFINITY","TypeError","queue","activeCount","run","async","fn","resolve","args","result","generator","_len","Array","_key","Promise","bind","defineProperties","pendingCount","clearQueue","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
+{"version":3,"file":"settings-apps-view-4529.js?v=2225ba87079dac5e6a97","mappings":"kNAYA,MAAMA,EAAeA,KAAMC,EAAAA,EAAAA,KAAUC,EAAAA,EAAAA,IAAE,WAAY,6DACtCC,GAAeC,EAAAA,EAAAA,IAAY,gBAAiB,CACrDC,MAAOA,KAAA,CACHC,KAAM,GACNC,WAAY,GACZC,aAAaC,EAAAA,EAAAA,GAAU,WAAY,sBAAuB,GAC1DC,QAAS,CACLJ,MAAM,EACNC,YAAY,GAEhBI,aAAa,EACbC,yBAA0B,OAE9BC,QAAS,CACL,oBAAMC,GAA8B,IAAfC,EAAKC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACtB,KAAIG,KAAKZ,WAAWU,OAAS,IAAMF,EAGnC,IACII,KAAKT,QAAQH,YAAa,EAC1B,MAAQa,KAAMb,SAAqBc,EAAAA,GAAMC,KAAIC,EAAAA,EAAAA,IAAY,6BACzD,IAAK,MAAMC,KAAYjB,EACnBiB,EAASC,KAAOC,EAAAA,EAAwBF,EAASG,KAAO,GAE5DR,KAAKS,OAAO,CACRrB,cAER,CACA,MAAOsB,GACHC,EAAAA,EAAOD,MAAMA,GACb7B,GACJ,CAAC,QAEGmB,KAAKT,QAAQH,YAAa,CAC9B,CACJ,EACA,cAAMwB,GAAwB,IAAfhB,EAAKC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAChB,KAAIG,KAAKb,KAAKW,OAAS,IAAMF,EAG7B,IACII,KAAKT,QAAQJ,MAAO,EACpB,MAAM,KAAEc,SAAeC,EAAAA,GAAMC,KAAIC,EAAAA,EAAAA,IAAY,uBAC7CJ,KAAKS,OAAO,CACRtB,KAAMc,EAAKd,MAEnB,CACA,MAAOuB,GACHC,EAAAA,EAAOD,MAAMA,GACb7B,GACJ,CAAC,QAEGmB,KAAKT,QAAQJ,MAAO,CACxB,CACJ,EACA0B,eAAAA,CAAgBC,GACZ,OAAOd,KAAKZ,WAAW2B,MAAKC,IAAA,IAAC,GAAER,GAAIQ,EAAA,OAAKR,IAAOM,CAAU,KAAK,IAClE,EACAG,UAAAA,CAAWC,GACP,OAAOlB,KAAKb,KAAK4B,MAAKI,IAAA,IAAC,GAAEX,GAAIW,EAAA,OAAKX,IAAOU,CAAK,KAAK,IACvD,I,qECrEJE,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,2NAA4N,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,yFAAyF,MAAQ,GAAG,SAAW,oFAAoF,eAAiB,CAAC,uXAAuX,WAAa,MAEz3B,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,2KAQtC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,mEAAmE,eAAiB,CAAC,02LAA22L,WAAa,MAE/jM,S,sECZIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,wYAWtC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,oDAAoD,MAAQ,GAAG,SAAW,yFAAyF,eAAiB,CAAC,swGAAyvG,WAAa,MAEz9G,S,mFCVA,YACQN,EAAAA,GAAMC,KAAIoB,EAAAA,EAAAA,IAAe,kBAAmB,GAAK,qBACtDC,MAAKR,IAAc,IAAb,KAAEf,GAAMe,EACmB,MAA7Bf,EAAKwB,IAAIC,KAAKC,cAIlBC,EAAAA,EAAAA,IAAK,6BAA8B,CAAEzC,KAAMc,EAAKwB,IAAIxB,OACpD4B,OAAOC,cAAc,IAAIC,MAAM,WAAU,ICR5C,GACCC,SAAU,CACTC,SAAAA,GACC,OAAOjC,KAAKkC,IAAIC,OAAOC,KAAIC,IAAkB,CAAE7B,GAAI6B,EAAOC,KAAMD,KACjE,EACAE,UAAAA,GACC,OAAIvC,KAAKkC,KAAKM,QACNxC,KAAKkC,MAAmD,IAA5ClC,MAAMyC,YAAYC,WAAW,WAE1C1C,KAAK2C,OAAOC,QAAQrD,QAAQ,UACpC,EACAsD,SAAAA,GACC,OAAI7C,KAAKkC,KAAKM,QACNxC,KAAKkC,MAAqD,IAA9ClC,MAAMyC,YAAYC,WAAW1C,KAAKkC,IAAI1B,IAEnDR,KAAKkC,KAAOlC,KAAK2C,OAAOC,QAAQrD,QAAQS,KAAKkC,IAAI1B,GACzD,EACAsC,cAAAA,GACC,QAAI9C,KAAKkC,KAAKM,SACNxC,KAAKkC,MAAqC,SAA7BlC,KAAKkC,KAAKa,QAAQC,QAAkD,gBAA7BhD,KAAKkC,KAAKa,QAAQC,OAG/E,EACAC,WAAAA,GACC,QAAIjD,KAAKkC,KAAKM,SACNxC,KAAKkC,KAAoC,WAA7BlC,KAAKkC,KAAKa,QAAQC,MAGvC,EACAE,eAAAA,GACC,QAAIlD,KAAKkC,KAAKM,SACkC,mBAAxCxC,KAAKkC,KAAKiB,QAAQC,iBAG3B,EACAC,gBAAAA,GACC,OAAIrD,KAAKkC,KAAKM,SAAmD,mBAAxCxC,KAAKkC,KAAKiB,QAAQC,kBACnCrE,EAAE,WAAY,6CAEfA,EAAE,WAAY,sBAAuB,CAAEuE,QAAStD,KAAKkC,KAAKqB,QAClE,EACAC,gBAAAA,GACC,OAAIxD,KAAKkC,KAAKM,QACTxC,KAAKkC,KAAOlC,KAAKkC,KAAKa,QAAQC,QAAuC,WAA7BhD,KAAKkC,KAAKa,QAAQC,OACtDjE,EAAE,WAAY,0BAA2B,CAAE0E,SAAUzD,KAAKkC,KAAKa,QAAQW,QAAU,IAErF1D,KAAKkC,KAAOlC,KAAKkC,KAAKa,QAAQC,QAAuC,SAA7BhD,KAAKkC,KAAKa,QAAQC,OACtDjE,EAAE,WAAY,6BAA8B,CAAE0E,SAAUzD,KAAKkC,KAAKa,QAAQY,MAAQ,IAEtF3D,KAAKkC,KAAOlC,KAAKkC,KAAKa,QAAQC,QAAuC,gBAA7BhD,KAAKkC,KAAKa,QAAQC,OACtDjE,EAAE,WAAY,mBAElBiB,KAAKkC,IAAI0B,cACL7E,EAAE,WAAY,qBAEfA,EAAE,WAAY,UAEjBiB,KAAKkC,IAAI0B,cACL7E,EAAE,WAAY,uBAEfA,EAAE,WAAY,SAEvB,EACA8E,iBAAAA,GACC,GAAI7D,KAAKkC,KAAKM,QAAS,CACtB,GAAIxC,KAAKkC,KAAOlC,KAAKkC,KAAKa,QAAQC,QAAuC,WAA7BhD,KAAKkC,KAAKa,QAAQC,OAC7D,OAAOjE,EAAE,WAAY,0BAA2B,CAAE0E,SAAUzD,KAAKkC,KAAKa,QAAQW,SAE/E,GAAI1D,KAAKkC,KAAOlC,KAAKkC,KAAKa,QAAQC,QAAuC,SAA7BhD,KAAKkC,KAAKa,QAAQC,OAC7D,OAAOjE,EAAE,WAAY,6BAA8B,CAAE0E,SAAUzD,KAAKkC,KAAKa,QAAQY,OAElF,GAAI3D,KAAKkC,KAAOlC,KAAKkC,KAAKa,QAAQC,QAAuC,gBAA7BhD,KAAKkC,KAAKa,QAAQC,OAC7D,OAAOjE,EAAE,WAAY,kBAEvB,CACA,OAAOA,EAAE,WAAY,UACtB,EACA+E,qBAAAA,GACC,OAAI9D,KAAKkC,IAAI0B,cACL7E,EAAE,WAAY,qBAGvB,EACAgF,mBAAAA,GACC,OAAK/D,KAAKkC,KAAKM,SAAWxC,KAAKkC,IAAI0B,cAC3B7E,EAAE,WAAY,iDAEf,IACR,EACAiF,wBAAAA,GACC,MAAMC,EAAOlF,EAAE,WAAY,8KAC3B,OAAIiB,KAAKkC,IAAI0B,cACLK,EAAO,IAAMlF,EAAE,WAAY,iDAE5BkF,CACR,EACAC,6BAAAA,GACC,OAAIlE,KAAKkC,KAAKM,YACTxC,KAAKkC,KAAKiB,QAAkD,mBAAxCnD,KAAKkC,KAAKiB,QAAQC,qBAGE,mBAAxCpD,KAAKkC,KAAKiB,QAAQC,mBAClBpD,KAAKyC,YAAY0B,kBAAkB7B,OAAStC,KAAKkC,KAAKiB,QAAQb,MAChB,IAA1CtC,MAAMyC,YAAY2B,oBAEnBpE,MAAMyC,YAAY2B,oBAG3B,GAGDnE,KAAIA,KACI,CACNoE,sBAAsB,IAIxBC,OAAAA,GACKtE,KAAKkC,KAAOlC,KAAKkC,IAAIC,QAAUnC,KAAKkC,IAAIC,OAAOrC,OAAS,IAC3DE,KAAKqE,sBAAuB,EAE9B,EAEAE,QAAS,CACRC,cAAAA,CAAeC,GACd,OAAOzE,KAAK2C,OAAO+B,SAAS,YAAa,CAAEC,OAAQF,EAAOG,MAAO,EAAGC,OAAQ,GAC7E,EACAC,iBAAAA,CAAkB5C,GACjB,OAAIlC,KAAKkC,KAAKM,UAGPxC,KAAKkC,IAAIC,OAAOrC,QAAUE,KAAKqE,qBACvC,EACAU,aAAAA,GACK/E,KAAKkC,KAAKM,SAGTxC,KAAKqE,sBACTrE,KAAK2C,OAAO+B,SAAS,YAAa,CAAExD,MAAOlB,KAAKkC,IAAI1B,GAAI2B,OAAQ,IAElE,EACA6C,iBAAiB9C,KACXA,EAAI+C,OAAS/C,EAAI+C,MAAMC,SAAS,eAChChD,EAAI+C,MAAMC,SAAS,aACnBhD,EAAI+C,MAAMC,SAAS,mBACnBhD,EAAI+C,MAAMC,SAAS,YACnBhD,EAAI+C,MAAMC,SAAS,8BACnBhD,GAAKM,SAKX2C,kBAAAA,CAAmBC,GAClB,GAAIpF,KAAKkC,KAAKM,QACb,OAED,MAAMH,EAAQ+C,EAAWC,MACnBlD,EAASnC,KAAKkC,IAAIC,OAAOmD,OAAO,IAAIA,OAAO,CAACjD,EAAM7B,KACxDR,KAAK2C,OAAO+B,SAAS,YAAa,CAAExD,MAAOlB,KAAKkC,IAAI1B,GAAI2B,UACzD,EACAoD,qBAAAA,CAAsBlD,GACrB,GAAIrC,KAAKkC,KAAKM,QACb,OAED,MAAMgD,EAAgBxF,KAAKkC,IAAIC,OAAOmD,OAAO,IACvCG,EAAQD,EAAcE,QAAQrD,EAAM7B,IACtCiF,GAAS,GACZD,EAAcG,OAAOF,EAAO,GAE7BzF,KAAK2C,OAAO+B,SAAS,YAAa,CAAExD,MAAOlB,KAAKkC,IAAI1B,GAAI2B,OAAQqD,GACjE,EACAI,WAAAA,CAAY1E,GACPlB,KAAKkC,KAAKM,QACbxC,KAAKyC,YAAYoD,eAAe3E,GAC9BM,MAAK,KAAQsE,GAAmB,IAChCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,IAErCV,KAAK2C,OAAO+B,SAAS,iBAAkB,CAAExD,QAAOiB,OAAQ,KACtDX,MAAMwE,IAAeF,GAAmB,IACxCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,GAEvC,EACAuF,MAAAA,CAAO/E,GAA0C,IAAnCiC,EAAMtD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,KAAMqG,EAAarG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACzCG,KAAKkC,KAAKM,QACbxC,KAAKyC,YAAY0D,UAAUjF,EAAOiC,EAAQ+C,GACxC1E,MAAK,KAAQsE,GAAmB,IAChCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,IAErCV,KAAK2C,OAAO+B,SAAS,YAAa,CAAExD,QAAOiB,OAAQ,KACjDX,MAAMwE,IAAeF,GAAmB,IACxCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,GAEvC,EACA0F,OAAAA,CAAQlF,GACHlB,KAAKkC,KAAKM,QACbxC,KAAKyC,YAAY4D,WAAWnF,GAC1BM,MAAK,KAAQsE,GAAmB,IAChCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,IAErCV,KAAK2C,OAAO+B,SAAS,aAAc,CAAExD,UACnCM,MAAMwE,IAAeF,GAAmB,IACxCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,GAEvC,EACA,YAAM4F,CAAOpF,GAA2B,IAApBqF,EAAU1G,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAC7B,IACKG,KAAKkC,KAAKM,cACPxC,KAAKyC,YAAY+D,aAAatF,EAAOqF,SAErCvG,KAAK2C,OAAO+B,SAAS,eAAgB,CAAExD,QAAOqF,qBAE/CT,GACP,CAAE,MAAOpF,IACR5B,EAAAA,EAAAA,IAAU4B,EACX,CACD,EACA+F,OAAAA,CAAQvF,GACHlB,KAAKkC,KAAKM,QACbxC,KAAKyC,YAAY0D,UAAUjF,GACzBM,MAAK,KAAQsE,GAAmB,IAChCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,IAErCV,KAAK2C,OAAO+B,SAAS,YAAa,CAAExD,UAClCM,MAAMwE,IAAeF,GAAmB,IACxCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,GAEvC,EACA6C,MAAAA,CAAOrC,GACFlB,KAAKkC,KAAKM,QACbxC,KAAKyC,YAAYiE,UAAUxF,GACzBM,MAAK,KAAQsE,GAAmB,IAChCC,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,IAErCV,KAAK2C,OAAO+B,SAAS,YAAa,CAAExD,UAClC6E,OAAOrF,KAAY5B,EAAAA,EAAAA,IAAU4B,EAAM,IACnCc,MAAK,KACLsE,IACA9F,KAAK2G,MAAMtH,YAAcuH,KAAKC,IAAI7G,KAAK2G,MAAMtH,YAAc,EAAG,EAAE,GAGpE,G,iDCxPF,I,23BCKA,MAAMyH,EAILC,WAAAA,CAAYC,GAAOC,EAAA,qBAAAA,EAAA,oBAClBjH,KAAKgH,MAAQA,CACd,EACA,IAAAE,EAAA,IAAAC,QAAAC,EAAA,IAAAD,QAAAE,EAAA,IAAAF,QAEc,MAAMG,EAKpBP,WAAAA,GAJAQ,EAAA,KAAAL,OAAK,GACLK,EAAA,KAAAH,OAAK,GACLG,EAAA,KAAAF,OAAK,GAGJrH,KAAKwH,OACN,CAEAC,OAAAA,CAAQT,GAAO,IAAAU,EACd,MAAMC,EAAO,IAAIb,EAAKE,GAElBY,EAAKV,EAALlH,OACH4H,EAAKR,EAALpH,MAAW6H,KAAOF,EAClBG,EAAKV,EAALpH,KAAa2H,KAEbG,EAAKZ,EAALlH,KAAa2H,GACbG,EAAKV,EAALpH,KAAa2H,IAGdG,EAAKT,EAALrH,MAAI0H,EAAJE,EAAKP,EAALrH,QAAU0H,GACX,CAEAK,OAAAA,GAAU,IAAAC,EACT,MAAMC,EAAUL,EAAKV,EAALlH,MAChB,GAAKiI,EAML,OAFAH,EAAKZ,EAALlH,KAAa4H,EAAKV,EAALlH,MAAW6H,MACxBC,EAAKT,EAALrH,MAAIgI,EAAJJ,EAAKP,EAALrH,QAAUgI,IACHC,EAAQjB,KAChB,CAEAkB,IAAAA,GACC,GAAKN,EAAKV,EAALlH,MAIL,OAAO4H,EAAKV,EAALlH,MAAWgH,KAInB,CAEAQ,KAAAA,GACCM,EAAKZ,EAALlH,UAAaD,GACb+H,EAAKV,EAALpH,UAAaD,GACb+H,EAAKT,EAALrH,KAAa,EACd,CAEA,QAAImI,GACH,OAAOP,EAAKP,EAALrH,KACR,CAEA,EAAGoI,OAAOC,YACT,IAAIJ,EAAUL,EAAKV,EAALlH,MAEd,KAAOiI,SACAA,EAAQjB,MACdiB,EAAUA,EAAQJ,IAEpB,EC1Ec,SAASS,EAAOC,GAC9BC,EAAoBD,GAEpB,MAAME,EAAQ,IAAInB,EAClB,IAAIoB,EAAc,EAElB,MAAMC,EAAaA,KACdD,EAAcH,GAAeE,EAAMN,KAAO,IAC7CM,EAAMV,SAANU,GAEAC,IACD,EASKE,EAAMC,MAAOC,EAAWC,EAASC,KACtC,MAAMC,EAAS,UAAaH,KAAaE,GAA1B,GAEfD,EAAQE,GAER,UACOA,CACP,CAAE,MAAO,CAZTP,IAEAC,GAYM,EAyBDO,EAAY,SAACJ,GAAS,QAAAK,EAAAtJ,UAAAC,OAAKkJ,EAAU,IAAAI,MAAAD,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAVL,EAAUK,EAAA,GAAAxJ,UAAAwJ,GAAA,OAAK,IAAIC,SAAQP,IAtB5CtB,EAACqB,EAAWC,EAASC,KAGpC,IAAIM,SAAQC,IACXd,EAAMhB,QAAQ8B,EAAgB,IAC5B/H,KACFoH,EAAIY,UAAKzJ,EAAW+I,EAAWC,EAASC,IAGzC,iBAKOM,QAAQP,UAEVL,EAAcH,GACjBI,GAED,EAVD,EAUI,EAIJlB,CAAQqB,EAAWC,EAASC,EAAW,GACtC,EA+BF,OA7BAS,OAAOC,iBAAiBR,EAAW,CAClCR,YAAa,CACZvI,IAAKA,IAAMuI,GAEZiB,aAAc,CACbxJ,IAAKA,IAAMsI,EAAMN,MAElByB,WAAY,CACX5C,KAAAA,GACCyB,EAAMjB,OACP,GAEDe,YAAa,CACZpI,IAAKA,IAAMoI,EAEXsB,GAAAA,CAAIC,GACHtB,EAAoBsB,GACpBvB,EAAcuB,EAEdC,gBAAe,KAEd,KAAOrB,EAAcH,GAAeE,EAAMN,KAAO,GAChDQ,GACD,GAEF,KAIKO,CACR,CASA,SAASV,EAAoBD,GAC5B,IAAOyB,OAAOC,UAAU1B,IAAgBA,IAAgByB,OAAOE,qBAAsB3B,EAAc,GAClG,MAAM,IAAI4B,UAAU,sDAEtB,C,gDC8CA,MCrJmL,EDqJnL,CACA7H,KAAA,UACA8H,WAAA,CACAC,QAAA,IACAC,SAAAA,EAAAA,GAGAC,OAAA,CAAAC,EAAAA,GAEAC,MAAA,CACApK,SAAA,CACAqK,KAAAC,OACAC,UAAA,IAIAC,MAAAA,KAIA,CACApI,aAJAqI,EAAAA,EAAAA,KAKAnE,OAJA3H,EAAAA,EAAAA,OAQAiB,KAAAA,KACA,CACA0E,OAAA,KAGA3C,SAAA,CACA+I,OAAAA,GACA,YAAA5L,KAAA6L,QAAA9I,GAAAA,EAAAqB,SAAAzD,MACA,EACAP,OAAAA,GACA,YAAAoD,OAAAC,QAAA,8BAGA,KAAAD,OAAAC,QAAArD,QAAA,cAAAkD,YAAAC,WAAA,QAFA,KAAAC,OAAAC,QAAArD,QAAA,OAGA,EACA0L,gBAAAA,GACA,YAAA9L,KAAA6L,QAAA9I,GAAAA,EAAAqB,SAAAzD,OAAA,CACA,EACAoL,aAAAA,GACA,YAAAD,kBAAA,KAAAE,WACA,EACAhM,IAAAA,GAEA,MAAAiM,EAAA,KAAAzI,OAAAC,QAAAyI,gBAAA,KAAA5I,YAAA6I,WAAA,GACAnM,EAAA,SAAAwD,OAAAC,QAAA0I,cAAAF,GACAJ,QAAA9I,IAAA,IAAAA,EAAAI,KAAAiJ,cAAA5G,OAAA,KAAAA,OAAA4G,iBACAC,MAAA,SAAAC,EAAAC,GACA,MAAAC,EAAAC,GAAAC,KAAAC,mBAAAL,EAAAC,GACA,OAAAC,EAAA,CACA,MAAAI,EAAA,IAAAN,EAAAO,OAAA,MAAAP,EAAAlI,OAAA,KACA0I,EAAA,IAAAP,EAAAM,OAAA,MAAAN,EAAAnI,OAAA,KACA,OAAAyG,OAAA+B,GAAA/B,OAAAiC,EACA,CACA,OAAAN,CACA,IAEA,yBAAAtL,SACAlB,EAAA6L,QAAA9I,GAAAA,EAAAgK,YAEA,iBAAA7L,SACAlB,EAAA6L,QAAA9I,GAAAA,EAAA8J,QAAA9J,EAAAgK,YAEA,kBAAA7L,SACAlB,EAAA6L,QAAA9I,IAAAA,EAAA8J,QAAA9J,EAAAgK,YAEA,qBAAA7L,SACAlB,EAAA6L,QAAA9I,GAAAA,EAAAiK,UAEA,iBAAA9L,SACAlB,EAAA6L,QAAA9I,GAAAA,EAAAqB,SAEA,mBAAAlD,SAEAlB,EAAA6L,QAAA9I,GAAA,MAAAA,EAAAkK,QAEA,kBAAA/L,SAEAlB,EAAA6L,QAAA9I,GAAA,MAAAA,EAAAkK,QAIAjN,EAAA6L,QAAA9I,GACAA,EAAAmK,eAAAtM,IAAAmC,EAAA7B,WACA6B,EAAA7B,WAAA,KAAAA,UAAA6B,EAAA7B,SAAAqF,QAAA,KAAArF,WAAA,IAEA,EACA8L,OAAAA,GACA,YAAAxJ,OAAAC,QAAA0J,cAAAtB,QAAAuB,GAAA,KAAAC,WAAAD,EAAA/L,IAAAV,OAAA,GACA,EACA0M,WAAAA,IACA,SAAAD,GACA,YAAA5J,OAAAC,QAAA0I,WACAN,QAAA9I,QACAnC,IAAAmC,EAAAuK,WAAAvK,EAAAuK,UAAAvH,SAAAqH,IAEA,EAEAG,UAAAA,GACA,aAAA/H,OACA,SAEA,MAAAyG,EAAA,KAAAzI,OAAAC,QAAAyI,gBAAA,KAAA5I,YAAA6I,WAAA,GACA,eAAA3I,OAAAC,QAAA0I,cAAAF,GACAJ,QAAA9I,IACA,IAAAA,EAAAI,KAAAiJ,cAAA5G,OAAA,KAAAA,OAAA4G,iBACA,KAAApM,KAAA4B,MAAA4L,GAAAA,EAAAnM,KAAA0B,EAAA1B,MAIA,EACAoM,eAAAA,GACA,YAAAzB,cAAA,KAAA0B,aACA,EACA1B,WAAAA,GACA,yBAAA9K,UAAA,iBAAAA,UAAA,kBAAAA,UAAA,iBAAAA,UAAA,kBAAAA,UAAA,mBAAAA,QACA,EACAwM,aAAAA,GACA,2BAAAxM,QACA,EACAyM,iBAAAA,GACA,OAAAtM,GACA,SAAAgM,WAAAhM,GAAAwK,QAAA9I,IAAAA,EAAA8J,SAAAlM,MAEA,EACAiN,gBAAAA,GACA,OAAAvM,GACA,KAAAsM,kBAAAtM,GACAzB,EAAA,0BAEAA,EAAA,qCAEA,GAGAiO,aAAAA,IACAC,EAAAA,EAAAA,IAAA,uCAAAC,YACAD,EAAAA,EAAAA,IAAA,sCAAAE,YACA,EAEA7I,OAAAA,IACA8I,EAAAA,EAAAA,IAAA,uCAAAF,YACAE,EAAAA,EAAAA,IAAA,sCAAAD,YACA,EAEA5I,QAAA,CACA2I,SAAAA,CAAAlM,GAAA,UAAAyD,GAAAzD,EACA,KAAA2D,OAAAF,CACA,EACA0I,WAAAA,GACA,KAAAxI,OAAA,EACA,EACA0I,YAAAA,CAAA7M,GACA,YAAAsM,kBAAAtM,GACA,KAAA8M,cAAA9M,GAEA,KAAA+M,aAAA/M,EACA,EACA+M,YAAAA,CAAA/M,GACA,MAAArB,EAAA,KAAAqN,WAAAhM,GAAA4B,KAAAF,GAAAA,EAAA1B,KACA,KAAAmC,OAAA+B,SAAA,aAAAxD,MAAA/B,EAAAgD,OAAA,KACA4D,OAAArF,IACA8M,QAAA9M,MAAAA,GACAkL,GAAA6B,aAAAC,KAAAhN,EAAA,GAEA,EACA4M,aAAAA,CAAA9M,GACA,MAAArB,EAAA,KAAAqN,WAAAhM,GAAA4B,KAAAF,GAAAA,EAAA1B,KACA,KAAAmC,OAAA+B,SAAA,cAAAxD,MAAA/B,EAAAgD,OAAA,KACA4D,OAAArF,IACAkL,GAAA6B,aAAAC,KAAAhN,EAAA,GAEA,EACAiN,SAAAA,GACA,MAAA/I,EAAA0D,EAAA,GACA,KAAAnJ,KACA6L,QAAA9I,GAAAA,EAAAqB,SACAnB,KAAAF,GAAA0C,GAAA,KACA,KAAArB,OAAArB,EAAA1B,GAAA,KAEA,I,uIEnUIoN,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,O,eCL1D,SAXgB,OACd,GCTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACE,MAAM,CAAC,GAAK,sBAAsB,CAACF,EAAG,MAAM,CAACG,YAAY,YAAYC,MAAM,CACrJ,uBAAyBL,EAAItB,eAAiBsB,EAAIhD,YAClD,wBAAyBgD,EAAIvB,iBAC5B0B,MAAM,CAAC,GAAK,cAAc,CAAEH,EAAIhD,YAAa,CAAEgD,EAAIjD,cAAekD,EAAG,MAAM,CAACG,YAAY,sBAAsB,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIQ,EAAE,WAAY,iCAAkC,mCAAoCR,EAAIpD,UAAU,cAAeoD,EAAIjD,cAAekD,EAAG,WAAW,CAACE,MAAM,CAAC,GAAK,sBAAsB,KAAO,WAAWM,GAAG,CAAC,MAAQT,EAAIR,YAAY,CAACQ,EAAIM,GAAG,eAAeN,EAAIO,GAAGP,EAAIQ,EAAE,WAAY,SAAU,aAAcR,EAAIpD,UAAU,gBAAgBoD,EAAIU,MAAM,GAAGV,EAAIU,KAAKV,EAAIM,GAAG,KAAON,EAAIjD,cAAoJiD,EAAIU,KAAzIT,EAAG,MAAM,CAACG,YAAY,sBAAsB,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,6BAA6B,cAAuBoP,EAAIM,GAAG,KAAKL,EAAG,kBAAkB,CAACG,YAAY,4BAA4BD,MAAM,CAAC,KAAO,YAAY,IAAM,UAAU,CAACF,EAAG,KAAK,CAACU,IAAI,wBAAwB,CAACV,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,iBAAiBoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,eAAeoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,mBAAmBoP,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAIhP,MAAM,SAAS+C,GAAK,OAAOkM,EAAG,UAAU,CAACU,IAAI5M,EAAI1B,GAAG8N,MAAM,CAAC,IAAMpM,EAAI,SAAWiM,EAAI9N,WAAW,KAAI,IAAI8N,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAItB,cAAeuB,EAAG,QAAQ,CAACG,YAAY,6BAA6B,CAACH,EAAG,KAAK,CAACU,IAAI,wBAAwB,CAACV,EAAG,KAAK,CAACE,MAAM,CAAC,GAAK,uBAAuB,CAACF,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACE,MAAM,CAAC,GAAK,uBAAuB,CAACF,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACE,MAAM,CAAC,GAAK,0BAA0B,CAACF,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,iBAAiBoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACE,MAAM,CAAC,GAAK,wBAAwB,CAACF,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,eAAeoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACE,MAAM,CAAC,GAAK,0BAA0B,CAACF,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,mBAAmBoP,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAIhC,SAAS,SAASI,GAAQ,MAAO,CAAC6B,EAAG,KAAK,CAACU,IAAIvC,EAAO/L,IAAI,CAAC4N,EAAG,KAAK,CAACE,MAAM,CAAC,GAAK,sBAAsB/B,EAAO/L,KAAK,QAAU,IAAI,MAAQ,aAAa,CAAC4N,EAAG,MAAM,CAACG,YAAY,6BAA6B,CAACH,EAAG,OAAO,CAACG,YAAY,4BAA4B,CAACJ,EAAIM,GAAG,qBAAqBN,EAAIO,GAAGnC,EAAOjK,MAAM,sBAAsB6L,EAAIM,GAAG,KAAKL,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,aAAaM,GAAG,CAAC,MAAQ,SAASI,GAAQ,OAAOb,EAAId,aAAad,EAAO/L,GAAG,IAAI,CAAC2N,EAAIM,GAAG,qBAAqBN,EAAIO,GAAGP,EAAIpP,EAAE,WAAYoP,EAAIpB,iBAAiBR,EAAO/L,MAAM,uBAAuB,OAAO2N,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAI3B,WAAWD,EAAO/L,KAAK,SAAS0B,GAAK,OAAOkM,EAAG,UAAU,CAACU,IAAIvC,EAAO/L,GAAK0B,EAAI1B,GAAG8N,MAAM,CAAC,mBAAkB,EAAK,QAAU,sBAAsB/B,EAAO/L,KAAK,IAAM0B,EAAI,SAAWiM,EAAI9N,WAAW,IAAG,KAAI,GAAG8N,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIvB,gBAAiBwB,EAAG,KAAK,CAACG,YAAY,8BAA8BJ,EAAIY,GAAIZ,EAAIhP,MAAM,SAAS+C,GAAK,OAAOkM,EAAG,UAAU,CAACU,IAAI5M,EAAI1B,GAAG8N,MAAM,CAAC,IAAMpM,EAAI,SAAWiM,EAAI9N,SAAS,aAAY,IAAQ,IAAG,GAAG8N,EAAIU,MAAM,GAAGV,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,iCAAiCD,MAAM,CAAC,GAAK,qBAAqB,CAACF,EAAG,MAAM,CAACG,YAAY,6BAA6B,CAAiB,KAAfJ,EAAIxJ,QAAiBwJ,EAAIzB,WAAW5M,OAAS,EAAGsO,EAAG,QAAQ,CAACG,YAAY,6BAA6B,CAACH,EAAG,UAAU,CAACG,YAAY,4BAA4B,CAACJ,EAAIM,GAAG,eAAeN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,kCAAkC,gBAAgBoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACU,IAAI,wBAAwB,CAACV,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,iBAAiBoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,eAAeoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACA,EAAG,OAAO,CAACG,YAAY,mBAAmB,CAACJ,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,mBAAmBoP,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAIzB,YAAY,SAASxK,GAAK,OAAOkM,EAAG,UAAU,CAACU,IAAI5M,EAAI1B,GAAG8N,MAAM,CAAC,IAAMpM,EAAI,SAAWiM,EAAI9N,WAAW,KAAI,GAAG8N,EAAIU,SAASV,EAAIM,GAAG,KAAqB,KAAfN,EAAIxJ,QAAkBwJ,EAAI5O,SAAqC,IAA1B4O,EAAIzB,WAAW5M,QAAoC,IAApBqO,EAAIhP,KAAKW,OAAqRqO,EAAIU,KAA3QT,EAAG,MAAM,CAACG,YAAY,mCAAmCD,MAAM,CAAC,GAAK,oBAAoB,CAACF,EAAG,MAAM,CAACG,YAAY,qBAAqBD,MAAM,CAAC,GAAK,yBAAyBH,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,yCAC/xJ,GACsB,IDOpB,EACA,KACA,WACA,M,QEfF,I,gECSO,MAAMkQ,EAAoBC,IAC7B,MAAMC,EAAa,IAAKD,GAOxB,GANIC,EAAWC,OACXD,EAAWC,KAAOC,KAAKC,MAAMH,EAAWC,OAExCD,EAAWI,aACXJ,EAAWI,WAAaF,KAAKC,MAAMH,EAAWI,aAE1B,SAApBJ,EAAWzE,KACX,OAAOyE,EAEN,GAAwB,aAApBA,EAAWzE,KAChB,OAAOyE,EAEN,GAAwB,aAApBA,EAAWzE,KAChB,OAAOyE,EAEX,MAAM,IAAIK,MAAM,oDAAoDN,EAAQxE,MAAQ,uBAAuB,EAMlG+E,EAAkBP,IAC3B,MAAMQ,EAAML,KAAKK,MAEjB,QAAIR,EAAQE,MAAQF,EAAQE,KAAOM,GAI/BR,EAAQK,YAAcL,EAAQK,WAAaG,EAGpC,EC1C4Q,IFY9PC,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,0BACR/E,KAAAA,CAAMgF,GACF,MAAMC,GAAWC,EAAAA,EAAAA,KAAqB,IAAM,kCACtCC,GAAeD,EAAAA,EAAAA,KAAqB,IAAM,iCAC1CE,GAAeF,EAAAA,EAAAA,KAAqB,IAAM,kCAC1CG,GAAWC,EAAAA,EAAAA,KAAI,GACfC,GAAWD,EAAAA,EAAAA,IAAI,IAKfE,EAAgBC,IAClB,IAAK,IAAIC,EAAID,EAAMxQ,OAAS,EAAGyQ,EAAI,EAAGA,IAAK,CACvC,MAAMC,EAAI5J,KAAK6J,MAAM7J,KAAK8J,UAAYH,EAAI,KACzCD,EAAMC,GAAID,EAAME,IAAM,CAACF,EAAME,GAAIF,EAAMC,GAC5C,CACA,OAAOD,CAAK,EA2ChB,OAtCAK,EAAAA,EAAAA,KAAc,UACV,IACI,MAAM,KAAE1Q,SAAeC,EAAAA,GAAMC,KAAIC,EAAAA,EAAAA,IAAY,gCAC7C,GAAoB,IAAhBH,EAAKH,OAGL,OAFAa,EAAAA,EAAOiQ,KAAK,4DACZV,EAASlJ,OAAQ,GAIrB,MAAM6J,EAAiB5Q,EAAKmC,IAAI6M,GAAkBjE,OAAOyE,GAEnDqB,EAAmBT,EAAaQ,GAEtCC,EAAiBtF,MAAK,CAACC,EAAGC,KAAOD,EAAEsF,OAASC,MAAatF,EAAEqF,OAASC,MAAa,EAAI,IAErFZ,EAASpJ,MAAQ8J,CACrB,CACA,MAAOpQ,GACHwP,EAASlJ,OAAQ,EACjBrG,EAAAA,EAAOD,MAAMA,IACb5B,EAAAA,EAAAA,KAAUC,EAAAA,EAAAA,IAAE,WAAY,uCAC5B,KAiBG,CAAEkS,OAAO,EAAMnB,WAAUE,eAAcC,eAAcC,WAAUE,WAAUC,eAAca,aAfxExG,GACL,SAATA,EACOoF,EAEO,aAATpF,EACEsF,EAEO,aAATtF,EACEuF,GAEJkB,EAAAA,EAAAA,IAAgB,CACnB7M,QAASA,IAAM3D,EAAAA,EAAOD,MAAM,+BAAgCgK,GAC5D0G,OAASC,GAAMA,EAAE,OAAOtS,EAAAA,EAAAA,IAAE,WAAY,+BAG8DuS,iBAAgB,MAAEvS,EAAC,KAAEwS,eAAc,IAAEC,iBAAgB,IAAEC,cAAaA,EAAAA,EACpL,I,eG9DA,GAAU,CAAC,EAEf,GAAQ5D,kBAAoB,IAC5B,GAAQC,cAAgB,IACxB,GAAQC,OAAS,SAAc,KAAM,QACrC,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCL1D,UAXgB,OACd,IJTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAOvD,EAAG,MAAM,CAACG,YAAY,gBAAgB,CAAEmD,EAAOxB,SAAU9B,EAAGsD,EAAOH,eAAe,CAACjD,MAAM,CAAC,KAAOoD,EAAO3S,EAAE,WAAY,mBAAmB,YAAc2S,EAAO3S,EAAE,WAAY,mDAAmD6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOJ,iBAAiB,KAAO,MAAM,EAAES,OAAM,IAAO,MAAK,EAAM,cAA0C,IAA3BL,EAAOtB,SAAStQ,OAAcsO,EAAGsD,EAAOH,eAAe,CAACjD,MAAM,CAAC,KAAOoD,EAAO3S,EAAE,WAAY,WAAW,YAAc2S,EAAO3S,EAAE,WAAY,8BAA8B6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOD,cAAc,CAACnD,MAAM,CAAC,KAAO,MAAM,EAAEyD,OAAM,OAAU5D,EAAIY,GAAI2C,EAAOtB,UAAU,SAAS4B,EAAMvM,GAAO,OAAO2I,EAAGsD,EAAOR,aAAac,EAAMtH,MAAMyD,EAAI8D,GAAG,CAACnD,IAAIkD,EAAMxR,IAAMiF,EAAMyM,IAAI,aAAa,YAAYF,GAAM,GAAO,KAAI,EAC96B,GACsB,IIUpB,EACA,KACA,WACA,M,QCfiQ,IbYtOrC,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,WACR/E,KAAAA,CAAMgF,GACF,MAAMsC,GAAQC,EAAAA,EAAAA,MACRzL,GAAQ3H,EAAAA,EAAAA,KACRyD,GAAcqI,EAAAA,EAAAA,KAIduH,GAAkBrQ,EAAAA,EAAAA,KAAS,IAAMmQ,EAAMG,QAAQjS,UAAY,aAC3DkS,GAAgBxT,EAAAA,EAAAA,IAAE,WAAY,aAC9ByT,GAAYxQ,EAAAA,EAAAA,KAAS,IAAMyQ,EAAAA,EAAkBJ,EAAgBrL,QAAUL,EAAM9F,gBAAgBwR,EAAgBrL,QAAQ0L,aAAeH,KAC1II,EAAAA,EAAAA,KAAY,KACR9Q,OAAO+Q,SAASC,MAAQ,GAAGL,EAAUxL,WAAWuL,eAA2B,IAG/E,MAAMO,GAAWC,EAAAA,EAAAA,MAGXlQ,GAAYb,EAAAA,EAAAA,KAAS,KAAO8Q,GAAUf,OAAOpP,OAAOC,QAAQrD,QAAQ,UAe1E,OAdAoR,EAAAA,EAAAA,KAAc,MAETmC,GAAUf,OAAOpP,OAAO+B,SAAS,gBAAiB,CAAEsO,yBAAyB,KAE7EF,GAAUf,OAAOpP,OAAO+B,SAAS,eAE7BoO,GAAUf,OAAOpP,OAAOC,QAAQyI,kBACjC5I,EAAYwQ,eACZxQ,EAAYyQ,mBAChB,KAEJC,EAAAA,EAAAA,KAAgB,KACZC,cAAc3Q,EAAY4Q,iBAAiB,IAExC,CAAEpC,OAAO,EAAMkB,QAAOxL,QAAOlE,cAAa4P,kBAAiBE,gBAAeC,YAAWM,WAAUjQ,YAAW9D,EAAC,KAAEuU,aAAY,IAAE/B,eAAc,IAAEE,cAAa,IAAE8B,QAAO,EAAEC,wBAAuBA,GACrM,I,gBcpCA,GAAU,CAAC,EAEf,GAAQ3F,kBAAoB,IAC5B,GAAQC,cAAgB,IACxB,GAAQC,OAAS,SAAc,KAAM,QACrC,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCL1D,UAXgB,OACd,IfTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAOvD,EAAGsD,EAAO4B,aAAa,CAAC/E,YAAY,uBAAuBD,MAAM,CAAC,eAAeoD,EAAOa,gBAAgB,CAACnE,EAAG,KAAK,CAACG,YAAY,8BAA8BkF,SAAS,CAAC,YAActF,EAAIO,GAAGgD,EAAOc,cAAcrE,EAAIM,GAAG,KAAiC,aAA3BiD,EAAOW,gBAAgCjE,EAAGsD,EAAO8B,yBAA0B9B,EAAO7O,UAAWuL,EAAGsD,EAAOH,eAAe,CAAChD,YAAY,yBAAyBD,MAAM,CAAC,KAAOoD,EAAO3S,EAAE,WAAY,qBAAqB6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOD,cAAc,CAACnD,MAAM,CAAC,KAAO,MAAM,EAAEyD,OAAM,OAAU3D,EAAGsD,EAAO6B,QAAQ,CAACjF,MAAM,CAAC,SAAWoD,EAAOW,oBAAoB,EACtsB,GACsB,IeUpB,EACA,KACA,WACA,M,6ECZEjR,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,+jCAAgkC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,2BAA2B,yDAAyD,MAAQ,GAAG,SAAW,4SAA4S,eAAiB,CAAC,s8BAAw8B,0/BAA0/B,WAAa,MAE3/G,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,iLAAkL,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,2EAA2E,MAAQ,GAAG,SAAW,mEAAmE,eAAiB,CAAC,4KAA4K,WAAa,MAErmB,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,k0CAAm0C,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8EAA8E,MAAQ,GAAG,SAAW,ydAAyd,eAAiB,CAAC,4+CAA8+C,WAAa,MAEj9G,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,mPAAoP,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,+EAA+E,MAAQ,GAAG,SAAW,6DAA6D,eAAiB,CAAC,2RAA2R,WAAa,MAEpxB,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,qQAAsQ,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,MAAQ,GAAG,SAAW,wGAAwG,eAAiB,CAAC,0SAA0S,WAAa,MAEx1B,S,mCCPA,I,0CCMA,MCN0L,EDM1L,CACA8B,KAAA,iBACArC,KAAAA,KACA,CACAyT,SAAA,KAGA1R,SAAA,CACA2R,SAAAA,GACA,mBAAAD,WACA,GAEApP,OAAAA,GACA,KAAAoP,SAAA,kBAAA9M,KAAA8J,SAAAkD,SAAA,IAAAC,UAAA,EACA,G,eEFA,SAXgB,OACd,OARE,OAAQ,GAWV,EACA,KACA,KACA,M,iECwHF,MCtIyL,EDsIzL,CACAvR,KAAA,UACA8H,WAAA,CACA0J,cAAA,IACAC,SAAA,IACAzJ,SAAA,IACAkH,iBAAA,IACAwC,sBAAAA,EAAAA,GAEAzJ,OAAA,CAAAC,EAAAA,EAAAyJ,GACAxJ,MAAA,CACAvI,IAAA,CACAwI,KAAAjB,OACAmB,UAAA,GAEAvK,SAAA,CACAqK,KAAAC,OACAC,UAAA,GAEAsJ,SAAA,CACAxJ,KAAAyJ,QACAC,SAAA,GAEAvH,cAAA,CACAnC,KAAAyJ,QACAC,SAAA,GAEAC,QAAA,CACA3J,KAAAC,OACAyJ,QAAA,MAEAE,OAAA,CACA5J,KAAAyJ,QACAC,SAAA,IAGAvJ,MAAAA,KAIA,CACAlE,OAJA3H,EAAAA,EAAAA,KAKAyD,aAJAqI,EAAAA,EAAAA,KAKAyJ,cAAAA,EAAAA,KAGAtU,KAAAA,KACA,CACAuU,YAAA,EACAC,UAAA,EACAC,kBAAA,EACAC,uBAAA,IAGA3S,SAAA,CACA4S,SAAAA,GACA,YAAA1S,IAAA2S,cAAA,KAAA3S,IAAA2S,aAAAC,iBAAA,CACA,EACAC,WAAAA,GACA,YAAAb,SAAA,UACA,EACAc,WAAAA,GACA,aAAAC,OAAA3C,OAAA9R,EACA,EACA0U,wBAAAA,GACA,YAAAhB,WAAA,KAAAhS,IAAAiT,UAAA,KAAAjB,WAAA,KAAAQ,gBACA,GAEAU,MAAA,CACA,mBAAA5U,GACA,KAAAgU,WAAA,KAAAtS,IAAA1B,KAAAA,CACA,GAEA8D,OAAAA,GAEA,GADA,KAAAkQ,WAAA,KAAAtS,IAAA1B,KAAA,KAAAyU,OAAA3C,OAAA9R,GACA,KAAA0B,IAAAmT,UAAA,KAAAnT,IAAAoT,WAAA,CACA,MAAAC,EAAA,IAAAC,MACAD,EAAAE,OAAA,KACA,KAAAf,kBAAA,GAEAa,EAAAG,IAAA,KAAAxT,IAAAoT,UACA,CACA,EACAK,SAAA,CAEA,EACApR,QAAA,CACAqR,OAAAA,CAAAA,EAAAC,IACAD,EAAA,IAAAC,EAGAC,kBAAAA,CAAAC,GACA,YAAAlJ,cAAA,MAAAwH,QAAA0B,GAAAC,KAAA,SACA,EACAC,kBAAAA,GACA,KAAAtB,uBAAA,CACA,EACA,wBAAAuB,GACA,KAAAhU,KAAAM,eAIA,KAAAC,YAAA0T,qBACA,SAAA1T,YAAA2T,cAAAtW,QAAA,KAAAoC,IAAA0B,cACA,KAAAqC,OAAA,KAAA/D,IAAA1B,GAAA,KAAAiC,YAAA2T,cAAA,IACA,KAAAlU,IAAA0B,cACA,KAAAqS,qBAEA,KAAAhQ,OAAA,KAAA/D,IAAA1B,GAAA,KAAA0B,IAAAiB,SATA,KAAA8C,OAAA,KAAA/D,IAAA1B,GAWA,I,uIEzOIoN,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,OCL1D,SAXgB,OACd,GPTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAGD,EAAI+F,SAAW,KAAQ/F,EAAImG,OAAS,UAAY,KAAM,CAACpC,IAAI,YAAY3D,YAAY,WAAWC,MAAM,CACxK,sBAAuBL,EAAI+F,SAC3B,wBAAyB/F,EAAI+F,SAC7B,qBAAsB/F,EAAIqG,WAC1B,yBAA0BrG,EAAI6G,cAC5B,CAAC5G,EAAGD,EAAI4G,YAAY,CAAC7C,IAAI,YAAY3D,YAAY,2BAA2BD,MAAM,CAAC,QAAUH,EAAI2H,mBAAmB,wBAAwB,EAAG3H,EAAIjM,KAAKM,SAAW2L,EAAI+G,yBAA0B9G,EAAG,MAAM,CAACG,YAAY,uBAAwBJ,EAAIjM,IAAIM,SAAW2L,EAAI+G,yBAA0B9G,EAAG,mBAAmB,CAACiI,YAAY,CAAC,YAAY,OAAO,aAAa,OAAO,OAAS,QAAQ/H,MAAM,CAAC,KAAOH,EAAIoG,cAAc,KAAOpG,EAAI+F,SAAW,GAAK,MAAO/F,EAAI+F,UAAY/F,EAAIjM,IAAIiT,UAAYhH,EAAIjM,IAAIM,QAAS4L,EAAG,MAAM,CAACE,MAAM,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,cAAc,CAACF,EAAG,QAAQ,CAACG,YAAY,WAAWD,MAAM,CAAC,EAAI,IAAI,EAAI,IAAI,MAAQ,KAAK,OAAS,KAAK,oBAAsB,gBAAgB,aAAaH,EAAIjM,IAAIiT,aAAahH,EAAIU,KAAKV,EAAIM,GAAG,MAAON,EAAI+F,UAAY/F,EAAIjM,IAAIoT,YAAcnH,EAAIuG,iBAAkBtG,EAAG,MAAM,CAACE,MAAM,CAAC,IAAMH,EAAIjM,IAAIoT,WAAW,IAAM,MAAMnH,EAAIU,MAAM,GAAGV,EAAIM,GAAG,KAAKL,EAAGD,EAAI4G,YAAY,CAAC7C,IAAI,YAAY3D,YAAY,WAAWD,MAAM,CAAC,QAAUH,EAAI2H,mBAAmB,wBAAwB,CAAC1H,EAAG,cAAc,CAACG,YAAY,iBAAiBD,MAAM,CAAC,GAAK,CAC9iChM,KAAM,eACNgQ,OAAQ,CACPjS,SAAU8N,EAAI9N,SACdG,GAAI2N,EAAIjM,IAAI1B,KAEZ,aAAa2N,EAAIpP,EAAE,WAAY,iCAAkC,CAAEuX,QAAQnI,EAAIjM,IAAII,SAAU,CAAC6L,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIjM,IAAII,MAAM,aAAa,GAAG6L,EAAIM,GAAG,KAAON,EAAI+F,SAAoL/F,EAAIU,KAA9KT,EAAGD,EAAI4G,YAAY,CAAC7C,IAAI,YAAY3D,YAAY,cAAcD,MAAM,CAAC,QAAUH,EAAI2H,mBAAmB,iBAAiB,CAAC3H,EAAIM,GAAG,SAASN,EAAIO,GAAGP,EAAIjM,IAAIqU,SAAS,UAAmBpI,EAAIM,GAAG,KAAMN,EAAI+F,SAAU9F,EAAGD,EAAI4G,YAAY,CAAC7C,IAAI,YAAY3D,YAAY,cAAcD,MAAM,CAAC,QAAUH,EAAI2H,mBAAmB,2BAA2B,CAAE3H,EAAIjM,IAAIoB,QAAS8K,EAAG,OAAO,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIjM,IAAIoB,YAAa6K,EAAIjM,IAAI2S,aAAaQ,SAAS,GAAG/R,QAAS8K,EAAG,OAAO,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIjM,IAAI2S,aAAaQ,SAAS,GAAG/R,YAAY6K,EAAIU,OAAOV,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAGD,EAAI4G,YAAY,CAAC7C,IAAI,YAAY3D,YAAY,YAAYD,MAAM,CAAC,QAAUH,EAAI2H,mBAAmB,yBAAyB,CAAC1H,EAAG,gBAAgB,CAACE,MAAM,CAAC,MAAQH,EAAIjM,IAAIkK,SAAS+B,EAAIM,GAAG,KAAMN,EAAIyG,YAAczG,EAAI+F,SAAU9F,EAAG,WAAW,CAACE,MAAM,CAAC,MAAQH,EAAIjM,IAAIsU,SAASrI,EAAIU,MAAM,GAAGV,EAAIM,GAAG,KAAON,EAAImG,OAA46EnG,EAAIU,KAAx6ET,EAAGD,EAAI4G,YAAY,CAAC7C,IAAI,YAAY3D,YAAY,cAAcD,MAAM,CAAC,QAAUH,EAAI2H,mBAAmB,2BAA2B,CAAE3H,EAAIjM,IAAIxB,MAAO0N,EAAG,MAAM,CAACG,YAAY,WAAW,CAACJ,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIjM,IAAIxB,OAAO,YAAYyN,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAItL,WAAasL,EAAIrL,eAAgBsL,EAAG,MAAM,CAACG,YAAY,4BAA4BJ,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIjM,IAAIqB,OAAQ6K,EAAG,WAAW,CAACE,MAAM,CAAC,KAAO,UAAU,SAAWH,EAAI5L,YAAc4L,EAAItL,YAAcsL,EAAIjK,+BAAiCiK,EAAIjL,gBAAgB,MAAQiL,EAAI9K,kBAAkBuL,GAAG,CAAC,MAAQ,SAASI,GAAiC,OAAzBA,EAAOyH,kBAAyBtI,EAAI5K,OAAO4K,EAAIjM,IAAI1B,GAAG,IAAI,CAAC2N,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,qBAAsB,CAACwE,OAAO4K,EAAIjM,IAAIqB,UAAU,YAAY4K,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIjM,IAAIwU,aAActI,EAAG,WAAW,CAACG,YAAY,YAAYD,MAAM,CAAC,KAAO,WAAW,SAAWH,EAAI5L,YAAc4L,EAAItL,WAAW+L,GAAG,CAAC,MAAQ,SAASI,GAAiC,OAAzBA,EAAOyH,kBAAyBtI,EAAI7H,OAAO6H,EAAIjM,IAAI1B,GAAG,IAAI,CAAC2N,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,WAAW,YAAYoP,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIjM,IAAI8J,OAAQoC,EAAG,WAAW,CAACE,MAAM,CAAC,SAAWH,EAAI5L,YAAc4L,EAAItL,WAAasL,EAAIrL,gBAAkBqL,EAAIlL,aAAa2L,GAAG,CAAC,MAAQ,SAASI,GAAiC,OAAzBA,EAAOyH,kBAAyBtI,EAAI/H,QAAQ+H,EAAIjM,IAAI1B,GAAG,IAAI,CAAC2N,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAItK,mBAAmB,YAAYsK,EAAIU,KAAKV,EAAIM,GAAG,KAAON,EAAIjM,IAAI8J,SAAWmC,EAAIjM,IAAIyU,aAAcxI,EAAIjM,IAAI0U,aAAybzI,EAAIjM,IAAI8J,OAA+WmC,EAAIU,KAA3WT,EAAG,WAAW,CAACE,MAAM,CAAC,MAAQH,EAAInK,yBAAyB,aAAamK,EAAInK,yBAAyB,KAAO,YAAY,SAAWmK,EAAI5L,YAAc4L,EAAItL,YAAcsL,EAAIjK,+BAA+B0K,GAAG,CAAC,MAAQ,SAASI,GAAiC,OAAzBA,EAAOyH,kBAAyBtI,EAAIvI,YAAYuI,EAAIjM,IAAI1B,GAAG,IAAI,CAAC2N,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIrK,uBAAuB,YAArxBsK,EAAG,WAAW,CAACE,MAAM,CAAC,MAAQH,EAAIpK,oBAAoB,aAAaoK,EAAIpK,oBAAoB,KAAO,UAAU,UAAYoK,EAAIjM,IAAIyU,YAAcxI,EAAI5L,YAAc4L,EAAItL,YAAcsL,EAAIjK,+BAAiCiK,EAAIrL,gBAAkBqL,EAAIlL,aAAa2L,GAAG,CAAC,MAAQ,SAASI,GAAiC,OAAzBA,EAAOyH,kBAAyBtI,EAAI+H,mBAAmBW,MAAM,KAAMhX,UAAU,IAAI,CAACsO,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAI3K,kBAAkB,YAA8Y2K,EAAIM,GAAG,KAAMN,EAAIjM,KAAKM,SAAW2L,EAAIwG,sBAAuBvG,EAAG,wBAAwB,CAACE,MAAM,CAAC,KAAOH,EAAIwG,sBAAsB,IAAMxG,EAAIjM,KAAK0M,GAAG,CAAC,cAAc,SAASI,GAAQb,EAAIwG,sBAAsB3F,CAAM,KAAKb,EAAIU,MAAM,IAAa,EACz7G,GACsB,IODpB,EACA,KACA,WACA,M,2JCDK,MAAM/D,GAAiB7L,EAAAA,EAAAA,IAAY,eAAgB,CACtDC,MAAOA,KAAA,CACHC,KAAM,GACNE,aAAaC,EAAAA,EAAAA,GAAU,WAAY,2BAA4B,GAC/DC,QAAS,CAAC,EACVC,aAAa,EACbsX,cAAe,KACfC,kBAAkBzX,EAAAA,EAAAA,GAAU,WAAY,iCAAiC,GACzE0X,eAAe1X,EAAAA,EAAAA,GAAU,WAAY,sBAAuB,MAC5D8W,cAAe,KAEnBxT,QAAS,CACLF,WAAaxD,GAAWsB,GAAOtB,EAAMK,QAAQiB,KAAO,EACpD8K,WAAapM,GAAUA,EAAMC,KAC7B8X,eAAiB/X,GAAUA,EAAMG,YACjC+E,oBAAsBlF,GAAUA,EAAM6X,iBACtC5S,iBAAmBjF,GAAUA,EAAM8X,cACnCE,aAAehY,GAAWgC,GAAUhC,EAAMC,KAAK4B,MAAMmB,GAAQA,EAAI1B,KAAOU,KAAQ6B,QAAU,KAC1FsQ,iBAAmBnU,GAAUA,EAAM4X,cACnCK,+BAAiCjY,GAAUA,EAAMC,KAAK6L,QAAQ9I,GAAQA,GAAKa,QAAQC,SACnD,WAAxBd,GAAKa,QAAQC,QAA6C,SAAtBd,EAAIa,OAAOC,QAA2C,gBAAtBd,EAAIa,OAAOC,SAC5D,KAApBd,EAAIa,OAAO2H,QAEtBhL,QAAS,CAEL0X,cAAAA,CAAe1W,IACX5B,EAAAA,EAAAA,KAAUC,EAAAA,EAAAA,IAAE,WAAY,4DAA8D,OAAS2B,EAAMA,MAAMsF,SAAS/F,KAAKA,KAAKoX,QAAS,CAAEC,QAAQ,IACjJ3W,EAAAA,EAAOD,MAAMA,EACjB,EACA6W,UAAAA,CAAW/W,EAAIwG,GACXwQ,EAAAA,GAAAA,IAAQxX,KAAKT,QAASiB,EAAIwG,EAC9B,EACAyQ,QAAAA,CAASvW,EAAOR,IACG0I,MAAMsO,QAAQxW,GAASA,EAAQ,CAACA,IACxCyW,SAASC,IACZ,MAAM1V,EAAMlC,KAAKb,KAAK4B,MAAMmB,GAAQA,EAAI1B,KAAOoX,IAC3C1V,IACAA,EAAIxB,MAAQA,EAChB,GAER,EACAyF,SAAAA,CAAUjF,EAAOiC,EAAQ+C,GAGrB,OAFAlG,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,IACpBM,EAAAA,EAAAA,MAAkBrW,MAAK,IACnBtB,EAAAA,GAAM4X,MAAK1X,EAAAA,EAAAA,IAAY,6BAA6Bc,KAASiC,EAAOb,QAAS,CAAE4D,kBACjF1E,MAAMwE,IACPhG,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,GAC3B,MAAMrV,EAAMlC,KAAKb,KAAK4B,MAAMmB,GAAQA,EAAI1B,KAAOU,IAmB/C,OAlBIgB,IACKA,EAAIgK,YACLhK,EAAIgK,WAAY,EAChBhK,EAAI0B,eAAgB,EACpB1B,EAAIiB,OAASA,EACbjB,EAAIa,OAAS,CACT2H,KAAM,UACN1H,OAAQ,SACRW,KAAM,EACND,OAAQ,IAGhBxB,EAAI8J,QAAS,EACb9J,EAAIwU,cAAe,EACnBxU,EAAI6V,WAAY,EAChB7V,EAAIxB,MAAQ,IAEhBV,KAAKkT,mBACEhT,EAAAA,GAAMC,KAAIC,EAAAA,EAAAA,IAAY,eACxBoB,MAAK,KACFwE,EAAS/F,KAAK+X,mBACdC,EAAAA,EAAAA,KAASlZ,EAAAA,EAAAA,IAAE,WAAY,qDAAsD,CACzEmZ,QAASA,IAAMrW,OAAOsW,SAASC,SAC/BC,OAAO,IAEXC,YAAW,KACPH,SAASC,QAAQ,GAClB,KACP,IAECrS,OAAM,KACP/F,KAAKyX,SAASvW,GAAOnC,EAAAA,EAAAA,IAAE,WAAY,0EAA0E,GAC/G,IAEDgH,OAAOrF,IACRV,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,GAC3BvX,KAAKyX,SAASvW,EAAOR,EAAMsF,SAAS/F,KAAKA,KAAKoX,SAC9CrX,KAAKoX,eAAe,CAAElW,QAAOR,SAAQ,MAE1CqF,OAAM,KACL/F,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,EAAM,GAEzC,EACA1R,cAAAA,CAAe3E,GAGX,OAFAlB,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,IACpBM,EAAAA,EAAAA,MAAkBrW,MAAK,IACnB+W,EAAAA,EAAIT,MAAK1X,EAAAA,EAAAA,IAAY,4BAA6B,CAAEc,UACtDM,MAAK,KACN2W,SAASC,QAAQ,IAEhBrS,OAAOrF,IACRV,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,GAC3BvX,KAAKyX,SAASvW,EAAOR,EAAMsF,SAAS/F,KAAKA,KAAKoX,SAC9CrX,KAAKoX,eAAe,CAAElW,QAAOR,SAAQ,MAE1CqF,OAAM,KACL/F,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,EAAM,GAEzC,EACAlR,UAAAA,CAAWnF,GAEP,OADAlB,KAAKuX,WAAWrW,GAAO,IAChB2W,EAAAA,EAAAA,MAAkBrW,MAAK,IACnB+W,EAAAA,EAAIpY,KAAIC,EAAAA,EAAAA,IAAY,6BAA6Bc,MACnDM,MAAK,KACNxB,KAAKuX,WAAWrW,GAAO,GACvB,MAAMgB,EAAMlC,KAAKb,KAAK4B,MAAMmB,GAAQA,EAAI1B,KAAOU,IAO/C,OANIgB,IACAA,EAAI8J,QAAS,EACT9J,EAAI6V,YACJ7V,EAAIwU,cAAe,KAGpB,CAAI,IAEV3Q,OAAOrF,IACRV,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKoX,eAAe,CAAElW,QAAOR,SAAQ,MAE1CqF,OAAM,KACL/F,KAAKuX,WAAWrW,GAAO,EAAM,GAErC,EACAsF,YAAAA,CAAatF,EAAOqF,GAEhB,OADAvG,KAAKuX,WAAWrW,GAAO,IAChB2W,EAAAA,EAAAA,MAAkBrW,MAAK,IACnB+W,EAAAA,EAAIpY,KAAIC,EAAAA,EAAAA,IAAY,gCAAgCc,gBAAoBqF,MAC1E/E,MAAK,KACNxB,KAAKuX,WAAWrW,GAAO,GACvB,MAAMgB,EAAMlC,KAAKb,KAAK4B,MAAMmB,GAAQA,EAAI1B,KAAOU,IAc/C,OAbIgB,IACAA,EAAI8J,QAAS,EACb9J,EAAI0B,eAAgB,EACpB1B,EAAIgK,WAAY,EAChBhK,EAAIwU,cAAe,EACnBxU,EAAIyU,YAAa,EACjBzU,EAAIiB,OAAS,KACbjB,EAAIa,OAAS,CAAC,EACK,OAAfb,EAAIqB,QACJvD,KAAKX,cAET6C,EAAIqB,YAASxD,IAEV,CAAI,IAEVgG,OAAOrF,IACRV,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKoX,eAAe,CAAElW,QAAOR,SAAQ,KAGjD,EACAgG,SAAAA,CAAUxF,GAGN,OAFAlB,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,IACpBM,EAAAA,EAAAA,MAAkBrW,MAAK,IACnB+W,EAAAA,EAAIpY,KAAIC,EAAAA,EAAAA,IAAY,6BAA6Bc,MACnDM,MAAK,KACNxB,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,GAC3B,MAAMrV,EAAMlC,KAAKb,KAAK4B,MAAMmB,GAAQA,EAAI1B,KAAOU,IAC/C,GAAIgB,EAAK,CACL,MAAMoB,EAAUpB,EAAIqB,OACpBrB,EAAIqB,YAASxD,EACbmC,EAAIoB,QAAUA,GAAWpB,EAAIoB,QAC7BpB,EAAIa,OAAS,CACT2H,KAAM,SACN1H,OAAQ,SACRW,KAAM,EACND,OAAQ,GAEZxB,EAAIxB,MAAQ,EAChB,CAGA,OAFAV,KAAKX,cACLW,KAAKkT,oBACE,CAAI,IAEVnN,OAAOrF,IACRV,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,GAC3BvX,KAAKoX,eAAe,CAAElW,QAAOR,SAAQ,MAE1CqF,OAAM,KACL/F,KAAKuX,WAAWrW,GAAO,GACvBlB,KAAKuX,WAAW,WAAW,EAAM,GAEzC,EACA,kBAAMtE,GACFjT,KAAKR,aAAc,EACnB,IACI,MAAMwG,QAAiBuS,EAAAA,EAAIpY,KAAIC,EAAAA,EAAAA,IAAY,4BAG3C,OAFAJ,KAAKb,KAAO6G,EAAS/F,KAAKd,KAC1Ba,KAAKR,aAAc,GACZ,CACX,CACA,MAAOkB,GACHC,EAAAA,EAAOD,MAAMA,IACb5B,EAAAA,EAAAA,KAAUC,EAAAA,EAAAA,IAAE,WAAY,6DACxBiB,KAAKR,aAAc,CACvB,CACJ,EACA,oBAAMgZ,CAAetX,GACjB,OAAOqX,EAAAA,EAAIpY,KAAIC,EAAAA,EAAAA,IAAY,6BAA6Bc,MACnDM,MAAMwE,IACP,MAAM9D,EAAMlC,KAAKb,KAAK4B,MAAMmB,GAAQA,EAAI1B,KAAOU,IAC3CgB,IACAA,EAAIa,OAASiD,EAAS/F,MAE1B,MAAMwY,EAA8BzY,KAAKmX,+BACzC3J,QAAQkL,MAAM,iDAAkDD,GACrB,IAAvCA,EAA4B3Y,SAC5B0N,QAAQkL,MAAM,qBACdtF,cAAcpT,KAAK8W,eACnB9W,KAAK8W,cAAgB,MAErBrN,OAAOkP,OAAO3S,EAAS/F,KAAM,UACF,KAAxB+F,EAAS/F,KAAKS,OACyB,IAAvC+X,EAA4B3Y,SAC/BsT,cAAcpT,KAAK8W,eACnB9W,KAAK8W,cAAgB,KACzB,IAEC/Q,OAAOrF,IACRV,KAAKoX,eAAe,CAAElW,QAAOR,UAC7BV,KAAKb,KAAOa,KAAKb,KAAK6L,QAAQ9I,GAAQA,EAAI1B,KAAOU,IACjDlB,KAAKkT,kBAAkB,GAE/B,EACA,wBAAMiD,GACF,IACI,MAAM,KAAElW,SAAeC,EAAAA,GAAMC,KAAIC,EAAAA,EAAAA,IAAY,0BAC7CJ,KAAKgX,cAAgB/W,EAAK2Y,QAAQ7X,MAAMoC,GAAWA,EAAOb,OAASrC,EAAK4Y,wBACxE7Y,KAAKoW,cAAgBnW,EAAK2Y,QAAQ5N,QAAQ7H,GAAwC,mBAA7BA,EAAOC,mBAChE,CACA,MAAO1C,GAEH,OADAC,EAAAA,EAAOD,MAAM,iDAAkD,CAAEA,WAC1D,CACX,CACA,OAAO,CACX,EACAwS,gBAAAA,GACIE,cAAcpT,KAAK8W,eAEwB,IADP9W,KAAKmX,+BACTrX,SAGhCE,KAAK8W,cAAgBgC,aAAY,KAC7B,MAAML,EAA8BzY,KAAKmX,+BACzC3J,QAAQkL,MAAM,8BAA+BD,GAC7CA,EAA4Bd,SAAQzV,IAChClC,KAAKwY,eAAetW,EAAI1B,GAAG,GAC7B,GACH,KACP,I,sECrRJY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,m+GAG2zG,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,sCAAsC,gEAAgE,MAAQ,GAAG,SAAW,igCAAigC,eAAiB,CAAC,quIAA2uI,6zHAA6zH,WAAa,MAEnkZ,S,sECPIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,y8BAA08B,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,wDAAwD,MAAQ,GAAG,SAAW,2YAA2Y,eAAiB,CAAC,oxCAAoxC,WAAa,MAE1xF,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,kUAAmU,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,2DAA2D,MAAQ,GAAG,SAAW,mGAAmG,eAAiB,CAAC,ucAAuc,WAAa,MAEjiC,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,sbAqBtC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,sFAAsF,MAAQ,GAAG,SAAW,0KAA0K,eAAiB,CAAC,gtWAAysW,WAAa,MAE5hX,S,sECzBIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,8WAA+W,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,sEAAsE,MAAQ,GAAG,SAAW,oIAAoI,eAAiB,CAAC,6YAA6Y,WAAa,MAE/jC,S,sECJIY,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,kDAAmD,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,kFAAkF,MAAQ,GAAG,SAAW,kBAAkB,eAAiB,CAAC,+CAA+C,WAAa,MAE/T,S,gDCPA,I,+HAaA,MCb6Q,GDahPmP,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,qBACR/E,KAAAA,CAAMgF,GACF,MAAMkJ,GAAkBzZ,EAAAA,EAAAA,GAAU,WAAY,mBAAmB,GAC3D0Z,GAAmB1Z,EAAAA,EAAAA,GAAU,WAAY,wBAAyB,IAClEqH,GAAQ3H,EAAAA,EAAAA,KACRI,GAAa4C,EAAAA,EAAAA,KAAS,IAAM2E,EAAMvH,aAClC6Z,GAAoBjX,EAAAA,EAAAA,KAAS,IAAM2E,EAAMpH,QAAQH,aAMjD8Z,GAAelX,EAAAA,EAAAA,KAAS,SAAwDjC,IAAlD4G,EAAMxH,KAAK4B,MAAKC,IAAA,IAAC,MAAEoL,GAAOpL,EAAA,OAAe,MAAVoL,CAAa,MAMhF,OAJAuE,EAAAA,EAAAA,KAAc,KACVhK,EAAMhH,iBACNgH,EAAM/F,UAAU,IAEb,CAAEqQ,OAAO,EAAM8H,kBAAiBC,mBAAkBrS,QAAOvH,aAAY6Z,oBAAmBC,eAAcna,EAAC,KAAE0T,kBAAiB,IAAE0G,gBAAe,IAAEC,oBAAmB,IAAEC,sBAAqB,IAAEC,gBAAe,IAAE9H,iBAAgB,IAAEC,cAAa,IAAElR,wBAAuBA,EAAAA,EAC7Q,I,uIEtBAqN,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,OCL1D,SAXgB,E,SAAA,GACd,GHTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAOvD,EAAGsD,EAAOyH,gBAAgB,CAAC7K,MAAM,CAAC,aAAaoD,EAAO3S,EAAE,WAAY,SAAS6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAEJ,EAAOqH,gBAAiB3K,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,wBAAwB,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,aAAc,KAAOqR,EAAOe,kBAAkB8G,UAAU3H,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwBgZ,YAAY,EAAExH,OAAM,IAAO,MAAK,EAAM,cAAc5D,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,yBAAyB,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,cAAe,KAAOqR,EAAOe,kBAAkBvG,WAAW0F,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwB2L,aAAa,EAAE6F,OAAM,OAAU5D,EAAIM,GAAG,KAAKL,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,uBAAuB,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,YAAc,KAAOqR,EAAOe,kBAAkB+G,SAAS5H,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwBiZ,WAAW,EAAEzH,OAAM,OAAU5D,EAAIM,GAAG,KAAKL,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,wBAAwB,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,aAAe,KAAOqR,EAAOe,kBAAkBgH,UAAU7H,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwBkZ,YAAY,EAAE1H,OAAM,OAAU5D,EAAIM,GAAG,KAAMiD,EAAO/K,MAAMtH,YAAc,EAAG+O,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,uBAAuB,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,YAAc,KAAOqR,EAAOe,kBAAkBiH,SAAS9H,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,UAAUgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAO4H,gBAAgB,CAACnL,EAAIM,GAAGN,EAAIO,GAAGgD,EAAO/K,MAAMtH,gBAAgB,EAAE0S,OAAM,GAAM,CAACjD,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwBmZ,WAAW,EAAE3H,OAAM,IAAO,MAAK,EAAM,cAAc5D,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,4BAA4B,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,gBAAkB,KAAOqR,EAAOe,kBAAkB,gBAAgBb,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwB4L,WAAW,EAAE4F,OAAM,OAAU5D,EAAIM,GAAG,KAAKL,EAAGsD,EAAO2H,uBAAuBlL,EAAIM,GAAG,KAAMiD,EAAOqH,iBAAmBrH,EAAOuH,kBAAmB7K,EAAG,KAAK,CAACG,YAAY,uBAAuB,CAACH,EAAGsD,EAAOD,cAAc,CAACnD,MAAM,CAAC,KAAO,GAAG,aAAaoD,EAAO3S,EAAE,WAAY,0BAA0B,GAAI2S,EAAOqH,kBAAoBrH,EAAOuH,kBAAmB,CAAEvH,EAAOwH,aAAc9K,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,yBAAyB,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,cAAgB,KAAOqR,EAAOe,kBAAkBkH,WAAW/H,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwBoZ,aAAa,EAAE5H,OAAM,IAAO,MAAK,EAAM,aAAa5D,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,wBAAwB,GAAK,CAAEhM,KAAM,gBAAiBgQ,OAAQ,CAAEjS,SAAU,aAAe,KAAOqR,EAAOe,kBAAkBmH,UAAUhI,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOnR,wBAAwBqZ,YAAY,EAAE7H,OAAM,OAAU5D,EAAIM,GAAG,KAAKN,EAAIY,GAAI2C,EAAOtS,YAAY,SAASiB,GAAU,OAAO+N,EAAGsD,EAAO0H,oBAAoB,CAACtK,IAAIzO,EAASG,GAAG8N,MAAM,CAAC,GAAK,gBAAgBjO,EAASG,KAAK,KAAOH,EAASqS,YAAY,GAAK,CACjqHpQ,KAAM,gBACNgQ,OAAQ,CAAEjS,SAAUA,EAASG,MAC3BoR,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOjO,EAASC,QAAQ,EAAEyR,OAAM,IAAO,MAAK,IAAO,KAAI5D,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAGsD,EAAO0H,oBAAoB,CAAC9K,MAAM,CAAC,GAAK,qBAAqB,KAAOoD,EAAO3S,EAAE,WAAY,6BAA6B,KAAO2S,EAAOsH,oBAAoB,EAAEjH,OAAM,MAC/U,GACsB,IGOpB,EACA,KACA,WACA,M,0CCfF,I,0CAKA,MCLiR,GDKpPpC,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,gBACRnF,MAAO,CACH2B,MAAO,MAEXvB,KAAAA,CAAMgF,GACF,MAAMpF,EAAQoF,EACRgK,GAAc7X,EAAAA,EAAAA,KAAS,IAAsB,MAAhByI,EAAM2B,QACnC0N,GAAa9X,EAAAA,EAAAA,KAAS,IAAsB,MAAhByI,EAAM2B,QAClC2N,GAAY/X,EAAAA,EAAAA,KAAS,IAAM6X,EAAY7S,MAAQgT,EAAAA,IAAyBC,EAAAA,MACxEC,GAAYlY,EAAAA,EAAAA,KAAS,IAAM6X,EAAY7S,OAAQjI,EAAAA,EAAAA,IAAE,WAAY,cAAeA,EAAAA,EAAAA,IAAE,WAAY,cAC1Fob,GAAanY,EAAAA,EAAAA,KAAS,IAAM6X,EAAY7S,OACxCjI,EAAAA,EAAAA,IAAE,WAAY,mEACdA,EAAAA,EAAAA,IAAE,WAAY,iIACpB,MAAO,CAAEkS,OAAO,EAAMxG,QAAOoP,cAAaC,aAAYC,YAAWG,YAAWC,aAAY3I,iBAAgBA,EAAAA,EAC5G,I,uIETA5D,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,OCL1D,SAXgB,E,SAAA,GACd,GHTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAQD,EAAOmI,aAAenI,EAAOoI,WAAY1L,EAAG,OAAO,CAACG,YAAY,kBAAkBC,MAAM,CAAE,6BAA8BkD,EAAOmI,aAAcvL,MAAM,CAAC,MAAQoD,EAAOyI,aAAa,CAAC/L,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOqI,UAAU,KAAO,GAAG,OAAS,MAAM5L,EAAIM,GAAG,OAAON,EAAIO,GAAGgD,EAAOwI,WAAW,OAAO,GAAG/L,EAAIU,IAC3Z,GACsB,IGUpB,EACA,KACA,WACA,M,wDCPF,QAAepF,OAAO2Q,OAAO,CAEzBb,SAAUc,EAAAA,IACVnO,UAAWoO,EAAAA,IACXd,QAASS,EAAAA,IACTR,SAAUc,EAAAA,IACVpO,QAASqO,EAAAA,IACTb,UAAWK,EAAAA,IACXJ,SAAUa,EAAAA,IACVf,QAASgB,EAAAA,IAETC,GAAIC,EAAAA,IACJC,KAAMC,EAAAA,IACNC,cAAexG,EAAAA,GACfyG,UAAWC,EAAAA,IACXC,MAAOC,EAAAA,IACPC,MAAOC,EAAAA,IACPC,YAAaC,EAAAA,IACbC,WAAYC,EAAAA,IACZC,WAAYC,EAAAA,GACZC,OAAQC,EAAAA,IACRC,aAAcC,EAAAA,IACdpX,OAAQqX,EAAAA,IACRC,SAAUC,EAAAA,IACVC,OAAQC,EAAAA,IACRC,MAAOC,EAAAA,IACPC,SAAUC,EAAAA,K,sEC/BVpb,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,gLAQtC,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iEAAiE,MAAQ,GAAG,SAAW,yDAAyD,eAAiB,CAAC,0wDAA+wD,WAAa,MAE59D,S,kDCPO,MAAMiS,EAAoBhJ,OAAO2Q,OAAO,CAC9Cb,UAAUxa,EAAAA,EAAAA,IAAE,WAAY,YACxBmN,WAAWnN,EAAAA,EAAAA,IAAE,WAAY,aACzBya,SAASza,EAAAA,EAAAA,IAAE,WAAY,eACvB0a,UAAU1a,EAAAA,EAAAA,IAAE,WAAY,iBACxB2a,SAAS3a,EAAAA,EAAAA,IAAE,WAAY,WACvB,eAAeA,EAAAA,EAAAA,IAAE,WAAY,eAC7B6a,UAAU7a,EAAAA,EAAAA,IAAE,WAAY,iBACxB4a,WAAW5a,EAAAA,EAAAA,IAAE,WAAY,mB,iDChB1B,I,qHCcA,MCdoL,EDcpL,CACAuD,KAAA,WACAmI,MAAA,CACAgS,KAAA,CACA/R,KAAAC,OACAyJ,QAAA,IAEAsI,WAAA,CACAhS,KAAAV,OACAoK,QAAA,IAGApS,SAAA,CACA2a,cAAAA,GACA,MAAAC,EAAA,IAAAC,EAAAA,GAAAC,SAmCA,OAlCAF,EAAAG,KAAA,SAAA/b,GAAA,IACAgc,GADA,KAAAC,EAAA,MAAApK,EAAA,KAAA4J,GAAAzb,EAEA,IACAgc,EAAAE,mBAAAC,SAAAF,IACAG,QAAA,cACA7R,aACA,OAAA8R,GACA,QACA,CAEA,OAAAL,EAAAtX,QAAA,cAAAsX,EAAAtX,QAAA,UACA,SAGA,IAAA4X,EAAA,YAAAL,EAAA,8BAKA,OAJApK,IACAyK,GAAA,WAAAzK,EAAA,KAEAyK,GAAA,IAAAb,EAAA,OACAa,CACA,EACAV,EAAAW,QAAApc,IAAA,SAAAsb,EAAA,MAAAe,GAAArc,EAEA,OADAqc,EAAA5W,KAAA6W,IAAA,EAAAD,GAAA,KAAAd,WAAA,IACA,KAAAc,KAAAf,OAAAe,IAAA,EAEAZ,EAAArH,MAAAmI,IAAA,UAAA7K,EAAA,KAAA4J,GAAAiB,EACA,OAAAjB,GAGA5J,CAAA,EAEA+J,EAAAe,WAAAC,IAAA,SAAAnB,GAAAmB,EACA,qBAAAnB,gBAAA,EAEAoB,EAAAA,EAAAC,UACAjB,EAAAA,EAAAA,IAAA,KAAAJ,KAAAsB,OAAA,CACAnB,WACAoB,KAAA,EACAC,WAAA,EACAC,QAAA,EACAC,QAAA,EACAC,UAAA,EACAN,UAAA,EACAO,YAAA,EACAC,aAAA,IAEA,CACAC,iBAAA,EACAC,aAAA,CACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,eAIA,I,uIErFI5Q,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,O,eCL1D,SAXgB,OACd,GCTW,WAAkB,IAAIC,EAAInO,KAAqB,OAAOoO,EAApBD,EAAIE,MAAMD,IAAa,MAAM,CAACG,YAAY,oBAAoBkF,SAAS,CAAC,UAAYtF,EAAIO,GAAGP,EAAIwO,kBAC9I,GACsB,IDUpB,EACA,KACA,WACA,M,QEfmR,GCMxPhN,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,oBACRnF,MAAO,CACHvI,IAAK,MAET2I,MAAMgF,IACK,CAAEoB,OAAO,EAAMwN,aAAY,MAAE1f,EAAC,KAAE2f,gBAAe,IAAElN,iBAAgB,IAAEmN,SAAQA,M,eCDtF,EAAU,CAAC,EAEf,EAAQ9Q,kBAAoB,IAC5B,EAAQC,cAAgB,IACxB,EAAQC,OAAS,SAAc,KAAM,QACrC,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,IAAQC,QAAS,IAAQA,OCL1D,SAXgB,OACd,GFTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAOvD,EAAGsD,EAAOgN,gBAAgB,CAACpQ,MAAM,CAAC,GAAK,OAAO,KAAOoD,EAAO3S,EAAE,WAAY,eAAe,MAAQ,GAAG6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAO+M,gBAAgB,EAAE1M,OAAM,MAAS,CAAC5D,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,mBAAmB,CAACH,EAAGsD,EAAOiN,SAAS,CAACrQ,MAAM,CAAC,KAAOH,EAAIjM,IAAI0c,YAAY,cAAc,MAAM,IAC7c,GACsB,IEUpB,EACA,KACA,WACA,M,QCfF,I,8IC0KA,MC1KuM,ED0KvM,CACAtc,KAAA,wBACA8H,WAAA,CACAyU,SAAA,IACAC,YAAA,IACAxU,SAAA,IACAyU,WAAA,IACAC,sBAAA,IACAxN,iBAAAA,EAAAA,GAEAjH,OAAA,CAAAC,EAAAA,GACAC,MAAA,CACAvI,IAAA,CACAwI,KAAAjB,OACAmB,UAAA,GAEA8C,KAAA,CACAhD,KAAAyJ,QACAvJ,UAAA,IAGAC,KAAAA,CAAAJ,GAEA,MAAA9D,GAAA3H,EAAAA,EAAAA,KACAyD,GAAAqI,EAAAA,EAAAA,KAEAmU,GAAAjd,EAAAA,EAAAA,KAAA,IACA,IAAAyI,EAAAvI,KAAAmT,UAAAvV,QACA2K,EAAAvI,KAAAmT,SAAA,IAAA4J,sBAEA,KAGA/Y,GAAAiK,EAAAA,EAAAA,IAAA,CACA+O,sBAAAD,EAAAjY,MAAAmY,QAAA,CAAAC,EAAAC,KACAD,EAAAC,EAAAC,SAAAD,EAAAjL,SAAA,GACAgL,IACA,IACAG,OAAA,KAGA,OACAN,uBACA/Y,gBACAS,QACAlE,cACA+c,QAAA,MACAvF,SAAA,MACAM,SAAA,MACAkF,iBAAAA,EAAAA,IAEA,EACAxf,KAAAA,KACA,CACAyf,aAAA,EACAC,cAAA,CACAC,SAAA,GACAC,cAAA,GACAC,UAAA,GAEAC,mBAAA,EACAC,wBAAA,KACAC,sBAAA3gB,EAAAA,EAAAA,GAAA,0CAGA8V,MAAA,CACA1H,IAAAA,CAAAwS,GACAA,EACA,KAAAC,0BAEA,KAAAH,wBAAA,IAEA,GAEAzb,QAAA,CACA6b,gBAAAA,GACA,KAAAV,aAAA,EACA,KAAAW,WAAA,KACA,KAAAC,MAAAC,iBAAAC,OAAA,GAEA,EACAC,aAAAA,GACA,KAAAva,cAAAqZ,OAAAle,KAAA,KAAAse,eACA,KAAAA,cAAA,CACAC,SAAA,GACAC,cAAA,GACAC,UAAA,GAEA,KAAAJ,aAAA,CACA,EACAgB,mBAAAA,GACA,KAAAf,cAAA,CACAC,SAAA,GACAC,cAAA,GACAC,UAAA,GAEA,KAAAJ,aAAA,CACA,EACAiB,WAAAA,CAAAC,GACA,KAAA1a,cAAAqZ,OAAA,KAAArZ,cAAAqZ,OAAAvU,QAAA6V,GAAAA,IAAAD,GACA,EACA,6BAAAT,GACA,OAAAjgB,EAAAA,GAAAC,KAAAC,EAAAA,EAAAA,IAAA,0CAAA8B,IAAA1B,OACAgB,MAAAwE,IACA,KAAAga,wBAAAha,EAAA/F,IAAA,IAEA8F,OAAA,KACA,KAAAia,wBAAA,OAEA,EACA,yBAAAc,SACA,KAAAre,YAAA0T,qBACA,SAAA1T,YAAA2T,cAAAtW,QAAA,KAAAoC,IAAA0B,cACA,KAAAqC,OAAA,KAAA/D,IAAA1B,GAAA,KAAAiC,YAAA2T,cAAA,QAAAlQ,eACA,KAAAhE,IAAA0B,eACAhC,EAAAA,EAAAA,IAAA,gCAAAsE,eAEA,KAAAD,OAAA,KAAA/D,IAAA1B,GAAA,KAAA0B,IAAAiB,OAAA,KAAA+C,eAEA,KAAA6a,MAAA,iBACA,I,eEvRI,EAAU,CAAC,EAEf,EAAQlT,kBAAoB,IAC5B,EAAQC,cAAgB,IACxB,EAAQC,OAAS,SAAc,KAAM,QACrC,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,IAAQC,QAAS,IAAQA,OCL1D,SAXgB,OACd,GCTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,WAAW,CAACE,MAAM,CAAC,KAAOH,EAAIT,KAAK,KAAO,SAAS,KAAOS,EAAIpP,EAAE,WAAY,4BAA4B6P,GAAG,CAAC,cAAc,SAASI,GAAQ,OAAOb,EAAI4S,MAAM,cAAe/R,EAAO,GAAG4C,YAAYzD,EAAI0D,GAAG,CAAG1D,EAAIjM,IAAI8J,SAAWmC,EAAIjM,IAAIyU,aAAcxI,EAAIjM,IAAI0U,cAAiD,OAAhCzI,EAAI6R,wBAA8f,KAA5d,CAAClR,IAAI,UAAUgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,WAAW,CAACE,MAAM,CAAC,MAAQH,EAAIpK,oBAAoB,aAAaoK,EAAIpK,oBAAoB,KAAO,UAAU,UAAYoK,EAAIjM,IAAIyU,YAAcxI,EAAI5L,YAAc4L,EAAItL,YAAcsL,EAAIjK,+BAAiCiK,EAAIrL,gBAAkBqL,EAAIlL,aAAa2L,GAAG,CAAC,MAAQ,SAASI,GAAiC,OAAzBA,EAAOyH,kBAAyBtI,EAAI2S,oBAAoBjK,MAAM,KAAMhX,UAAU,IAAI,CAACsO,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAI3K,kBAAkB,YAAY,EAAEuO,OAAM,IAAY,MAAK,IAAO,CAAC3D,EAAG,MAAM,CAACG,YAAY,kBAAkB,CAACH,EAAG,IAAI,CAACG,YAAY,uBAAuB,CAACJ,EAAIM,GAAG,WAAWN,EAAIO,GAAmC,OAAhCP,EAAI6R,wBAAmC7R,EAAIpP,EAAE,WAAY,iDAAmDoP,EAAIpP,EAAE,WAAY,yEAAyE,aAAcoP,EAAI8R,qBAAsB7R,EAAG,IAAI,CAACE,MAAM,CAAC,KAAOH,EAAI8R,uBAAuB,CAAC9R,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,eAAe,cAAcoP,EAAIU,OAAOV,EAAIM,GAAG,KAAMN,EAAI8Q,qBAAqBnf,OAAS,GAAsC,OAAhCqO,EAAI6R,yBAAoC7R,EAAI6R,wBAAwBd,sBAAsBpf,OAAS,EAAIsO,EAAG,KAAK,CAACD,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,0BAA0B,YAAYoP,EAAIU,KAAKV,EAAIM,GAAG,KAAsC,OAAhCN,EAAI6R,wBAAkC7R,EAAIY,GAAIZ,EAAI8Q,sBAAsB,SAASI,GAAQ,OAAOjR,EAAG,MAAM,CAACU,IAAIuQ,EAAOC,QAAQ/Q,YAAY,iBAAiB,CAACH,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQ+Q,EAAO3M,YAAY,MAAQvE,EAAIjI,cAAcgZ,sBAAsBG,EAAOC,UAAU1Q,GAAG,CAAC,eAAe,SAASI,GAAQ,OAAOb,EAAI6S,KAAK7S,EAAIjI,cAAcgZ,sBAAuBG,EAAOC,QAAStQ,EAAO,KAAKb,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACG,YAAY,uBAAuB,CAACJ,EAAIM,GAAG,eAAeN,EAAIO,GAAG2Q,EAAOT,aAAa,iBAAiB,EAAE,IAAInV,OAAOwX,KAAK9S,EAAI6R,yBAAyBlgB,OAAS,EAAGsO,EAAG,WAAW,CAACG,YAAY,QAAQ,CAACH,EAAG,SAAS,CAACG,YAAY,uBAAuB,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,0CAA0C,cAAcoP,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAI6R,wBAAwBd,uBAAuB,SAASlY,EAAM8H,GAAK,OAAOV,EAAG,cAAc,CAACU,IAAIA,EAAIR,MAAM,CAAC,MAAQtH,EAAM0L,aAAe5D,EAAI,cAAc9H,EAAM4X,YAAY,MAAQ5X,EAAMA,MAAM,SAAW,KAAK,KAAI,GAAG,CAACoH,EAAG,IAAI,CAACG,YAAY,uBAAuB,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,qCAAqC,eAAeoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAcoP,EAAIM,GAAG,KAAsC,OAAhCN,EAAI6R,wBAAkC,CAAC5R,EAAG,IAAI,CAACG,YAAY,uBAAuB,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,6DAA6D,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,aAAa,CAACE,MAAM,CAAC,KAAO,OAAO,KAAOH,EAAIpP,EAAE,WAAY,yEAAyEoP,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAIjI,cAAcqZ,QAAQ,SAASsB,GAAO,OAAOzS,EAAG,MAAM,CAACU,IAAI+R,EAAMjB,SAASrR,YAAY,gBAAgB8H,YAAY,CAAC,QAAU,OAAO,cAAc,SAAS,kBAAkB,gBAAgB,iBAAiB,QAAQ,CAACjI,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQH,EAAIpP,EAAE,WAAY,aAAa,MAAQ8hB,EAAMjB,UAAUhR,GAAG,CAAC,eAAe,SAASI,GAAQ,OAAOb,EAAI6S,KAAKH,EAAO,WAAY7R,EAAO,KAAKb,EAAIM,GAAG,KAAKL,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQH,EAAIpP,EAAE,WAAY,kBAAkB,MAAQ8hB,EAAMhB,eAAejR,GAAG,CAAC,eAAe,SAASI,GAAQ,OAAOb,EAAI6S,KAAKH,EAAO,gBAAiB7R,EAAO,KAAKb,EAAIM,GAAG,KAAKL,EAAG,wBAAwB,CAACE,MAAM,CAAC,QAAUuS,EAAMf,UAAUlR,GAAG,CAAC,iBAAiB,SAASI,GAAQ,OAAOb,EAAI6S,KAAKH,EAAO,WAAY7R,EAAO,IAAI,CAACb,EAAIM,GAAG,eAAeN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAc,gBAAgBoP,EAAIM,GAAG,KAAKL,EAAG,WAAW,CAACiI,YAAY,CAAC,aAAa,OAAO/H,MAAM,CAAC,aAAaH,EAAIpP,EAAE,WAAY,iBAAiB6P,GAAG,CAAC,MAAQ,SAASI,GAAQ,OAAOb,EAAIwS,YAAYE,EAAM,GAAGjP,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIsR,oBAAoB,EAAE1N,OAAM,IAAO,MAAK,MAAS,EAAE,IAAG5D,EAAIM,GAAG,KAAMN,EAAIuR,YAAatR,EAAG,MAAM,CAACG,YAAY,iBAAiB,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAG,eAAeN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAc,gBAAgBoP,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACiI,YAAY,CAAC,QAAU,OAAO,cAAc,SAAS,kBAAkB,gBAAgB,iBAAiB,QAAQ,CAACjI,EAAG,cAAc,CAAC+B,IAAI,mBAAmB7B,MAAM,CAAC,MAAQH,EAAIpP,EAAE,WAAY,aAAa,aAAaoP,EAAIpP,EAAE,WAAY,6BAA6B,MAAQoP,EAAIwR,cAAcC,UAAUhR,GAAG,CAAC,eAAe,SAASI,GAAQ,OAAOb,EAAI6S,KAAK7S,EAAIwR,cAAe,WAAY3Q,EAAO,KAAKb,EAAIM,GAAG,KAAKL,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQH,EAAIpP,EAAE,WAAY,kBAAkB,aAAaoP,EAAIpP,EAAE,WAAY,kCAAkC,MAAQoP,EAAIwR,cAAcE,eAAejR,GAAG,CAAC,eAAe,SAASI,GAAQ,OAAOb,EAAI6S,KAAK7S,EAAIwR,cAAe,gBAAiB3Q,EAAO,KAAKb,EAAIM,GAAG,KAAKL,EAAG,wBAAwB,CAACE,MAAM,CAAC,QAAUH,EAAIwR,cAAcG,SAAS,aAAa3R,EAAIpP,EAAE,WAAY,0BAA0B6P,GAAG,CAAC,iBAAiB,SAASI,GAAQ,OAAOb,EAAI6S,KAAK7S,EAAIwR,cAAe,WAAY3Q,EAAO,IAAI,CAACb,EAAIM,GAAG,iBAAiBN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAc,mBAAmB,GAAGoP,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACiI,YAAY,CAAC,QAAU,OAAO,cAAc,SAAS,aAAa,QAAQ,CAACjI,EAAG,WAAW,CAACE,MAAM,CAAC,aAAaH,EAAIpP,EAAE,WAAY,6BAA6B6P,GAAG,CAAC,MAAQT,EAAIsS,eAAe7O,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAI8L,YAAY,EAAElI,OAAM,IAAO,MAAK,EAAM,aAAa,CAAC5D,EAAIM,GAAG,iBAAiBN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,YAAY,kBAAkBoP,EAAIM,GAAG,KAAKL,EAAG,WAAW,CAACiI,YAAY,CAAC,cAAc,OAAO/H,MAAM,CAAC,aAAaH,EAAIpP,EAAE,WAAY,wBAAwB6P,GAAG,CAAC,MAAQT,EAAIuS,qBAAqB9O,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIoM,YAAY,EAAExI,OAAM,IAAO,MAAK,EAAM,aAAa,CAAC5D,EAAIM,GAAG,iBAAiBN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,WAAW,mBAAmB,KAAKoP,EAAIU,KAAKV,EAAIM,GAAG,KAAON,EAAIuR,YAA6WvR,EAAIU,KAApWT,EAAG,WAAW,CAACiI,YAAY,CAAC,aAAa,OAAO/H,MAAM,CAAC,aAAaH,EAAIpP,EAAE,WAAY,cAAc6P,GAAG,CAAC,MAAQT,EAAIiS,kBAAkBxO,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIqR,WAAW,EAAEzN,OAAM,IAAO,MAAK,EAAM,YAAY,CAAC5D,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAc,eAAyBoP,EAAI6R,wBAAwBT,OAAOzf,OAAS,EAAG,CAACsO,EAAG,IAAI,CAACG,YAAY,uBAAuB,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,2BAA2B,cAAcoP,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAI6R,wBAAwBT,QAAQ,SAASsB,GAAO,OAAOzS,EAAG,MAAM,CAACU,IAAI+R,EAAMjB,SAASrR,YAAY,gBAAgB8H,YAAY,CAAC,QAAU,OAAO,cAAc,SAAS,kBAAkB,gBAAgB,iBAAiB,QAAQ,CAACjI,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQH,EAAIpP,EAAE,WAAY,aAAa,MAAQ8hB,EAAMjB,SAAS,SAAW,IAAIhR,GAAG,CAAC,eAAe,SAASI,GAAQ,OAAOb,EAAI6S,KAAKH,EAAO,WAAY7R,EAAO,KAAKb,EAAIM,GAAG,KAAKL,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQH,EAAIpP,EAAE,WAAY,kBAAkB,MAAQ8hB,EAAMhB,cAAc,SAAW,IAAIjR,GAAG,CAAC,eAAe,SAASI,GAAQ,OAAOb,EAAI6S,KAAKH,EAAO,gBAAiB7R,EAAO,KAAKb,EAAIM,GAAG,KAAKL,EAAG,wBAAwB,CAACE,MAAM,CAAC,QAAUuS,EAAMf,SAAS,SAAW,IAAIlR,GAAG,CAAC,iBAAiB,SAASI,GAAQ,OAAOb,EAAI6S,KAAKH,EAAO,WAAY7R,EAAO,IAAI,CAACb,EAAIM,GAAG,eAAeN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,cAAc,iBAAiB,EAAE,KAAIqP,EAAG,IAAI,CAACG,YAAY,uBAAuB,CAACJ,EAAIM,GAAG,WAAWN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,sBAAsB,aAAa,IACvyP,GACsB,IDUpB,EACA,KACA,WACA,M,uBE8MF,MC7N+L,GD6N/L,CACAuD,KAAA,gBAEA8H,WAAA,CACAsU,gBAAA,IACApU,SAAA,IACA4W,WAAA,IACA1P,iBAAA,IACA2P,SAAA,IACAnC,sBAAA,IACAoC,sBAAA,EACApN,sBAAAA,EAAAA,GAEAzJ,OAAA,CAAAC,EAAAA,GAEAC,MAAA,CACAvI,IAAA,CACAwI,KAAAjB,OACAmB,UAAA,IAIAC,MAAAA,KAIA,CACAlE,OAJA3H,EAAAA,EAAAA,KAKAyD,aAJAqI,EAAAA,EAAAA,KAMAuW,cAAA,MACAC,wBAAA,MACA7G,QAAA,MACA8G,kBAAA,MACAC,0BAAA,MACAC,uBAAAA,EAAAA,MAIAxhB,KAAAA,KACA,CACAoE,sBAAA,EACAkC,YAAA,EACAmb,wBAAA,EACA/M,uBAAA,EACAzO,cAAA,OAIAlE,SAAA,CACA2f,YAAAA,GACA,YAAAzf,IAAA2S,cAAAQ,UAAA,IACAjT,KAAApB,IAAA,iBAAA2gB,GAAA3gB,EAAA,OAAAqO,KAAAC,MAAAqS,EAAA,IACAnW,OACAoW,GAAA,QACA,EAIAC,UAAAA,GAEA,GADArU,QAAAsU,KAAA,KAAA5f,MACA,KAAAA,IACA,SAGA,MAAA6f,EAAAC,GACAA,EAAA,UAEAA,EAAA,UAGAA,EAOA,OAJA5Y,MAAAsO,QAAA,KAAAxV,IAAA+f,QACA,KAAA/f,IAAA+f,OAAA7f,IAAA2f,GACA,CAAAA,EAAA,KAAA7f,IAAA+f,UAGAzW,MAAA,CAAAC,EAAAC,IAAAD,EAAAyW,MAAA,KAAAN,IAAA,GAAAO,cAAAzW,EAAAwW,MAAA,KAAAN,IAAA,MACA5L,KAAA,KACA,EAEAoM,WAAAA,GACA,8CAAAlgB,IAAA1B,IACA,EAKA6hB,iBAAAA,GACA,MAAAC,EAAA,GAsCA,OArCA,KAAApgB,IAAAqgB,UACAD,EAAAjhB,KAAA,CACAb,GAAA,WACAyc,KAAA,KAAAmF,YACAI,MAAAzjB,EAAA,8BAGA,KAAAmD,IAAAugB,SACAH,EAAAjhB,KAAA,CACAb,GAAA,UACAyc,KAAA,KAAA/a,IAAAugB,QACAD,MAAAzjB,EAAA,8BAGA,KAAAmD,IAAAwgB,gBACA,KAAAxgB,IAAAwgB,cAAAC,MACAL,EAAAjhB,KAAA,CACAb,GAAA,WACAyc,KAAA,KAAA/a,IAAAwgB,cAAAC,KACAH,MAAAzjB,EAAA,oCAGA,KAAAmD,IAAAwgB,cAAAE,OACAN,EAAAjhB,KAAA,CACAb,GAAA,YACAyc,KAAA,KAAA/a,IAAAwgB,cAAAE,MACAJ,MAAAzjB,EAAA,oCAGA,KAAAmD,IAAAwgB,cAAAG,WACAP,EAAAjhB,KAAA,CACAb,GAAA,gBACAyc,KAAA,KAAA/a,IAAAwgB,cAAAG,UACAL,MAAAzjB,EAAA,yCAIAujB,CACA,EAEAQ,aAAAA,GACA,YAAA5gB,IAAA7B,UAAA0iB,OACA3gB,KAAA5B,GAAA,KAAAmG,MAAA9F,gBAAAL,IAAAkS,aAAAlS,IACAwV,KAAA,KACA,EAEAgN,UAAAA,GACA,cAAAZ,sBACA,EACAngB,SAAAA,GACA,YAAAC,IAAAC,OAAAC,KAAAC,IAAA,CAAA7B,GAAA6B,EAAAC,KAAAD,KACA,EACAF,MAAAA,GACA,YAAAQ,OAAAC,QAAAqgB,UACAjY,QAAA3I,GAAA,aAAAA,EAAA7B,KACAgL,MAAA,CAAAC,EAAAC,IAAAD,EAAAnJ,KAAA6f,cAAAzW,EAAApJ,OACA,GAEA8S,MAAA,CACA,WACA,KAAA7O,YAAA,CACA,GAEA2c,aAAAA,GACA,KAAAhd,cAAA,MACA+G,EAAAA,EAAAA,IAAA,2BACA,EACA3I,OAAAA,GACA,KAAApC,IAAAC,OAAArC,OAAA,IACA,KAAAuE,sBAAA,IAEA+I,EAAAA,EAAAA,IAAA,4BAAAlH,IACA,KAAA+P,mBAAA/P,EAAA,GAEA,EACA3B,QAAA,CACA4e,gBAAAA,GACA,KAAA5c,YAAA,KAAAA,UACA,EACA0P,kBAAAA,GAAA,IAAA/P,EAAArG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,QACA,KAAAqG,cAAAA,EACA,KAAAyO,uBAAA,CACA,EACA,wBAAAuB,GACA,KAAAhU,KAAAM,eAIA,KAAAC,YAAA0T,qBACA,SAAA1T,YAAA2T,cAAAtW,QAAA,KAAAoC,IAAA0B,cACA,KAAAqC,OAAA,KAAA/D,IAAA1B,GAAA,KAAAiC,YAAA2T,cAAA,IACA,KAAAlU,IAAA0B,cACA,KAAAqS,qBAEA,KAAAhQ,OAAA,KAAA/D,IAAA1B,GAAA,KAAA0B,IAAAiB,SATA,KAAA8C,OAAA,KAAA/D,IAAA1B,GAWA,I,gBE9YI,GAAU,CAAC,EAEf,GAAQqN,kBAAoB,IAC5B,GAAQC,cAAgB,IACxB,GAAQC,OAAS,SAAc,KAAM,QACrC,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCL1D,UAXgB,OACd,ITTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,kBAAkB,CAACE,MAAM,CAAC,GAAK,UAAU,KAAOH,EAAIpP,EAAE,WAAY,WAAW,MAAQ,GAAG6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIoT,qBAAqB,EAAExP,OAAM,MAAS,CAAC5D,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,eAAe,CAACH,EAAG,MAAM,CAACG,YAAY,wBAAwB,CAAEJ,EAAIjM,IAAI8J,QAAUmC,EAAInJ,iBAAiBmJ,EAAIjM,KAAMkM,EAAG,MAAM,CAACG,YAAY,+BAA+B,CAACH,EAAG,QAAQ,CAACgV,WAAW,CAAC,CAAC9gB,KAAK,QAAQ+gB,QAAQ,UAAUrc,MAAOmH,EAAI9J,qBAAsBif,WAAW,yBAAyB/U,YAAY,mCAAmCD,MAAM,CAAC,GAAK,iBAAiBH,EAAIjM,IAAI1B,KAAK,KAAO,YAAYiT,SAAS,CAAC,MAAQtF,EAAIjM,IAAI1B,GAAG,QAAU4I,MAAMsO,QAAQvJ,EAAI9J,sBAAsB8J,EAAIoV,GAAGpV,EAAI9J,qBAAqB8J,EAAIjM,IAAI1B,KAAK,EAAG2N,EAAI9J,sBAAuBuK,GAAG,CAAC,OAAS,CAAC,SAASI,GAAQ,IAAIwU,EAAIrV,EAAI9J,qBAAqBof,EAAKzU,EAAO0U,OAAOC,IAAIF,EAAKG,QAAuB,GAAGxa,MAAMsO,QAAQ8L,GAAK,CAAC,IAAIK,EAAI1V,EAAIjM,IAAI1B,GAAGsjB,EAAI3V,EAAIoV,GAAGC,EAAIK,GAAQJ,EAAKG,QAASE,EAAI,IAAI3V,EAAI9J,qBAAqBmf,EAAIle,OAAO,CAACue,KAAYC,GAAK,IAAI3V,EAAI9J,qBAAqBmf,EAAIO,MAAM,EAAED,GAAKxe,OAAOke,EAAIO,MAAMD,EAAI,IAAK,MAAM3V,EAAI9J,qBAAqBsf,CAAI,EAAExV,EAAIpJ,kBAAkBoJ,EAAIM,GAAG,KAAKL,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,iBAAiBH,EAAIjM,IAAI1B,OAAO,CAAC2N,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,uBAAuBoP,EAAIM,GAAG,KAAKL,EAAG,QAAQ,CAACG,YAAY,eAAeD,MAAM,CAAC,KAAO,SAAS,MAAQH,EAAIpP,EAAE,WAAY,OAAO,MAAQ,MAAMoP,EAAIM,GAAG,KAAKL,EAAG,MAAMD,EAAIM,GAAG,KAAKL,EAAG,QAAQ,CAACE,MAAM,CAAC,IAAM,kBAAkB,CAACF,EAAG,OAAO,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,mCAAmCoP,EAAIM,GAAG,KAAMN,EAAIrJ,kBAAkBqJ,EAAIjM,KAAMkM,EAAG,WAAW,CAACE,MAAM,CAAC,WAAW,gBAAgB,QAAUH,EAAIhM,OAAO,MAAQgM,EAAIlM,UAAU,MAAQ,EAAE,MAAQ,OAAO,UAAW,EAAK,mBAAkB,GAAO2M,GAAG,CAAC,kBAAkBT,EAAIhJ,mBAAmB,oBAAoBgJ,EAAI5I,sBAAsB,OAAS4I,EAAI3J,iBAAiB,CAAC4J,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,YAAY0V,KAAK,YAAY,CAAC7V,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,oBAAoBoP,EAAIU,MAAM,GAAGV,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,+BAA+B,CAAEJ,EAAIjM,IAAIqB,OAAQ6K,EAAG,QAAQ,CAACG,YAAY,iBAAiBD,MAAM,CAAC,KAAO,SAAS,MAAQH,EAAIpP,EAAE,WAAY,sBAAuB,CAAEuE,QAAS6K,EAAIjM,IAAIqB,SAAU,SAAW4K,EAAI5L,YAAc4L,EAAItL,WAAasL,EAAIjL,iBAAiB0L,GAAG,CAAC,MAAQ,SAASI,GAAQ,OAAOb,EAAI5K,OAAO4K,EAAIjM,IAAI1B,GAAG,KAAK2N,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIjM,IAAIwU,aAActI,EAAG,QAAQ,CAACG,YAAY,YAAYD,MAAM,CAAC,KAAO,SAAS,MAAQH,EAAIpP,EAAE,WAAY,UAAU,SAAWoP,EAAI5L,YAAc4L,EAAItL,WAAW+L,GAAG,CAAC,MAAQ,SAASI,GAAQ,OAAOb,EAAI7H,OAAO6H,EAAIjM,IAAI1B,GAAI2N,EAAI5H,WAAW,KAAK4H,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIjM,IAAI8J,OAAQoC,EAAG,QAAQ,CAACG,YAAY,SAASD,MAAM,CAAC,KAAO,SAAS,MAAQH,EAAItK,kBAAkB,SAAWsK,EAAI5L,YAAc4L,EAAItL,WAAasL,EAAIrL,gBAAkBqL,EAAIlL,aAAa2L,GAAG,CAAC,MAAQ,SAASI,GAAQ,OAAOb,EAAI/H,QAAQ+H,EAAIjM,IAAI1B,GAAG,KAAK2N,EAAIU,KAAKV,EAAIM,GAAG,KAAON,EAAIjM,IAAI8J,SAAWmC,EAAIjM,IAAIyU,aAAcxI,EAAIjM,IAAI0U,aAA2WzI,EAAIjM,IAAI8J,QAAWmC,EAAIjM,IAAIyU,WAA2SxI,EAAIU,KAAnST,EAAG,QAAQ,CAACG,YAAY,eAAeD,MAAM,CAAC,MAAQH,EAAInK,yBAAyB,aAAamK,EAAInK,yBAAyB,KAAO,SAAS,MAAQmK,EAAIrK,sBAAsB,SAAWqK,EAAI5L,YAAc4L,EAAItL,WAAW+L,GAAG,CAAC,MAAQ,SAASI,GAAQ,OAAOb,EAAIvI,YAAYuI,EAAIjM,IAAI1B,GAAG,KAA7pB4N,EAAG,QAAQ,CAACG,YAAY,iBAAiBD,MAAM,CAAC,MAAQH,EAAIpK,oBAAoB,aAAaoK,EAAIpK,oBAAoB,KAAO,SAAS,MAAQoK,EAAI3K,iBAAiB,UAAY2K,EAAIjM,IAAIyU,YAAcxI,EAAI5L,YAAc4L,EAAItL,YAAcsL,EAAIjK,+BAAiCiK,EAAIrL,gBAAkBqL,EAAIlL,aAAa2L,GAAG,CAAC,MAAQT,EAAI+H,sBAAuW/H,EAAIM,GAAG,KAAMN,EAAIjM,KAAKM,UAAY2L,EAAIjM,IAAIyU,YAAcxI,EAAIjM,IAAI0U,cAAexI,EAAG,WAAW,CAACE,MAAM,CAAC,aAAaH,EAAIpP,EAAE,WAAY,2BAA2B,KAAO,aAAa6P,GAAG,CAAC,MAAQqV,IAAM9V,EAAIuT,wBAAyB,GAAM9P,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIsT,0BAA0B,EAAE1P,OAAM,IAAO,MAAK,EAAM,YAAY,CAAC5D,EAAIM,GAAG,eAAeN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,mBAAmB,gBAAgBoP,EAAIU,MAAM,GAAGV,EAAIM,GAAG,KAAON,EAAIjK,8BAAsKiK,EAAIU,KAA3IT,EAAG,IAAI,CAACG,YAAY,WAAW,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,4CAA4C,cAAuBoP,EAAIM,GAAG,KAAMN,EAAIjM,IAAIwU,aAActI,EAAG,wBAAwB,CAACE,MAAM,CAAC,QAAUH,EAAI5H,WAAW,SAAW4H,EAAI5L,YAAc4L,EAAItL,YAAcsL,EAAIjK,+BAA+B0K,GAAG,CAAC,iBAAiBT,EAAIgV,mBAAmB,CAAChV,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,0BAA0B,cAAcoP,EAAIU,MAAM,GAAGV,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACG,YAAY,6BAA6B,CAAEJ,EAAIjM,IAAIgiB,0BAA2B9V,EAAG,KAAK,CAACD,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,6FAA6F,cAAcoP,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIjM,IAAIiiB,0BAA2B/V,EAAG,KAAK,CAACD,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,6FAA6F,cAAcoP,EAAIU,KAAKV,EAAIM,GAAG,KAAON,EAAIjM,IAAIyU,WAAsWxI,EAAIU,KAA9VT,EAAG,KAAK,CAACD,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,uFAAuF,cAAcqP,EAAG,KAAK,CAACG,YAAY,wBAAwBJ,EAAIY,GAAIZ,EAAIjM,IAAIkiB,qBAAqB,SAASC,EAAI5e,GAAO,OAAO2I,EAAG,KAAK,CAACU,IAAIrJ,GAAO,CAAC0I,EAAIM,GAAG,iBAAiBN,EAAIO,GAAG2V,GAAK,iBAAiB,IAAG,OAAgBlW,EAAIM,GAAG,KAAMN,EAAIwT,eAAiBxT,EAAIjM,IAAIoiB,QAASlW,EAAG,MAAM,CAACG,YAAY,wBAAwB,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,mBAAmB,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,aAAa,CAACE,MAAM,CAAC,UAAYH,EAAIwT,iBAAiB,GAAGxT,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,wBAAwB,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,WAAW,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACG,YAAY,wBAAwB,CAACJ,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAI0T,YAAY,gBAAgB1T,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,wBAAwB,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,eAAe,cAAcoP,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACD,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAI2U,eAAe,gBAAgB3U,EAAIM,GAAG,KAAMN,EAAIkU,kBAAkBviB,OAAS,EAAGsO,EAAG,MAAM,CAACG,YAAY,wBAAwB,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,iBAAiBoP,EAAIM,GAAG,KAAKL,EAAG,KAAK,CAACG,YAAY,6BAA6BD,MAAM,CAAC,aAAaH,EAAIpP,EAAE,WAAY,mBAAmBoP,EAAIY,GAAIZ,EAAIkU,mBAAmB,SAASkC,GAAU,OAAOnW,EAAG,KAAK,CAACU,IAAIyV,EAAS/jB,IAAI,CAAC4N,EAAG,IAAI,CAACG,YAAY,WAAWD,MAAM,CAAC,KAAOiW,EAAStH,KAAK,OAAS,SAAS,IAAM,wBAAwB,CAAC9O,EAAIM,GAAG,iBAAiBN,EAAIO,GAAG6V,EAAS/B,OAAO,qBAAqB,IAAG,KAAKrU,EAAIU,KAAKV,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,wBAAwB,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,gBAAgBoP,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,yBAAyB,CAACH,EAAG,WAAW,CAACE,MAAM,CAAC,UAAYH,EAAIjM,IAAIsiB,KAAK,KAAOrW,EAAIjM,IAAIsiB,MAAQ,IAAI,aAAarW,EAAIpP,EAAE,WAAY,gBAAgB,MAAQoP,EAAIpP,EAAE,WAAY,iBAAiB6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIkT,iBAAiB,EAAEtP,OAAM,OAAU5D,EAAIM,GAAG,KAAKL,EAAG,WAAW,CAACE,MAAM,CAAC,UAAYH,EAAIjM,IAAIsiB,KAAK,KAAOrW,EAAIjM,IAAIsiB,MAAQ,IAAI,aAAarW,EAAIpP,EAAE,WAAY,mBAAmB,MAAQoP,EAAIpP,EAAE,WAAY,oBAAoB6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAImT,2BAA2B,EAAEvP,OAAM,OAAU5D,EAAIM,GAAG,KAAMN,EAAIjM,IAAI2S,cAAc4P,WAAYrW,EAAG,WAAW,CAACE,MAAM,CAAC,KAAOH,EAAIjM,IAAI2S,aAAa4P,WAAW,aAAatW,EAAIpP,EAAE,WAAY,4BAA4B,MAAQoP,EAAIpP,EAAE,WAAY,6BAA6B6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIqT,6BAA6B,EAAEzP,OAAM,IAAO,MAAK,EAAM,YAAY5D,EAAIU,KAAKV,EAAIM,GAAG,KAAON,EAAIjM,IAAIqgB,SAAyRpU,EAAIU,KAAnRT,EAAG,WAAW,CAACE,MAAM,CAAC,KAAOH,EAAI6U,WAAW,aAAa7U,EAAIpP,EAAE,WAAY,gBAAgB,MAAQoP,EAAIpP,EAAE,WAAY,SAAS6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIsM,WAAW,EAAE1I,OAAM,IAAO,MAAK,EAAM,cAAuB,KAAK5D,EAAIM,GAAG,KAAMN,EAAIjM,KAAKM,QAAS4L,EAAG,wBAAwB,CAACE,MAAM,CAAC,KAAOH,EAAIuT,uBAAuB,IAAMvT,EAAIjM,KAAK0M,GAAG,CAAC,cAAc,SAASI,GAAQb,EAAIuT,uBAAuB1S,CAAM,KAAKb,EAAIU,KAAKV,EAAIM,GAAG,KAAMN,EAAIjM,KAAKM,QAAS4L,EAAG,wBAAwB,CAACE,MAAM,CAAC,KAAOH,EAAIwG,sBAAsB,IAAMxG,EAAIjM,IAAI,iBAAiBiM,EAAIjI,eAAe0I,GAAG,CAAC,cAAc,SAASI,GAAQb,EAAIwG,sBAAsB3F,CAAM,KAAKb,EAAIU,MAAM,IACnrR,GACsB,ISUpB,EACA,KACA,WACA,M,QCfgR,ICQrPc,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,iBACRnF,MAAO,CACHvI,IAAK,MAET2I,KAAAA,CAAMgF,GACF,MAAMpF,EAAQoF,EACR6U,GAAe1iB,EAAAA,EAAAA,KAAS,IAAMyH,OAAOkb,OAAOla,EAAMvI,IAAImT,WAAW,IAAIuP,cAAgB,CAAC,GAAGC,MAAK7jB,IAAA,IAAC,UAAE8jB,GAAW9jB,EAAA,QAAO8jB,CAAS,MAElI,MAAO,CAAE7T,OAAO,EAAMxG,QAAOia,eAAcK,2BADPC,GAAYA,EAAQJ,gBAAeK,EAAAA,EAAAA,QAAgBH,WAAaE,EAAQJ,cAAcM,IAAIJ,WAAa,GACpEK,aAAY,MAAEpmB,EAAC,KAAE2f,gBAAe,IAAElN,iBAAgB,IAAEmN,SAAQA,EACvI,I,gBCPA,GAAU,CAAC,EAEf,GAAQ9Q,kBAAoB,IAC5B,GAAQC,cAAgB,IACxB,GAAQC,OAAS,SAAc,KAAM,QACrC,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCL1D,UAXgB,OACd,IFTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAQD,EAAOgT,aAActW,EAAGsD,EAAOgN,gBAAgB,CAACpQ,MAAM,CAAC,GAAK,YAAY,KAAOoD,EAAO3S,EAAE,WAAY,aAAa,MAAQ,GAAG6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAOyT,aAAa,KAAO,MAAM,EAAEpT,OAAM,IAAO,MAAK,EAAM,aAAa,CAAC5D,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAIjM,IAAImT,UAAU,SAAS2P,GAAS,OAAO5W,EAAG,MAAM,CAACU,IAAIkW,EAAQ1hB,QAAQiL,YAAY,6BAA6B,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAGN,EAAIO,GAAGsW,EAAQ1hB,YAAY6K,EAAIM,GAAG,KAAKL,EAAGsD,EAAOiN,SAAS,CAACpQ,YAAY,iCAAiCD,MAAM,CAAC,KAAOoD,EAAOqT,2BAA2BC,OAAa,EAAE,KAAI,GAAG7W,EAAIU,IAC/sB,GACsB,IEUpB,EACA,KACA,WACA,M,QCfoR,ICKzPc,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,qBACRnF,MAAO,CACHvI,IAAK,MAET2I,KAAAA,CAAMgF,GACF,MAAMpF,EAAQoF,EAEd,MAAO,CAAEoB,OAAO,EAAMxG,QAAO2a,YADVjV,EAAAA,EAAAA,IAA4D,QAAxD1F,EAAMvI,KAAKiB,QAAQkiB,eAAeC,eAAe9kB,KAAgB,GAC/Cke,gBAAe,IAAElN,iBAAgB,IAAE+T,aAAYA,EAAAA,IAC5F,I,gBCHA,GAAU,CAAC,EAEf,GAAQ1X,kBAAoB,IAC5B,GAAQC,cAAgB,IACxB,GAAQC,OAAS,SAAc,KAAM,QACrC,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCL1D,UAXgB,OACd,IFTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAQxD,EAAIjM,KAAKiB,OAAQiL,EAAGsD,EAAOgN,gBAAgB,CAACpQ,MAAM,CAAC,GAAK,SAAS,KAAOH,EAAIpP,EAAE,WAAY,UAAU,MAAQ,GAAG6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAO6T,aAAa,KAAO,MAAM,EAAExT,OAAM,IAAO,MAAK,EAAM,aAAa,CAAC5D,EAAIM,GAAG,KAAKL,EAAG,MAAM,CAACG,YAAY,UAAU,CAACH,EAAG,KAAK,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,qBAAqBoP,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACA,EAAG,IAAI,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,YAAYoP,EAAIM,GAAG,KAAKN,EAAIO,GAAGP,EAAIjM,KAAKiB,OAAOC,sBAAsB+K,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACA,EAAG,IAAI,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,YAAYoP,EAAIM,GAAG,KAAKN,EAAIO,GAAGP,EAAIjM,KAAKiB,OAAOb,SAAS6L,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACA,EAAG,IAAI,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,oBAAoBoP,EAAIM,GAAG,KAAKN,EAAIO,GAAGP,EAAIjM,KAAKiB,OAAOqiB,iBAAiBrX,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACA,EAAG,IAAI,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,oBAAoBoP,EAAIM,GAAG,KAAKN,EAAIO,GAAGgD,EAAO0T,eAAejX,EAAIM,GAAG,KAAKL,EAAG,IAAI,CAACA,EAAG,IAAI,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,sBAAsBoP,EAAIM,GAAG,KAAKN,EAAIO,GAAGP,EAAIjM,KAAKiB,QAAQkiB,eAAeC,eAAe9C,cAAcrU,EAAIU,IAC5nC,GACsB,IEUpB,EACA,KACA,WACA,M,wBCZF,MCHkR,IDGrPc,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,iBACRnF,MAAO,CACHtH,OAAQ,MAEZ0H,MAAMgF,IACK,CAAEoB,OAAO,EAAMsU,aAAY,MAAE/T,iBAAgBA,EAAAA,M,gBEExD,GAAU,CAAC,EAEf,GAAQ3D,kBAAoB,IAC5B,GAAQC,cAAgB,IACxB,GAAQC,OAAS,SAAc,KAAM,QACrC,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCL1D,UAXgB,OACd,IHTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAQxD,EAAIhL,OAAQiL,EAAG,OAAO,CAACG,YAAY,mBAAmBD,MAAM,CAAC,MAAQH,EAAIhL,OAAOb,OAAO,CAAC8L,EAAGsD,EAAOF,iBAAiB,CAAClD,MAAM,CAAC,KAAOoD,EAAO6T,aAAa,KAAO,GAAG,OAAS,MAAMpX,EAAIM,GAAG,OAAON,EAAIO,GAAGP,EAAIhL,OAAOqiB,cAAc,OAAO,GAAGrX,EAAIU,IAC5U,GACsB,IGUpB,EACA,KACA,WACA,M,gD/BEF,MgCjB0Q,IhCiB7Oc,EAAAA,EAAAA,IAAiB,CAC1CC,OAAQ,kBACR/E,KAAAA,CAAMgF,GACF,MAAMsC,GAAQC,EAAAA,EAAAA,MACRqT,GAASC,EAAAA,EAAAA,MACT/e,GAAQ3H,EAAAA,EAAAA,KACRyD,GAAcqI,EAAAA,EAAAA,KACd6a,GAAcC,EAAAA,GAAAA,KACd1kB,GAAQc,EAAAA,EAAAA,KAAS,IAAMmQ,EAAMG,OAAO9R,IAAM,KAC1C0B,GAAMF,EAAAA,EAAAA,KAAS,KACjB,GAAI2jB,EAAY/iB,QAAQyI,gBAAiB,CACrC,MAAMwa,EAAQpjB,EAAY6I,WACrBvK,MAAMmB,GAAQA,EAAI1B,KAAOU,EAAM8F,SAAU,KAC9C,GAAI6e,EACA,OAAOA,CAEf,CACA,OAAOlf,EAAM1F,WAAWC,EAAM8F,MAAM,IAElC4N,GAAY5S,EAAAA,EAAAA,KAAS,IAAME,EAAI8E,MAAM6N,cAAcC,iBAAmB,IACtEgR,GAAS9jB,EAAAA,EAAAA,KAAS,IAAME,EAAI8E,MAAM6N,cAAckR,gBAAkB,EAClE7jB,EAAI8E,MAAM6N,aAAamR,aACtB9jB,EAAI8E,MAAM6N,cAAcoR,eAAiB,KAC1CC,GAAclkB,EAAAA,EAAAA,KAAS,IAAoB,OAAdE,EAAI8E,SACjC,QAAEmf,GiC/BT,SAAoBjkB,GACvB,MAAMikB,GAAUhW,EAAAA,EAAAA,IAAI,MAIdiW,GAAepkB,EAAAA,EAAAA,KAAS,KAC1B,IAAIqkB,EAYJ,OATIA,EAFAnkB,EAAI8E,OAAOxE,QAEJ+R,EAAAA,GAGA,CAACrS,EAAI8E,OAAO3G,UAAY,IAAI0iB,OAC9B3gB,KAAKE,GAASgkB,GAAAA,EAAsBhkB,KACpC0I,QAAQ1K,KAAWA,IACnBshB,GAAG,KACC1f,EAAI8E,OAAOxE,QAAmB+R,EAAAA,GAATgS,EAAAA,KAE3BF,EAAO,wEAAwEA,cAAmB,IAAI,IAsBjH,OApBA1T,EAAAA,EAAAA,KAAY9J,UAER,GAAK3G,EAAI8E,OAAOmO,QAGX,CACDgR,EAAQnf,MAAQ,KAEhB,IACI,MAAMhB,QAAiBnE,OAAO2kB,MAAMtkB,EAAI8E,MAAMmO,SACxCsR,QAAazgB,EAASygB,OACtBC,QAAeD,EAAKhK,OAC1B0J,EAAQnf,MAAQ0f,EAAOC,WAAW,yCAA0C,sBAChF,CACA,MAAOjmB,GACHylB,EAAQnf,MAAQof,EAAapf,MAC7BrG,GAAAA,EAAOD,MAAM,0BAA2B,CAAEA,SAC9C,CACJ,MAfIylB,EAAQnf,MAAQof,EAAapf,KAejC,IAEG,CACHmf,UAER,CjCZ4BS,CAAW1kB,GAIzB2kB,GAAc7kB,EAAAA,EAAAA,KAAS,IACpBE,EAAI8E,MAGiB,KAAtB9E,EAAI8E,MAAM8f,SACH/nB,EAAAA,EAAAA,IAAE,WAAY,wCAAyC,CAAEuE,QAASpB,EAAI8E,MAAM1D,QAASwjB,QAAS5kB,EAAI8E,MAAM+f,QAAQnT,WAAWoT,iBAE/HjoB,EAAAA,EAAAA,IAAE,WAAY,oBAAqB,CAAEuE,QAASpB,EAAI8E,MAAM1D,UALpD,KAOT2jB,GAAY9W,EAAAA,EAAAA,IAAI,YACtBiF,EAAAA,EAAAA,IAAM,CAAClT,IAAM,KAAQ+kB,EAAUjgB,MAAQ,SAAS,IAIhD,MASM0N,GAAmBvE,EAAAA,EAAAA,KAAI,GACvB+W,GAAgBllB,EAAAA,EAAAA,KAAS,IAAME,EAAI8E,OAAOsO,YAAcZ,EAAiB1N,QAIzEmgB,EAAiBA,KACnB,GAAIjlB,EAAI8E,OAAOqO,UAAYnT,EAAI8E,OAAOsO,WAAY,CAC9C,MAAMC,EAAQ,IAAIC,MAClBD,EAAME,OAAS,KACXf,EAAiB1N,OAAQ,CAAI,EAEjCuO,EAAMG,IAAMxT,EAAI8E,MAAMsO,UAC1B,GAKJ,OAFAF,EAAAA,EAAAA,IAAM,CAAClT,GAAMilB,IACbC,EAAAA,EAAAA,IAAUD,GACH,CAAElW,OAAO,EAAMkB,QAAOsT,SAAQ9e,QAAOlE,cAAakjB,cAAazkB,QAAOgB,MAAK0S,YAAWkR,SAAQI,cAAaC,UAASU,cAAaI,YAAWI,eA1B5HA,KACnB5B,EAAOpkB,KAAK,CACRiB,KAAM,gBACNgQ,OAAQ,CAAEjS,SAAU8R,EAAMG,OAAOjS,WACnC,EAsB6JqU,mBAAkBwS,gBAAeC,iBAAgBG,aAAY,IAAE9V,iBAAgB,IAAEuC,SAAQ,IAAEwT,kBAAiB,EAAEC,cAAa,GAAEC,eAAc,GAAEC,mBAAkB,GAAE5T,cAAa,KAAE6T,eAAcA,GACrW,I,gBkC3EA,GAAU,CAAC,EAEf,GAAQ9Z,kBAAoB,IAC5B,GAAQC,cAAgB,IACxB,GAAQC,OAAS,SAAc,KAAM,QACrC,GAAQC,OAAS,IACjB,GAAQC,mBAAqB,IAEhB,IAAI,KAAS,IAKJ,MAAW,KAAQC,QAAS,KAAQA,OCL1D,UAXgB,OACd,InCTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAQD,EAAOwU,YAAa9X,EAAGsD,EAAO4V,aAAa,CAAC/Y,YAAY,cAAcC,MAAM,CAAE,+BAAgCkD,EAAOwV,eAAgB5Y,MAAM,CAAC,OAASoD,EAAOuV,UAAU,WAAavV,EAAOwV,cAAgBxV,EAAOxP,IAAIoT,gBAAavV,EAAU,SAAW2R,EAAOwV,cAAc,KAAOxV,EAAOxP,IAAII,KAAK,MAAQoP,EAAOxP,IAAII,KAAK,QAAUoP,EAAOmV,YAAY,SAAWnV,EAAOmV,aAAajY,GAAG,CAAC,gBAAgB,SAASI,GAAQ0C,EAAOuV,UAAUjY,CAAM,EAAE,MAAQ0C,EAAO2V,gBAAgBzV,YAAYzD,EAAI0D,GAAG,CAAGH,EAAOwV,cAAqL,KAAtK,CAACpY,IAAI,SAASgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOF,iBAAiB,CAACjD,YAAY,6BAA6BD,MAAM,CAAC,IAAMoD,EAAOyU,SAAW,GAAG,KAAO,MAAM,EAAEpU,OAAM,GAAW,CAACjD,IAAI,cAAcgD,GAAG,WAAW,MAAO,CAAC1D,EAAG,MAAM,CAACG,YAAY,uBAAuB,CAACH,EAAGsD,EAAOoC,cAAc,CAACxF,MAAM,CAAC,MAAQoD,EAAOxP,IAAIkK,SAAS+B,EAAIM,GAAG,KAAMiD,EAAOxP,IAAIM,SAAWkP,EAAOxP,IAAIiB,OAAQiL,EAAGsD,EAAOiW,eAAe,CAACrZ,MAAM,CAAC,OAASoD,EAAOxP,IAAIiB,UAAUgL,EAAIU,KAAKV,EAAIM,GAAG,KAAMiD,EAAOkD,UAAWxG,EAAGsD,EAAOqC,SAAS,CAACzF,MAAM,CAAC,MAAQoD,EAAOoU,UAAU3X,EAAIU,MAAM,GAAG,EAAEkD,OAAM,IAAO,MAAK,IAAO,CAAC5D,EAAIM,GAAG,KAAKN,EAAIM,GAAG,KAAKL,EAAGsD,EAAO6V,kBAAkB,CAACjZ,MAAM,CAAC,IAAMoD,EAAOxP,OAAOiM,EAAIM,GAAG,KAAKL,EAAGsD,EAAO8V,cAAc,CAAClZ,MAAM,CAAC,IAAMoD,EAAOxP,OAAOiM,EAAIM,GAAG,KAAKL,EAAGsD,EAAO+V,eAAe,CAACnZ,MAAM,CAAC,IAAMoD,EAAOxP,OAAOiM,EAAIM,GAAG,KAAKL,EAAGsD,EAAOgW,mBAAmB,CAACpZ,MAAM,CAAC,IAAMoD,EAAOxP,QAAQ,GAAGiM,EAAIU,IACv7C,GACsB,ImCUpB,EACA,KACA,WACA,M,6ECZEzN,E,MAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOd,GAAI,uGAAwG,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,mFAAmF,MAAQ,GAAG,SAAW,8CAA8C,eAAiB,CAAC,qGAAqG,WAAa,MAEvc,S,mCCPA,I,uDCoBA,MCpBqH,EDoBrH,CACE8B,KAAM,yBACNslB,MAAO,CAAC,SACRnd,MAAO,CACLoI,MAAO,CACLnI,KAAMC,QAERkd,UAAW,CACTnd,KAAMC,OACNyJ,QAAS,gBAEXjM,KAAM,CACJuC,KAAMV,OACNoK,QAAS,M,eEff,SAXgB,OACd,GCRW,WAAkB,IAAIjG,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAG,OAAOA,EAAG,OAAOD,EAAI8D,GAAG,CAAC1D,YAAY,iDAAiDD,MAAM,CAAC,cAAcH,EAAI0E,MAAQ,KAAO,OAAO,aAAa1E,EAAI0E,MAAM,KAAO,OAAOjE,GAAG,CAAC,MAAQ,SAASI,GAAQ,OAAOb,EAAI4S,MAAM,QAAS/R,EAAO,IAAI,OAAOb,EAAI2Z,QAAO,GAAO,CAAC1Z,EAAG,MAAM,CAACG,YAAY,4BAA4BD,MAAM,CAAC,KAAOH,EAAI0Z,UAAU,MAAQ1Z,EAAIhG,KAAK,OAASgG,EAAIhG,KAAK,QAAU,cAAc,CAACiG,EAAG,OAAO,CAACE,MAAM,CAAC,EAAI,+TAA+T,CAAEH,EAAS,MAAEC,EAAG,QAAQ,CAACD,EAAIM,GAAGN,EAAIO,GAAGP,EAAI0E,UAAU1E,EAAIU,UAC11B,GACsB,IDSpB,EACA,KACA,KACA,M,QEdF,I,yCCwBA,MCxBsM,EDwBtM,CACAvM,KAAA,uBACA8H,WAAA,CACA2d,WAAAA,EAAAA,GAEAxd,OAAA,CAAAC,EAAAA,GACAC,MAAA,CACAtH,OAAA,CACAuH,KAAAjB,OACAmB,UAAA,GAEAod,UAAA,CACAtd,KAAAyJ,QACAvJ,UAAA,GAEA1I,IAAA,CACAwI,KAAAjB,OACAmB,UAAA,GAEA1E,cAAA,CACAwE,KAAAjB,OACAmB,UAAA,EACAwJ,QAAAA,KAAA,MAGAvJ,MAAAA,KAIA,CACAlE,OAJA3H,EAAAA,EAAAA,KAKAyD,aAJAqI,EAAAA,EAAAA,OAOA9I,SAAA,CACAimB,SAAAA,GACA,YAAA9kB,OAAAb,KAAA,WAAAa,OAAAqiB,YACA,EACA5M,OAAAA,GACA,YAAAnW,YAAA2T,aACA,GAEA7R,QAAA,CACA2jB,UAAAA,GACA,KAAAnH,MAAA,QACA,EACAoH,sBAAAA,GACA,KAAAD,aACA,KAAAjiB,OAAA,KAAA/D,IAAA1B,GAAA,KAAA2C,OAAA,KAAA+C,cACA,IEvDA,GAXgB,OACd,GHRW,WAAkB,IAAIiI,EAAInO,KAAqB,OAAOoO,EAApBD,EAAIE,MAAMD,IAAa,aAAa,CAACE,MAAM,CAAC,KAAOH,EAAI8Z,UAAU,QAAU9Z,EAAI6Z,UAAY7Z,EAAIpP,EAAE,WAAY,WAAa,GAAG,yBAAwB,EAAK,iBAAiBoP,EAAIhL,OAAOilB,YAAY,OAASja,EAAI6Z,UAAU,eAAe,eAAepZ,GAAG,CAAC,MAAQ,SAASI,GAAiC,OAAzBA,EAAOyH,kBAAyBtI,EAAIga,uBAAuBtR,MAAM,KAAMhX,UAAU,GAAG+R,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,UAAUgD,GAAG,WAAW,MAAO,CAAC3D,EAAIM,GAAG,SAASN,EAAIO,GAAGP,EAAIhL,OAAOC,mBAAmB,QAAQ,EAAE2O,OAAM,MACrhB,GACsB,IGSpB,EACA,KACA,KACA,M,QCd8M,E,sKCsDhN,MAAMtP,GAAcqI,EAAAA,EAAAA,KAEdsL,GAAgBpU,EAAAA,EAAAA,KAAS,IAAMS,EAAY2T,gBAC3CY,GAAgBhV,EAAAA,EAAAA,KAAS,IAAMS,EAAYuU,gBAC3CqR,GAAkBrmB,EAAAA,EAAAA,KAAS,KAAM5B,EAAAA,EAAAA,IAAY,6B,kGAEhC8nB,KAClBtmB,EAAK,QAAQ,E,oNClDVgM,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,OCL1D,SAXgB,OACd,GCTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAOvD,EAAG,MAAM,CAACG,YAAY,yBAAyB,CAAEmD,EAAO0E,cAActW,OAAS,EAAGsO,EAAG,KAAK,CAACE,MAAM,CAAC,aAAaH,EAAIpP,EAAE,WAAY,oCAAoCoP,EAAIY,GAAI2C,EAAO0E,eAAe,SAASjT,GAAQ,OAAOiL,EAAGsD,EAAO4W,qBAAqB,CAACxZ,IAAI3L,EAAO3C,GAAG8N,MAAM,CAAC,OAASnL,EAAO,aAAauO,EAAOsF,cAAc1U,OAASa,EAAOb,KAAK,IAAM6L,EAAIjM,IAAI,iBAAiBiM,EAAIjI,eAAe0I,GAAG,CAAC,MAAQ8C,EAAOwW,aAAa,IAAG,GAAG9Z,EAAGsD,EAAOH,eAAe,CAAChD,YAAY,uCAAuCD,MAAM,CAAC,KAAOH,EAAIpP,EAAE,WAAY,gCAAgC,YAAcoP,EAAIpP,EAAE,WAAY,4DAA4D6S,YAAYzD,EAAI0D,GAAG,CAAC,CAAC/C,IAAI,OAAOgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAO6W,iBAAiB,CAACja,MAAM,CAAC,KAAO,MAAM,EAAEyD,OAAM,GAAM,CAACjD,IAAI,SAASgD,GAAG,WAAW,MAAO,CAAC1D,EAAGsD,EAAOpH,SAAS,CAACgE,MAAM,CAAC,KAAOoD,EAAO2W,kBAAkB,CAACla,EAAIM,GAAG,aAAaN,EAAIO,GAAGP,EAAIpP,EAAE,WAAY,0BAA0B,cAAc,EAAEgT,OAAM,QAAW,EACpjC,GACsB,IDUpB,EACA,KACA,WACA,M,QEfgN,E,gPCqC/LmW,KAClBtmB,EAAK,eAAe,EAAM,E,sCCpB3B,GAXgB,OACd,GhBRW,WAAkB,IAAIuM,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAGsD,EAAOvD,EAAIE,MAAMsD,YAAY,OAAOvD,EAAGsD,EAAOmN,SAAS,CAACvQ,MAAM,CAAC,KAAOH,EAAIT,KAAK,KAAOS,EAAIpP,EAAE,WAAY,qCAAsC,CAACuX,QAASnI,EAAIjM,IAAII,OAAQ,KAAO,UAAUsM,GAAG,CAAC,cAAc8C,EAAOwW,aAAa,CAAC9Z,EAAGsD,EAAO8W,oBAAoB,CAACla,MAAM,CAAC,IAAMH,EAAIjM,IAAI,iBAAiBiM,EAAIjI,eAAe0I,GAAG,CAAC,MAAQ8C,EAAOwW,eAAe,EACtZ,GACsB,IgBSpB,EACA,KACA,KACA,M,0CCdF,I,+BAIA,MCJiQ,GDIlP/W,E,SAAAA,IAAgB,CAC3B7O,KAAM,WACN8H,WAAY,CACRoH,iBAAgBA,EAAAA,GAEpB/G,MAAO,CACH+L,MAAO,CACH9L,KAAMV,OACNY,UAAU,IAGlBC,MAAKA,KACM,CACH4P,QAAO,MACPgO,gBAAe,MACfC,eAAcA,EAAAA,KAGtB1mB,SAAU,CACN6Q,KAAAA,GACI,MAAM8V,GAAyB,EAAb,KAAKnS,OAAWoS,QAAQ,GAC1C,OAAO7pB,EAAAA,EAAAA,IAAE,WAAY,8BAA+B,CAAEyX,MAAOmS,GACjE,EACAE,SAAAA,GACI,OAAOjiB,KAAK6J,MAAmB,EAAb,KAAK+F,MAAY,IACvC,EACAsS,UAAAA,GACI,OAAOliB,KAAK6W,IAAI7W,KAAK6J,MAAyB,GAAlB,EAAI,KAAK+F,OAAa,KAAO,EAAI,KAAKqS,UACtE,EACAE,WAAAA,GACI,OAAQ,KAAKF,UAAY,KAAKC,WAAc,CAChD,K,uIExBJlb,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IACxBF,EAAQG,OAAS,SAAc,KAAM,QACrCH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,IAAQM,QAAS,IAAQA,OCL1D,SAXgB,E,SAAA,GACd,GHTW,WAAkB,IAAIC,EAAInO,KAAKoO,EAAGD,EAAIE,MAAMD,GAAgC,OAAtBD,EAAIE,MAAMsD,YAAmBvD,EAAG,OAAO,CAACG,YAAY,qBAAqBD,MAAM,CAAC,KAAO,MAAM,aAAaH,EAAI0E,MAAM,MAAQ1E,EAAI0E,QAAQ,CAAC1E,EAAIY,GAAIZ,EAAI0a,WAAW,SAASpjB,GAAO,OAAO2I,EAAG,mBAAmB,CAACU,IAAI,aAAarJ,IAAQ6I,MAAM,CAAC,KAAOH,EAAIsM,QAAQ,OAAS,KAAK,IAAGtM,EAAIM,GAAG,KAAMN,EAAI4a,YAAa3a,EAAG,mBAAmB,CAACE,MAAM,CAAC,KAAOH,EAAIsa,gBAAgB,OAAS,MAAMta,EAAIU,KAAKV,EAAIM,GAAG,KAAKN,EAAIY,GAAIZ,EAAI2a,YAAY,SAASrjB,GAAO,OAAO2I,EAAG,mBAAmB,CAACU,IAAI,cAAcrJ,IAAQ6I,MAAM,CAAC,KAAOH,EAAIua,eAAe,OAAS,KAAK,KAAI,EACnmB,GACsB,IGUpB,EACA,KACA,WACA,M","sources":["webpack:///nextcloud/apps/settings/src/store/apps-store.ts","webpack:///nextcloud/apps/settings/src/components/AppStoreDiscover/AppStoreDiscoverSection.vue?vue&type=style&index=0&id=114ea95a&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/views/AppStoreNavigation.vue?vue&type=style&index=0&id=419cd0cf&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/views/AppStore.vue?vue&type=style&index=0&id=27f36c48&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/service/rebuild-navigation.js","webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/views/AppStore.vue","webpack:///nextcloud/node_modules/yocto-queue/index.js","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?7e2c","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?107d","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?fb2a","webpack://nextcloud/./apps/settings/src/views/AppStore.vue?47b2","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=35d8331c&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppAPI/DaemonSelectionList.vue?vue&type=style&index=0&id=07c487de&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDetailsTab.vue?vue&type=style&index=0&id=5148f46c&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?vue&type=style&index=0&id=1114c30b&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList/AppDaemonBadge.vue?vue&type=style&index=0&id=0698b3b8&prod&scoped=true&lang=scss","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?4f6a","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?a9a1","webpack:///nextcloud/apps/settings/src/store/app-api-store.ts","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=2e0b174b&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=style&index=0&id=27c89479&prod&lang=scss&scoped=true","webpack:///nextcloud/apps/settings/src/views/AppStoreSidebar.vue?vue&type=style&index=0&id=ffae2952&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue?vue&type=style&index=0&id=d7fb3b54&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/components/AppList/AppLevelBadge.vue?vue&type=style&index=0&id=053710c8&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDescriptionTab.vue?vue&type=style&index=0&id=10fcea52&prod&scoped=true&lang=scss","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?2ab3","webpack://nextcloud/./apps/settings/src/views/AppStoreNavigation.vue?6e6f","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?9f64","webpack://nextcloud/./apps/settings/src/components/AppList/AppLevelBadge.vue?74e8","webpack:///nextcloud/apps/settings/src/constants/AppstoreCategoryIcons.ts","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=style&index=0&id=d9bfc6c8&prod&scoped=true&lang=css","webpack:///nextcloud/apps/settings/src/constants/AppsConstants.js","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?6f57","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?2b19","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/AppDeployOptionsModal.vue","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue?9c7b","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue?0709","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue?4e6f","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?047f","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?0c36","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppReleasesTab.vue?d492","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDeployDaemonTab.vue?vue&type=script&setup=true&lang=ts","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDeployDaemonTab.vue","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDeployDaemonTab.vue?9c22","webpack://nextcloud/./apps/settings/src/components/AppStoreSidebar/AppDeployDaemonTab.vue?4b28","webpack:///nextcloud/apps/settings/src/components/AppList/AppDaemonBadge.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppDaemonBadge.vue?vue&type=script&setup=true&lang=ts","webpack://nextcloud/./apps/settings/src/components/AppList/AppDaemonBadge.vue?a6c0","webpack://nextcloud/./apps/settings/src/components/AppList/AppDaemonBadge.vue?e75c","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?5247","webpack://nextcloud/./apps/settings/src/views/AppStoreSidebar.vue?5373","webpack:///nextcloud/apps/settings/src/components/AppStoreSidebar/AppDeployDaemonTab.vue?vue&type=style&index=0&id=e726cadc&prod&scoped=true&lang=scss","webpack:///nextcloud/apps/settings/src/components/AppAPI/DaemonSelectionDialog.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/FormatListBulleted.vue","webpack:///nextcloud/node_modules/vue-material-design-icons/FormatListBulleted.vue?vue&type=script&lang=js","webpack://nextcloud/./node_modules/vue-material-design-icons/FormatListBulleted.vue?6c50","webpack:///nextcloud/node_modules/vue-material-design-icons/FormatListBulleted.vue?vue&type=template&id=5c444520","webpack://nextcloud/./apps/settings/src/components/AppAPI/DaemonSelectionEntry.vue?db35","webpack:///nextcloud/apps/settings/src/components/AppAPI/DaemonSelectionEntry.vue","webpack:///nextcloud/apps/settings/src/components/AppAPI/DaemonSelectionEntry.vue?vue&type=script&lang=js","webpack://nextcloud/./apps/settings/src/components/AppAPI/DaemonSelectionEntry.vue?462d","webpack:///nextcloud/apps/settings/src/components/AppAPI/DaemonSelectionList.vue?vue&type=script&setup=true&lang=js","webpack:///nextcloud/DaemonSelectionList.vue","webpack://nextcloud/./apps/settings/src/components/AppAPI/DaemonSelectionList.vue?7fe7","webpack://nextcloud/./apps/settings/src/components/AppAPI/DaemonSelectionList.vue?39f5","webpack:///nextcloud/apps/settings/src/components/AppAPI/DaemonSelectionList.vue","webpack:///nextcloud/apps/settings/src/components/AppAPI/DaemonSelectionDialog.vue?vue&type=script&setup=true&lang=js","webpack:///nextcloud/DaemonSelectionDialog.vue","webpack://nextcloud/./apps/settings/src/components/AppAPI/DaemonSelectionDialog.vue?7e45","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?4de9","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?26fd"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\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-discover[data-v-114ea95a]{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, `\n/* The categories-loading indicator */\n.categories--loading[data-v-419cd0cf] {\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\":\";AA0IA,qCAAA;AACA;CACA,OAAA;CACA,aAAA;CACA,mBAAA;CACA,uBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\\n - SPDX-License-Identifier: AGPL-3.0-or-later\\n-->\\n<template>\\n\\t<!-- Categories & filters -->\\n\\t<NcAppNavigation :aria-label=\\\"t('settings', 'Apps')\\\">\\n\\t\\t<template #list>\\n\\t\\t\\t<NcAppNavigationItem v-if=\\\"appstoreEnabled\\\"\\n\\t\\t\\t\\tid=\\\"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=\\\"store.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>{{ store.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/components/NcAppNavigation'\\nimport NcAppNavigationItem from '@nextcloud/vue/components/NcAppNavigationItem'\\nimport NcAppNavigationSpacer from '@nextcloud/vue/components/NcAppNavigationSpacer'\\nimport NcCounterBubble from '@nextcloud/vue/components/NcCounterBubble'\\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\\n\\nimport APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts'\\n\\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","// 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-27f36c48] {\n\theight: 100%;\n}\n.app-settings-content__label[data-v-27f36c48] {\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\":\";AA4EA;CACA,YAAA;AACA;AAEA;CACA,iDAAA;CACA,4FAAA;CACA,yCAAA;CACA,0CAAA;CACA,sBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\\n - SPDX-License-Identifier: AGPL-3.0-or-later\\n-->\\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, onBeforeUnmount, 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/components/NcAppContent'\\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\\nimport AppList from '../components/AppList.vue'\\nimport AppStoreDiscoverSection from '../components/AppStoreDiscover/AppStoreDiscoverSection.vue'\\nimport { useAppApiStore } from '../store/app-api-store.ts'\\n\\nconst route = useRoute()\\nconst store = useAppsStore()\\nconst appApiStore = useAppApiStore()\\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\\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\\n\\tif ((instance?.proxy as any).$store.getters.isAppApiEnabled) {\\n\\t\\tappApiStore.fetchAllApps()\\n\\t\\tappApiStore.updateAppsStatus()\\n\\t}\\n})\\nonBeforeUnmount(() => {\\n\\tclearInterval(appApiStore.getStatusUpdater)\\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","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport 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 * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\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\tif (this.app?.app_api) {\n\t\t\t\treturn this.app && this?.appApiStore.getLoading('install') === true\n\t\t\t}\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\treturn this.app && this?.appApiStore.getLoading(this.app.id) === true\n\t\t\t}\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tisInitializing() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\treturn this.app && (this.app?.status?.action === 'init' || this.app?.status?.action === 'healthcheck')\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tisDeploying() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\treturn this.app && this.app?.status?.action === 'deploy'\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tisManualInstall() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\treturn this.app?.daemon?.accepts_deploy_id === 'manual-install'\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tupdateButtonText() {\n\t\t\tif (this.app?.app_api && this.app?.daemon?.accepts_deploy_id === 'manual-install') {\n\t\t\t\treturn t('settings', 'Manually installed apps cannot be updated')\n\t\t\t}\n\t\t\treturn t('settings', 'Update to {version}', { version: this.app?.update })\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\tif (this.app && this.app?.status?.action && this.app?.status?.action === 'deploy') {\n\t\t\t\t\treturn t('settings', '{progress}% Deploying …', { progress: this.app?.status?.deploy ?? 0 })\n\t\t\t\t}\n\t\t\t\tif (this.app && this.app?.status?.action && this.app?.status?.action === 'init') {\n\t\t\t\t\treturn t('settings', '{progress}% Initializing …', { progress: this.app?.status?.init ?? 0 })\n\t\t\t\t}\n\t\t\t\tif (this.app && this.app?.status?.action && this.app?.status?.action === 'healthcheck') {\n\t\t\t\t\treturn t('settings', 'Health checking')\n\t\t\t\t}\n\t\t\t\tif (this.app.needsDownload) {\n\t\t\t\t\treturn t('settings', 'Deploy and Enable')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Enable')\n\t\t\t} else {\n\t\t\t\tif (this.app.needsDownload) {\n\t\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Enable')\n\t\t\t}\n\t\t},\n\t\tdisableButtonText() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\tif (this.app && this.app?.status?.action && this.app?.status?.action === 'deploy') {\n\t\t\t\t\treturn t('settings', '{progress}% Deploying …', { progress: this.app?.status?.deploy })\n\t\t\t\t}\n\t\t\t\tif (this.app && this.app?.status?.action && this.app?.status?.action === 'init') {\n\t\t\t\t\treturn t('settings', '{progress}% Initializing …', { progress: this.app?.status?.init })\n\t\t\t\t}\n\t\t\t\tif (this.app && this.app?.status?.action && this.app?.status?.action === 'healthcheck') {\n\t\t\t\t\treturn t('settings', 'Health checking')\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn t('settings', 'Disable')\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?.app_api && 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\tdefaultDeployDaemonAccessible() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\tif (this.app?.daemon && this.app?.daemon?.accepts_deploy_id === 'manual-install') {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\tif (this.app?.daemon?.accepts_deploy_id === 'docker-install'\n\t\t\t\t\t&& this.appApiStore.getDefaultDaemon?.name === this.app?.daemon?.name) {\n\t\t\t\t\treturn this?.appApiStore.getDaemonAccessible === true\n\t\t\t\t}\n\t\t\t\treturn this?.appApiStore.getDaemonAccessible\n\t\t\t}\n\t\t\treturn true\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?.app_api) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.app.groups.length || this.groupCheckedAppsData\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\treturn // not supported for app_api apps\n\t\t\t}\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\t\t|| app?.app_api) {\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\tif (this.app?.app_api) {\n\t\t\t\treturn // not supported for app_api apps\n\t\t\t}\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\tif (this.app?.app_api) {\n\t\t\t\treturn // not supported for app_api apps\n\t\t\t}\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\tif (this.app?.app_api) {\n\t\t\t\tthis.appApiStore.forceEnableApp(appId)\n\t\t\t\t\t.then(() => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t}\n\t\t},\n\t\tenable(appId, daemon = null, deployOptions = {}) {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\tthis.appApiStore.enableApp(appId, daemon, deployOptions)\n\t\t\t\t\t.then(() => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t}\n\t\t},\n\t\tdisable(appId) {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\tthis.appApiStore.disableApp(appId)\n\t\t\t\t\t.then(() => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t}\n\t\t},\n\t\tasync remove(appId, removeData = false) {\n\t\t\ttry {\n\t\t\t\tif (this.app?.app_api) {\n\t\t\t\t\tawait this.appApiStore.uninstallApp(appId, removeData)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('uninstallApp', { appId, removeData })\n\t\t\t\t}\n\t\t\t\tawait rebuildNavigation()\n\t\t\t} catch (error) {\n\t\t\t\tshowError(error)\n\t\t\t}\n\t\t},\n\t\tinstall(appId) {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\tthis.appApiStore.enableApp(appId)\n\t\t\t\t\t.then(() => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t}\n\t\t},\n\t\tupdate(appId) {\n\t\t\tif (this.app?.app_api) {\n\t\t\t\tthis.appApiStore.updateApp(appId)\n\t\t\t\t\t.then(() => { rebuildNavigation() })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t} else {\n\t\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t\t.catch((error) => { showError(error) })\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\trebuildNavigation()\n\t\t\t\t\t\tthis.store.updateCount = Math.max(this.store.updateCount - 1, 0)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n","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 }","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tvalidateConcurrency(concurrency);\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t\t// Since `pendingCount` has been decreased by one, increase `activeCount` by one.\n\t\t\tactiveCount++;\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\tconst result = (async () => function_(...arguments_))();\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 = (function_, resolve, arguments_) => {\n\t\t// Queue `internalResolve` instead of the `run` function\n\t\t// to preserve asynchronous context.\n\t\tnew Promise(internalResolve => {\n\t\t\tqueue.enqueue(internalResolve);\n\t\t}).then(\n\t\t\trun.bind(undefined, function_, resolve, arguments_),\n\t\t);\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// after the `internalResolve` 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) {\n\t\t\t\tresumeNext();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise(resolve => {\n\t\tenqueue(function_, resolve, arguments_);\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\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, option) {\n\tconst {concurrency} = option;\n\tconst limit = pLimit(concurrency);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(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","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\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 pLimit from 'p-limit'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport AppItem from './AppList/AppItem.vue'\nimport AppManagement from '../mixins/AppManagement'\nimport { useAppApiStore } from '../store/app-api-store'\nimport { useAppsStore } from '../store/apps-store'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t\tNcButton,\n\t},\n\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst appApiStore = useAppApiStore()\n\t\tconst store = useAppsStore()\n\n\t\treturn {\n\t\t\tappApiStore,\n\t\t\tstore,\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\tif (!this.$store.getters['appApiApps/isAppApiEnabled']) {\n\t\t\t\treturn this.$store.getters.loading('list')\n\t\t\t}\n\t\t\treturn this.$store.getters.loading('list') || this.appApiStore.getLoading('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\t// Exclude ExApps from the list if AppAPI is disabled\n\t\t\tconst exApps = this.$store.getters.isAppApiEnabled ? this.appApiStore.getAllApps : []\n\t\t\tconst apps = [...this.$store.getters.getAllApps, ...exApps]\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 natSortDiff = OC.Util.naturalSortCompare(a, b)\n\t\t\t\t\tif (natSortDiff === 0) {\n\t\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1)\n\t\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1)\n\t\t\t\t\t\treturn Number(sortStringA) - Number(sortStringB)\n\t\t\t\t\t}\n\t\t\t\t\treturn natSortDiff\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\tconst exApps = this.$store.getters.isAppApiEnabled ? this.appApiStore.getAllApps : []\n\t\t\treturn [...this.$store.getters.getAllApps, ...exApps]\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(() => {\n\t\t\t\t\tthis.update(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-inline-start: 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-inline-start: $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-block: 20px;\n\t\tmargin-inline: 0 10px;\n\t}\n\n\t&__bundle-header {\n\t\tmargin-block: 0;\n\t\tmargin-inline: 50px 10px;\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=27c89479&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/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=27c89479&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=27c89479&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=27c89479&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 \"27c89479\",\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.mdiEyeOffOutline,\"size\":64}})]},proxy:true}],null,false,3626885458)}):(_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 * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\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=114ea95a&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/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=114ea95a&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=114ea95a&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=114ea95a&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 \"114ea95a\",\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=27f36c48&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../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=27f36c48&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=27f36c48&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=27f36c48&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 \"27f36c48\",\n null\n \n)\n\nexport default component.exports","// 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-35d8331c] a{text-decoration:underline}.settings-markdown[data-v-35d8331c] a::after{content:\"↗\";padding-inline:calc(var(--default-grid-baseline)/2)}.settings-markdown[data-v-35d8331c] 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-35d8331c] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-35d8331c] li{position:relative}.settings-markdown[data-v-35d8331c] ul,.settings-markdown[data-v-35d8331c] ol{padding-inline-start:10px;margin-inline-start:10px}.settings-markdown[data-v-35d8331c] ul li{list-style-type:disc}.settings-markdown[data-v-35d8331c] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-35d8331c] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-35d8331c] blockquote{padding-inline-start:1em;border-inline-start:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-inline:0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./Markdown.vue\",\"webpack://./apps/settings/src/components/Markdown.vue\"],\"names\":[],\"mappings\":\"AAAA,sCCEC,yBACC,CAAA,6CACA,WACC,CAAA,mDACA,CAAA,wCAIF,eACC,CAAA,eACA,CAAA,6CACA,CAAA,kCACA,CAAA,iBACA,CAAA,iBACA,CAAA,2CAGD,6CACC,CAAA,kCACA,CAAA,iBACA,CAAA,uCAGD,iBACC,CAAA,8EAGD,yBACC,CAAA,wBACA,CAAA,0CAGD,oBACC,CAAA,gDAGD,sBACC,CAAA,sDAGD,sBACC,CAAA,+CAGD,wBACC,CAAA,0DACA,CAAA,mCACA,CAAA,eACA\",\"sourcesContent\":[\".settings-markdown :deep a{text-decoration:underline}.settings-markdown :deep a::after{content:\\\"↗\\\";padding-inline:calc(var(--default-grid-baseline)/2)}.settings-markdown :deep 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 :deep p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown :deep li{position:relative}.settings-markdown :deep ul,.settings-markdown :deep ol{padding-inline-start:10px;margin-inline-start:10px}.settings-markdown :deep ul li{list-style-type:disc}.settings-markdown :deep ul>li>ul>li{list-style-type:circle}.settings-markdown :deep ul>li>ul>li ul li{list-style-type:square}.settings-markdown :deep blockquote{padding-inline-start:1em;border-inline-start:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-inline:0}\",\"\\n.settings-markdown :deep {\\n\\ta {\\n\\t\\ttext-decoration: underline;\\n\\t\\t&::after {\\n\\t\\t\\tcontent: '↗';\\n\\t\\t\\tpadding-inline: calc(var(--default-grid-baseline) / 2);\\n\\t\\t}\\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-inline-start: 10px;\\n\\t\\tmargin-inline-start: 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-inline-start: 1em;\\n\\t\\tborder-inline-start: 4px solid var(--color-primary-element);\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\tmargin-inline: 0;\\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, `.daemon-selection-list[data-v-07c487de]{max-height:350px;overflow-y:scroll;padding:2rem}.daemon-selection-list__empty-content[data-v-07c487de]{margin-top:0;text-align:center}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppAPI/DaemonSelectionList.vue\"],\"names\":[],\"mappings\":\"AACA,wCACC,gBAAA,CACA,iBAAA,CACA,YAAA,CAEA,uDACC,YAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.daemon-selection-list {\\n\\tmax-height: 350px;\\n\\toverflow-y: scroll;\\n\\tpadding: 2rem;\\n\\n\\t&__empty-content {\\n\\t\\tmargin-top: 0;\\n\\t\\ttext-align: center;\\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-details[data-v-5148f46c]{padding:20px}.app-details__actions-manage[data-v-5148f46c]{display:flex;align-items:center}.app-details__actions-manage input[data-v-5148f46c]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__authors[data-v-5148f46c]{color:var(--color-text-maxcontrast)}.app-details__section[data-v-5148f46c]{margin-top:15px}.app-details__section h4[data-v-5148f46c]{font-size:16px;font-weight:bold;margin-block-end:5px}.app-details__interact[data-v-5148f46c]{display:flex;flex-direction:row;flex-wrap:wrap;gap:12px}.app-details__documentation a[data-v-5148f46c]{text-decoration:underline}.app-details__documentation li[data-v-5148f46c]{padding-inline-start:20px}.app-details__documentation li[data-v-5148f46c]::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-5148f46c]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-5148f46c]:hover,.force[data-v-5148f46c]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}.missing-dependencies[data-v-5148f46c]{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,kBAAA,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,CAGD,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\\talign-items: center;\\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\\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-1114c30b]{border-bottom:1px solid var(--color-border);font-size:24px}.app-sidebar-tabs__release-text[data-v-1114c30b] h3{font-size:20px}.app-sidebar-tabs__release-text[data-v-1114c30b] 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, `.app-daemon-badge[data-v-0698b3b8]{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}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppDaemonBadge.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,mCAAA,CACA,8BAAA,CACA,8CAAA,CACA,kCAAA,CAEA,YAAA,CACA,kBAAA,CACA,OAAA,CACA,eAAA,CACA,iBAAA\",\"sourcesContent\":[\"\\n.app-daemon-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\"],\"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.app?.app_api && _vm.shouldDisplayDefaultIcon)?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.app.app_api && _vm.shouldDisplayDefaultIcon)?_c('NcIconSvgWrapper',{staticStyle:{\"min-width\":\"auto\",\"min-height\":\"auto\",\"height\":\"100%\"},attrs:{\"path\":_vm.mdiCogOutline,\"size\":_vm.listView ? 24 : 48}}):(_vm.listView && _vm.app.preview && !_vm.app.app_api)?_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()],1),_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 || _vm.isInitializing)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('NcButton',{attrs:{\"type\":\"primary\",\"disabled\":_vm.installing || _vm.isLoading || !_vm.defaultDeployDaemonAccessible || _vm.isManualInstall,\"title\":_vm.updateButtonText},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 || _vm.isInitializing || _vm.isDeploying},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.disableButtonText)+\"\\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 || !_vm.defaultDeployDaemonAccessible || _vm.isInitializing || _vm.isDeploying},on:{\"click\":function($event){$event.stopPropagation();return _vm.enableButtonAction.apply(null, arguments)}}},[_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 || !_vm.defaultDeployDaemonAccessible},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(),_vm._v(\" \"),(_vm.app?.app_api && _vm.showSelectDaemonModal)?_c('DaemonSelectionDialog',{attrs:{\"show\":_vm.showSelectDaemonModal,\"app\":_vm.app},on:{\"update:show\":function($event){_vm.showSelectDaemonModal=$event}}}):_vm._e()],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\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 - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\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=\"!app?.app_api && shouldDisplayDefaultIcon\" class=\"icon-settings-dark\" />\n\t\t\t<NcIconSvgWrapper v-else-if=\"app.app_api && shouldDisplayDefaultIcon\"\n\t\t\t\t:path=\"mdiCogOutline\"\n\t\t\t\t:size=\"listView ? 24 : 48\"\n\t\t\t\tstyle=\"min-width: auto; min-height: auto; height: 100%;\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview && !app.app_api\"\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 || isInitializing\" 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 || !defaultDeployDaemonAccessible || isManualInstall\"\n\t\t\t\t:title=\"updateButtonText\"\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 || isInitializing || isDeploying\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t\t{{ disableButtonText }}\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 || !defaultDeployDaemonAccessible || isInitializing || isDeploying\"\n\t\t\t\t@click.stop=\"enableButtonAction\">\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 || !defaultDeployDaemonAccessible\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t\t\t{{ forceEnableButtonText }}\n\t\t\t</NcButton>\n\n\t\t\t<DaemonSelectionDialog v-if=\"app?.app_api && showSelectDaemonModal\"\n\t\t\t\t:show.sync=\"showSelectDaemonModal\"\n\t\t\t\t:app=\"app\" />\n\t\t</component>\n\t</component>\n</template>\n\n<script>\nimport { useAppsStore } from '../../store/apps-store.js'\n\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/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport { mdiCogOutline } from '@mdi/js'\nimport { useAppApiStore } from '../../store/app-api-store.ts'\nimport DaemonSelectionDialog from '../AppAPI/DaemonSelectionDialog.vue'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppLevelBadge,\n\t\tAppScore,\n\t\tNcButton,\n\t\tNcIconSvgWrapper,\n\t\tDaemonSelectionDialog,\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\tsetup() {\n\t\tconst store = useAppsStore()\n\t\tconst appApiStore = useAppApiStore()\n\n\t\treturn {\n\t\t\tstore,\n\t\t\tappApiStore,\n\t\t\tmdiCogOutline,\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\tshowSelectDaemonModal: 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\tshouldDisplayDefaultIcon() {\n\t\t\treturn (this.listView && !this.app.preview) || (!this.listView && !this.screenshotLoaded)\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\tshowSelectionModal() {\n\t\t\tthis.showSelectDaemonModal = true\n\t\t},\n\t\tasync enableButtonAction() {\n\t\t\tif (!this.app?.app_api) {\n\t\t\t\tthis.enable(this.app.id)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait this.appApiStore.fetchDockerDaemons()\n\t\t\tif (this.appApiStore.dockerDaemons.length === 1 && this.app.needsDownload) {\n\t\t\t\tthis.enable(this.app.id, this.appApiStore.dockerDaemons[0])\n\t\t\t} else if (this.app.needsDownload) {\n\t\t\t\tthis.showSelectionModal()\n\t\t\t} else {\n\t\t\t\tthis.enable(this.app.id, this.app.daemon)\n\t\t\t}\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: end;\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\tinset-inline: 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-inline-end: 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\tinset-block: 0;\n\t\t\tinset-inline: 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=2e0b174b&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/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=2e0b174b&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=2e0b174b&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=2e0b174b&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 \"2e0b174b\",\n null\n \n)\n\nexport default component.exports","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport axios from '@nextcloud/axios';\nimport { confirmPassword } from '@nextcloud/password-confirmation';\nimport { showError, showInfo } 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 api from './api';\nimport logger from '../logger';\nimport Vue from 'vue';\nexport const useAppApiStore = defineStore('app-api-apps', {\n state: () => ({\n apps: [],\n updateCount: loadState('settings', 'appstoreExAppUpdateCount', 0),\n loading: {},\n loadingList: false,\n statusUpdater: null,\n daemonAccessible: loadState('settings', 'defaultDaemonConfigAccessible', false),\n defaultDaemon: loadState('settings', 'defaultDaemonConfig', null),\n dockerDaemons: [],\n }),\n getters: {\n getLoading: (state) => (id) => state.loading[id] ?? false,\n getAllApps: (state) => state.apps,\n getUpdateCount: (state) => state.updateCount,\n getDaemonAccessible: (state) => state.daemonAccessible,\n getDefaultDaemon: (state) => state.defaultDaemon,\n getAppStatus: (state) => (appId) => state.apps.find((app) => app.id === appId)?.status || null,\n getStatusUpdater: (state) => state.statusUpdater,\n getInitializingOrDeployingApps: (state) => state.apps.filter((app) => app?.status?.action\n && (app?.status?.action === 'deploy' || app.status.action === 'init' || app.status.action === 'healthcheck')\n && app.status.type !== ''),\n },\n actions: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n appsApiFailure(error) {\n showError(t('settings', 'An error occurred during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { isHTML: true });\n logger.error(error);\n },\n setLoading(id, value) {\n Vue.set(this.loading, id, value);\n },\n setError(appId, error) {\n const appIds = Array.isArray(appId) ? appId : [appId];\n appIds.forEach((_id) => {\n const app = this.apps.find((app) => app.id === _id);\n if (app) {\n app.error = error;\n }\n });\n },\n enableApp(appId, daemon, deployOptions) {\n this.setLoading(appId, true);\n this.setLoading('install', true);\n return confirmPassword().then(() => {\n return axios.post(generateUrl(`/apps/app_api/apps/enable/${appId}/${daemon.name}`), { deployOptions })\n .then((response) => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n const app = this.apps.find((app) => app.id === appId);\n if (app) {\n if (!app.installed) {\n app.installed = true;\n app.needsDownload = false;\n app.daemon = daemon;\n app.status = {\n type: 'install',\n action: 'deploy',\n init: 0,\n deploy: 0,\n };\n }\n app.active = true;\n app.canUnInstall = false;\n app.removable = true;\n app.error = '';\n }\n this.updateAppsStatus();\n return axios.get(generateUrl('apps/files'))\n .then(() => {\n if (response.data.update_required) {\n showInfo(t('settings', 'The app has been enabled but needs to be updated.'), {\n onClick: () => window.location.reload(),\n close: false,\n });\n setTimeout(() => {\n location.reload();\n }, 5000);\n }\n })\n .catch(() => {\n this.setError(appId, t('settings', 'Error: This app cannot be enabled because it makes the server unstable'));\n });\n })\n .catch((error) => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n this.setError(appId, error.response.data.data.message);\n this.appsApiFailure({ appId, error });\n });\n }).catch(() => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n });\n },\n forceEnableApp(appId) {\n this.setLoading(appId, true);\n this.setLoading('install', true);\n return confirmPassword().then(() => {\n return api.post(generateUrl('/apps/app_api/apps/force'), { appId })\n .then(() => {\n location.reload();\n })\n .catch((error) => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n this.setError(appId, error.response.data.data.message);\n this.appsApiFailure({ appId, error });\n });\n }).catch(() => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n });\n },\n disableApp(appId) {\n this.setLoading(appId, true);\n return confirmPassword().then(() => {\n return api.get(generateUrl(`apps/app_api/apps/disable/${appId}`))\n .then(() => {\n this.setLoading(appId, false);\n const app = this.apps.find((app) => app.id === appId);\n if (app) {\n app.active = false;\n if (app.removable) {\n app.canUnInstall = true;\n }\n }\n return true;\n })\n .catch((error) => {\n this.setLoading(appId, false);\n this.appsApiFailure({ appId, error });\n });\n }).catch(() => {\n this.setLoading(appId, false);\n });\n },\n uninstallApp(appId, removeData) {\n this.setLoading(appId, true);\n return confirmPassword().then(() => {\n return api.get(generateUrl(`/apps/app_api/apps/uninstall/${appId}?removeData=${removeData}`))\n .then(() => {\n this.setLoading(appId, false);\n const app = this.apps.find((app) => app.id === appId);\n if (app) {\n app.active = false;\n app.needsDownload = true;\n app.installed = false;\n app.canUnInstall = false;\n app.canInstall = true;\n app.daemon = null;\n app.status = {};\n if (app.update !== null) {\n this.updateCount--;\n }\n app.update = undefined;\n }\n return true;\n })\n .catch((error) => {\n this.setLoading(appId, false);\n this.appsApiFailure({ appId, error });\n });\n });\n },\n updateApp(appId) {\n this.setLoading(appId, true);\n this.setLoading('install', true);\n return confirmPassword().then(() => {\n return api.get(generateUrl(`/apps/app_api/apps/update/${appId}`))\n .then(() => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n const app = this.apps.find((app) => app.id === appId);\n if (app) {\n const version = app.update;\n app.update = undefined;\n app.version = version || app.version;\n app.status = {\n type: 'update',\n action: 'deploy',\n init: 0,\n deploy: 0,\n };\n app.error = '';\n }\n this.updateCount--;\n this.updateAppsStatus();\n return true;\n })\n .catch((error) => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n this.appsApiFailure({ appId, error });\n });\n }).catch(() => {\n this.setLoading(appId, false);\n this.setLoading('install', false);\n });\n },\n async fetchAllApps() {\n this.loadingList = true;\n try {\n const response = await api.get(generateUrl('/apps/app_api/apps/list'));\n this.apps = response.data.apps;\n this.loadingList = false;\n return true;\n }\n catch (error) {\n logger.error(error);\n showError(t('settings', 'An error occurred during the request. Unable to proceed.'));\n this.loadingList = false;\n }\n },\n async fetchAppStatus(appId) {\n return api.get(generateUrl(`/apps/app_api/apps/status/${appId}`))\n .then((response) => {\n const app = this.apps.find((app) => app.id === appId);\n if (app) {\n app.status = response.data;\n }\n const initializingOrDeployingApps = this.getInitializingOrDeployingApps;\n console.debug('initializingOrDeployingApps after setAppStatus', initializingOrDeployingApps);\n if (initializingOrDeployingApps.length === 0) {\n console.debug('clearing interval');\n clearInterval(this.statusUpdater);\n this.statusUpdater = null;\n }\n if (Object.hasOwn(response.data, 'error')\n && response.data.error !== ''\n && initializingOrDeployingApps.length === 1) {\n clearInterval(this.statusUpdater);\n this.statusUpdater = null;\n }\n })\n .catch((error) => {\n this.appsApiFailure({ appId, error });\n this.apps = this.apps.filter((app) => app.id !== appId);\n this.updateAppsStatus();\n });\n },\n async fetchDockerDaemons() {\n try {\n const { data } = await axios.get(generateUrl('/apps/app_api/daemons'));\n this.defaultDaemon = data.daemons.find((daemon) => daemon.name === data.default_daemon_config);\n this.dockerDaemons = data.daemons.filter((daemon) => daemon.accepts_deploy_id === 'docker-install');\n }\n catch (error) {\n logger.error('[app-api-store] Failed to fetch Docker daemons', { error });\n return false;\n }\n return true;\n },\n updateAppsStatus() {\n clearInterval(this.statusUpdater);\n const initializingOrDeployingApps = this.getInitializingOrDeployingApps;\n if (initializingOrDeployingApps.length === 0) {\n return;\n }\n this.statusUpdater = setInterval(() => {\n const initializingOrDeployingApps = this.getInitializingOrDeployingApps;\n console.debug('initializingOrDeployingApps', initializingOrDeployingApps);\n initializingOrDeployingApps.forEach(app => {\n this.fetchAppStatus(app.id);\n });\n }, 2000);\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, `/*!\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */.app-item[data-v-2e0b174b]{position:relative}.app-item[data-v-2e0b174b]:hover{background-color:var(--color-background-dark)}.app-item--list-view[data-v-2e0b174b]{--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-2e0b174b]{background-color:var(--color-background-dark)}.app-item--list-view>*[data-v-2e0b174b]{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-2e0b174b]{width:var(--default-clickable-area);height:auto;text-align:end}.app-item--list-view .app-image-icon svg[data-v-2e0b174b],.app-item--list-view .app-image-icon .icon-settings-dark[data-v-2e0b174b]{margin-top:5px;width:20px;height:20px;opacity:.5;background-size:cover;display:inline-block}.app-item--list-view .app-name[data-v-2e0b174b]{padding:0 var(--app-item-padding)}.app-item--list-view .app-name--link[data-v-2e0b174b]{height:var(--app-item-height);display:flex;align-items:center}.app-item--list-view .app-name--link[data-v-2e0b174b]::after{content:\"\";position:absolute;inset-inline:0;height:var(--app-item-height)}.app-item--list-view .app-actions[data-v-2e0b174b]{display:flex;gap:var(--app-item-padding);flex-wrap:wrap;justify-content:end}.app-item--list-view .app-actions .icon-loading-small[data-v-2e0b174b]{display:inline-block;top:4px;margin-inline-end:10px}@media only screen and (max-width: 900px){.app-item--list-view .app-version[data-v-2e0b174b],.app-item--list-view .app-level[data-v-2e0b174b]{display:none}}@media only screen and (max-width: 512px){.app-item--list-view .app-actions[data-v-2e0b174b]{display:none}}.app-item--store-view[data-v-2e0b174b]{padding:30px}.app-item--store-view .app-image-icon .icon-settings-dark[data-v-2e0b174b]{width:100%;height:150px;background-size:45px;opacity:.5}.app-item--store-view .app-image-icon svg[data-v-2e0b174b]{position:absolute;bottom:43px;width:64px;height:64px;opacity:.1}.app-item--store-view .app-name[data-v-2e0b174b]{margin:5px 0}.app-item--store-view .app-name--link[data-v-2e0b174b]::after{content:\"\";position:absolute;inset-block:0;inset-inline:0}.app-item--store-view .app-actions[data-v-2e0b174b]{margin:10px 0}@media only screen and (min-width: 1601px){.app-item--store-view[data-v-2e0b174b]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-2e0b174b]{width:33%}}@media only screen and (max-width: 1600px){.app-item--store-view[data-v-2e0b174b]{width:25%}.app-item--store-view.app-item--with-sidebar[data-v-2e0b174b]{width:33%}}@media only screen and (max-width: 1400px){.app-item--store-view[data-v-2e0b174b]{width:33%}.app-item--store-view.app-item--with-sidebar[data-v-2e0b174b]{width:50%}}@media only screen and (max-width: 900px){.app-item--store-view[data-v-2e0b174b]{width:50%}.app-item--store-view.app-item--with-sidebar[data-v-2e0b174b]{width:100%}}@media only screen and (max-width: 1024px){.app-item--store-view[data-v-2e0b174b]{width:50%}}@media only screen and (max-width: 480px){.app-item--store-view[data-v-2e0b174b]{width:100%}}.app-icon[data-v-2e0b174b]{filter:var(--background-invert-if-bright)}.app-image[data-v-2e0b174b]{position:relative;height:150px;opacity:1;overflow:hidden}.app-image img[data-v-2e0b174b]{width:100%}.app-version[data-v-2e0b174b]{color:var(--color-text-maxcontrast)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./core/css/variables.scss\",\"webpack://./apps/settings/src/components/AppList/AppItem.vue\"],\"names\":[],\"mappings\":\"AAEA;;;EAAA,CCEA,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,cAAA,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,cAAA,CACA,6BAAA,CAGD,mDACC,YAAA,CACA,2BAAA,CACA,cAAA,CACA,mBAAA,CAEA,uEACC,oBAAA,CACA,OAAA,CACA,sBAAA,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,aAAA,CACA,cAAA,CAGD,oDACC,aAAA,CAGD,2CAlCD,uCAmCE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CA1CD,uCA2CE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,2CAlDD,uCAmDE,SAAA,CAEA,8DACC,SAAA,CAAA,CAIF,0CA1DD,uCA2DE,SAAA,CAEA,8DACC,UAAA,CAAA,CAIF,2CAlED,uCAmEE,SAAA,CAAA,CAGD,0CAtED,uCAuEE,UAAA,CAAA,CAKH,2BACC,yCAAA,CAGD,4BACC,iBAAA,CACA,YAAA,CACA,SAAA,CACA,eAAA,CAEA,gCACC,UAAA,CAIF,8BACC,mCAAA\",\"sourcesContent\":[\"@use 'sass:color';\\n\\n/*!\\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\\n * SPDX-License-Identifier: AGPL-3.0-or-later\\n */\\n// SCSS darken/lighten function override\\n@function nc-darken($color, $value) {\\n\\t@return color.adjust($color, $lightness: - $value, $space: hsl);\\n}\\n\\n@function nc-lighten($color, $value) {\\n\\t@return color.adjust($color, $lightness: $value, $space: hsl);\\n}\\n\\n// SCSS variables\\n// DEPRECATED, please use CSS4 vars\\n$color-main-text: #222 !default; // Not #000 for better readability\\n$color-main-background: #fff !default;\\n$color-main-background-translucent: rgba($color-main-background, .97) !default;\\n\\n// used for different active/hover/focus/disabled states\\n$color-background-hover: nc-darken($color-main-background, 4%) !default;\\n$color-background-dark: nc-darken($color-main-background, 7%) !default;\\n$color-background-darker: nc-darken($color-main-background, 14%) !default;\\n\\n$color-placeholder-light: nc-darken($color-main-background, 10%) !default;\\n$color-placeholder-dark: nc-darken($color-main-background, 20%) !default;\\n\\n$color-primary: #0082c9 !default;\\n$color-primary-hover: color.mix($color-primary, $color-main-background, 80%) !default;\\n\\n$color-primary-light: color.mix($color-primary, $color-main-background, 10%) !default;\\n$color-primary-light-text: $color-primary !default;\\n$color-primary-light-hover: color.mix($color-primary-light, $color-main-text, 95%) !default;\\n\\n$color-primary-text: #ffffff !default;\\n// do not use nc-darken/lighten in case of overriding because\\n// primary-text is independent of color-main-text\\n$color-primary-element-text-dark: color.adjust($color-primary-text, $lightness: -7%, $space: hsl) !default;\\n$color-primary-element: $color-primary !default;\\n$color-primary-element-hover: color.mix($color-primary-element, $color-main-background, 80%) !default;\\n$color-primary-element-light: color.adjust($color-primary-element, $lightness: 15%, $space: hsl) !default;\\n\\n$color-error: #e9322d;\\n$color-error-hover: color.mix($color-error, $color-main-background, 80%) !default;\\n$color-warning: #eca700;\\n$color-warning-hover: color.mix($color-warning, $color-main-background, 80%) !default;\\n$color-success: #46ba61;\\n$color-success-hover: color.mix($color-success, $color-main-background, 80%) !default;\\n// used for svg\\n$color-white: #fff;\\n$color-black: #000;\\n$color-yellow: #FC0;\\n\\n// rgb(118, 118, 118) / #767676\\n// min. color contrast for normal text on white background according to WCAG AA\\n// (Works as well: color: #000; opacity: 0.57;)\\n$color-text-maxcontrast: nc-lighten($color-main-text, 33%) !default;\\n$color-text-light: $color-main-text !default;\\n$color-text-lighter: $color-text-maxcontrast !default;\\n\\n$image-logo: url('../img/logo/logo.svg?v=1') !default;\\n$image-login-background: url('../img/background.png?v=2') !default;\\n$image-logoheader: url('../img/logo/logo.svg?v=1') !default;\\n$image-favicon: url('../img/logo/logo.svg?v=1') !default;\\n\\n$color-loading-light: #ccc !default;\\n$color-loading-dark: #444 !default;\\n\\n$color-box-shadow: color.adjust(nc-darken($color-main-background, 70%), $alpha: -0.5, $space: hsl) !default;\\n\\n// light border like file table or app-content list\\n$color-border: nc-darken($color-main-background, 7%) !default;\\n// darker border like inputs or very visible elements\\n$color-border-dark: nc-darken($color-main-background, 14%) !default;\\n\\n$border-radius: 3px !default;\\n$border-radius-large: 10px !default;\\n// Pill-style button, value is large so big buttons also have correct roundness\\n$border-radius-pill: 100px !default;\\n\\n$font-face: system-ui, -apple-system, \\\"Segoe UI\\\", Roboto, Oxygen-Sans, Cantarell, Ubuntu, \\\"Helvetica Neue\\\", \\\"Noto Sans\\\", \\\"Liberation Sans\\\", Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\", \\\"Noto Color Emoji\\\" !default;\\n$default-font-size: 15px;\\n\\n$default-line-height: 24px;\\n\\n$animation-quick: 100ms;\\n$animation-slow: 300ms;\\n\\n// various structure data\\n$header-height: 50px;\\n$navigation-width: 300px;\\n$sidebar-min-width: 300px;\\n$sidebar-max-width: 500px;\\n$list-min-width: 200px;\\n$list-max-width: 300px;\\n$header-menu-item-height: 44px;\\n$header-menu-profile-item-height: 66px;\\n\\n// mobile. Keep in sync with core/js/js.js\\n$breakpoint-mobile: 1024px;\\n\",\"\\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: end;\\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\\tinset-inline: 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-inline-end: 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\\tinset-block: 0;\\n\\t\\t\\tinset-inline: 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, `.apps-list[data-v-27c89479]{display:flex;flex-wrap:wrap;align-content:flex-start}.apps-list--move[data-v-27c89479]{transition:transform 1s}.apps-list #app-list-update-all[data-v-27c89479]{margin-inline-start:10px}.apps-list__toolbar[data-v-27c89479]{height:60px;padding:8px;padding-inline-start: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-27c89479]{margin-bottom:100px;position:relative}.apps-list__list-container[data-v-27c89479]{width:100%}.apps-list__store-container[data-v-27c89479]{display:flex;flex-wrap:wrap}.apps-list__bundle-heading[data-v-27c89479]{display:flex;align-items:center;margin-block:20px;margin-inline:0 10px}.apps-list__bundle-header[data-v-27c89479]{margin-block:0;margin-inline:50px 10px;font-weight:bold;font-size:20px;line-height:30px;color:var(--color-text-light)}#apps-list-search .app-item h2[data-v-27c89479]{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,wBAAA,CAGD,qCACC,WAjBe,CAkBf,WAnBgB,CAqBhB,yBApBe,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,iBAAA,CACA,oBAAA,CAGD,2CACC,cAAA,CACA,uBAAA,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-inline-start: 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-inline-start: $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-block: 20px;\\n\\t\\tmargin-inline: 0 10px;\\n\\t}\\n\\n\\t&__bundle-header {\\n\\t\\tmargin-block: 0;\\n\\t\\tmargin-inline: 50px 10px;\\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-sidebar--with-screenshot[data-v-ffae2952] .app-sidebar-header__figure{background-size:cover}.app-sidebar__fallback-icon[data-v-ffae2952]{width:100%;height:100%}.app-sidebar__badges[data-v-ffae2952]{display:flex;flex-direction:row;gap:12px}.app-sidebar__version[data-v-ffae2952]{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.deploy-option[data-v-d7fb3b54] {\n\tmargin: calc(var(--default-grid-baseline) * 4) 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: flex-start;\n&__hint[data-v-d7fb3b54] {\n\t\tmargin-top: 4px;\n\t\tfont-size: 0.8em;\n\t\tcolor: var(--color-text-maxcontrast);\n}\n}\n.envs[data-v-d7fb3b54] {\n\twidth: 100%;\n\toverflow: auto;\n\theight: 100%;\n\tmax-height: 300px;\nli[data-v-d7fb3b54] {\n\t\tmargin: 10px 0;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDeployOptionsModal.vue\"],\"names\":[],\"mappings\":\";AAwSA;CACA,gDAAA;CACA,aAAA;CACA,sBAAA;CACA,uBAAA;AAEA;EACA,eAAA;EACA,gBAAA;EACA,oCAAA;AACA;AACA;AAEA;CACA,WAAA;CACA,cAAA;CACA,YAAA;CACA,iBAAA;AAEA;EACA,cAAA;AACA;AACA\",\"sourcesContent\":[\"<!--\\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\\n - SPDX-License-Identifier: AGPL-3.0-or-later\\n-->\\n\\n<template>\\n\\t<NcDialog :open=\\\"show\\\"\\n\\t\\tsize=\\\"normal\\\"\\n\\t\\t:name=\\\"t('settings', 'Advanced deploy options')\\\"\\n\\t\\t@update:open=\\\"$emit('update:show', $event)\\\">\\n\\t\\t<div class=\\\"modal__content\\\">\\n\\t\\t\\t<p class=\\\"deploy-option__hint\\\">\\n\\t\\t\\t\\t{{ configuredDeployOptions === null ? t('settings', 'Edit ExApp deploy options before installation') : t('settings', 'Configured ExApp deploy options. Can be set only during installation') }}.\\n\\t\\t\\t\\t<a v-if=\\\"deployOptionsDocsUrl\\\" :href=\\\"deployOptionsDocsUrl\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Learn more') }}\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t</p>\\n\\t\\t\\t<h3 v-if=\\\"environmentVariables.length > 0 || (configuredDeployOptions !== null && configuredDeployOptions.environment_variables.length > 0)\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Environment variables') }}\\n\\t\\t\\t</h3>\\n\\t\\t\\t<template v-if=\\\"configuredDeployOptions === null\\\">\\n\\t\\t\\t\\t<div v-for=\\\"envVar in environmentVariables\\\"\\n\\t\\t\\t\\t\\t:key=\\\"envVar.envName\\\"\\n\\t\\t\\t\\t\\tclass=\\\"deploy-option\\\">\\n\\t\\t\\t\\t\\t<NcTextField :label=\\\"envVar.displayName\\\" :value.sync=\\\"deployOptions.environment_variables[envVar.envName]\\\" />\\n\\t\\t\\t\\t\\t<p class=\\\"deploy-option__hint\\\">\\n\\t\\t\\t\\t\\t\\t{{ envVar.description }}\\n\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</template>\\n\\t\\t\\t<fieldset v-else-if=\\\"Object.keys(configuredDeployOptions).length > 0\\\"\\n\\t\\t\\t\\tclass=\\\"envs\\\">\\n\\t\\t\\t\\t<legend class=\\\"deploy-option__hint\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'ExApp container environment variables') }}\\n\\t\\t\\t\\t</legend>\\n\\t\\t\\t\\t<NcTextField v-for=\\\"(value, key) in configuredDeployOptions.environment_variables\\\"\\n\\t\\t\\t\\t\\t:key=\\\"key\\\"\\n\\t\\t\\t\\t\\t:label=\\\"value.displayName ?? key\\\"\\n\\t\\t\\t\\t\\t:helper-text=\\\"value.description\\\"\\n\\t\\t\\t\\t\\t:value=\\\"value.value\\\"\\n\\t\\t\\t\\t\\treadonly />\\n\\t\\t\\t</fieldset>\\n\\t\\t\\t<template v-else>\\n\\t\\t\\t\\t<p class=\\\"deploy-option__hint\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'No environment variables defined') }}\\n\\t\\t\\t\\t</p>\\n\\t\\t\\t</template>\\n\\n\\t\\t\\t<h3>{{ t('settings', 'Mounts') }}</h3>\\n\\t\\t\\t<template v-if=\\\"configuredDeployOptions === null\\\">\\n\\t\\t\\t\\t<p class=\\\"deploy-option__hint\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Define host folder mounts to bind to the ExApp container') }}\\n\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t<NcNoteCard type=\\\"info\\\" :text=\\\"t('settings', 'Must exist on the Deploy daemon host prior to installing the ExApp')\\\" />\\n\\t\\t\\t\\t<div v-for=\\\"mount in deployOptions.mounts\\\"\\n\\t\\t\\t\\t\\t:key=\\\"mount.hostPath\\\"\\n\\t\\t\\t\\t\\tclass=\\\"deploy-option\\\"\\n\\t\\t\\t\\t\\tstyle=\\\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\\\">\\n\\t\\t\\t\\t\\t<NcTextField :label=\\\"t('settings', 'Host path')\\\" :value.sync=\\\"mount.hostPath\\\" />\\n\\t\\t\\t\\t\\t<NcTextField :label=\\\"t('settings', 'Container path')\\\" :value.sync=\\\"mount.containerPath\\\" />\\n\\t\\t\\t\\t\\t<NcCheckboxRadioSwitch :checked.sync=\\\"mount.readonly\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'Read-only') }}\\n\\t\\t\\t\\t\\t</NcCheckboxRadioSwitch>\\n\\t\\t\\t\\t\\t<NcButton :aria-label=\\\"t('settings', 'Remove mount')\\\"\\n\\t\\t\\t\\t\\t\\tstyle=\\\"margin-top: 6px;\\\"\\n\\t\\t\\t\\t\\t\\t@click=\\\"removeMount(mount)\\\">\\n\\t\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiDeleteOutline\\\" />\\n\\t\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"addingMount\\\" class=\\\"deploy-option\\\">\\n\\t\\t\\t\\t\\t<h4>\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'New mount') }}\\n\\t\\t\\t\\t\\t</h4>\\n\\t\\t\\t\\t\\t<div style=\\\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\\\">\\n\\t\\t\\t\\t\\t\\t<NcTextField ref=\\\"newMountHostPath\\\"\\n\\t\\t\\t\\t\\t\\t\\t:label=\\\"t('settings', 'Host path')\\\"\\n\\t\\t\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Enter path to host folder')\\\"\\n\\t\\t\\t\\t\\t\\t\\t:value.sync=\\\"newMountPoint.hostPath\\\" />\\n\\t\\t\\t\\t\\t\\t<NcTextField :label=\\\"t('settings', 'Container path')\\\"\\n\\t\\t\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Enter path to container folder')\\\"\\n\\t\\t\\t\\t\\t\\t\\t:value.sync=\\\"newMountPoint.containerPath\\\" />\\n\\t\\t\\t\\t\\t\\t<NcCheckboxRadioSwitch :checked.sync=\\\"newMountPoint.readonly\\\"\\n\\t\\t\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Toggle read-only mode')\\\">\\n\\t\\t\\t\\t\\t\\t\\t{{ t('settings', 'Read-only') }}\\n\\t\\t\\t\\t\\t\\t</NcCheckboxRadioSwitch>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div style=\\\"display: flex; align-items: center; margin-top: 4px;\\\">\\n\\t\\t\\t\\t\\t\\t<NcButton :aria-label=\\\"t('settings', 'Confirm adding new mount')\\\"\\n\\t\\t\\t\\t\\t\\t\\t@click=\\\"addMountPoint\\\">\\n\\t\\t\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiCheck\\\" />\\n\\t\\t\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t\\t\\t{{ t('settings', 'Confirm') }}\\n\\t\\t\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t\\t\\t\\t<NcButton :aria-label=\\\"t('settings', 'Cancel adding mount')\\\"\\n\\t\\t\\t\\t\\t\\t\\tstyle=\\\"margin-left: 4px;\\\"\\n\\t\\t\\t\\t\\t\\t\\t@click=\\\"cancelAddMountPoint\\\">\\n\\t\\t\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiClose\\\" />\\n\\t\\t\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t\\t\\t{{ t('settings', 'Cancel') }}\\n\\t\\t\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<NcButton v-if=\\\"!addingMount\\\"\\n\\t\\t\\t\\t\\t:aria-label=\\\"t('settings', 'Add mount')\\\"\\n\\t\\t\\t\\t\\tstyle=\\\"margin-top: 5px;\\\"\\n\\t\\t\\t\\t\\t@click=\\\"startAddingMount\\\">\\n\\t\\t\\t\\t\\t<template #icon>\\n\\t\\t\\t\\t\\t\\t<NcIconSvgWrapper :path=\\\"mdiPlus\\\" />\\n\\t\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t\\t{{ t('settings', 'Add mount') }}\\n\\t\\t\\t\\t</NcButton>\\n\\t\\t\\t</template>\\n\\t\\t\\t<template v-else-if=\\\"configuredDeployOptions.mounts.length > 0\\\">\\n\\t\\t\\t\\t<p class=\\\"deploy-option__hint\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'ExApp container mounts') }}\\n\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t<div v-for=\\\"mount in configuredDeployOptions.mounts\\\"\\n\\t\\t\\t\\t\\t:key=\\\"mount.hostPath\\\"\\n\\t\\t\\t\\t\\tclass=\\\"deploy-option\\\"\\n\\t\\t\\t\\t\\tstyle=\\\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\\\">\\n\\t\\t\\t\\t\\t<NcTextField :label=\\\"t('settings', 'Host path')\\\" :value.sync=\\\"mount.hostPath\\\" readonly />\\n\\t\\t\\t\\t\\t<NcTextField :label=\\\"t('settings', 'Container path')\\\" :value.sync=\\\"mount.containerPath\\\" readonly />\\n\\t\\t\\t\\t\\t<NcCheckboxRadioSwitch :checked.sync=\\\"mount.readonly\\\" disabled>\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'Read-only') }}\\n\\t\\t\\t\\t\\t</NcCheckboxRadioSwitch>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</template>\\n\\t\\t\\t<p v-else class=\\\"deploy-option__hint\\\">\\n\\t\\t\\t\\t{{ t('settings', 'No mounts defined') }}\\n\\t\\t\\t</p>\\n\\t\\t</div>\\n\\n\\t\\t<template v-if=\\\"!app.active && (app.canInstall || app.isCompatible) && configuredDeployOptions === null\\\" #actions>\\n\\t\\t\\t<NcButton :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 || !defaultDeployDaemonAccessible || isInitializing || isDeploying\\\"\\n\\t\\t\\t\\t@click.stop=\\\"submitDeployOptions\\\">\\n\\t\\t\\t\\t{{ enableButtonText }}\\n\\t\\t\\t</NcButton>\\n\\t\\t</template>\\n\\t</NcDialog>\\n</template>\\n\\n<script>\\nimport { computed, ref } from 'vue'\\n\\nimport axios from '@nextcloud/axios'\\nimport { generateUrl } from '@nextcloud/router'\\nimport { loadState } from '@nextcloud/initial-state'\\nimport { emit } from '@nextcloud/event-bus'\\n\\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\\nimport NcTextField from '@nextcloud/vue/components/NcTextField'\\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\\nimport NcButton from '@nextcloud/vue/components/NcButton'\\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\\n\\nimport { mdiPlus, mdiCheck, mdiClose, mdiDeleteOutline } from '@mdi/js'\\n\\nimport { useAppApiStore } from '../../store/app-api-store.ts'\\nimport { useAppsStore } from '../../store/apps-store.ts'\\n\\nimport AppManagement from '../../mixins/AppManagement.js'\\n\\nexport default {\\n\\tname: 'AppDeployOptionsModal',\\n\\tcomponents: {\\n\\t\\tNcDialog,\\n\\t\\tNcTextField,\\n\\t\\tNcButton,\\n\\t\\tNcNoteCard,\\n\\t\\tNcCheckboxRadioSwitch,\\n\\t\\tNcIconSvgWrapper,\\n\\t},\\n\\tmixins: [AppManagement],\\n\\tprops: {\\n\\t\\tapp: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tshow: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t},\\n\\tsetup(props) {\\n\\t\\t// for AppManagement mixin\\n\\t\\tconst store = useAppsStore()\\n\\t\\tconst appApiStore = useAppApiStore()\\n\\n\\t\\tconst environmentVariables = computed(() => {\\n\\t\\t\\tif (props.app?.releases?.length === 1) {\\n\\t\\t\\t\\treturn props.app?.releases[0]?.environmentVariables || []\\n\\t\\t\\t}\\n\\t\\t\\treturn []\\n\\t\\t})\\n\\n\\t\\tconst deployOptions = ref({\\n\\t\\t\\tenvironment_variables: environmentVariables.value.reduce((acc, envVar) => {\\n\\t\\t\\t\\tacc[envVar.envName] = envVar.default || ''\\n\\t\\t\\t\\treturn acc\\n\\t\\t\\t}, {}),\\n\\t\\t\\tmounts: [],\\n\\t\\t})\\n\\n\\t\\treturn {\\n\\t\\t\\tenvironmentVariables,\\n\\t\\t\\tdeployOptions,\\n\\t\\t\\tstore,\\n\\t\\t\\tappApiStore,\\n\\t\\t\\tmdiPlus,\\n\\t\\t\\tmdiCheck,\\n\\t\\t\\tmdiClose,\\n\\t\\t\\tmdiDeleteOutline,\\n\\t\\t}\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\taddingMount: false,\\n\\t\\t\\tnewMountPoint: {\\n\\t\\t\\t\\thostPath: '',\\n\\t\\t\\t\\tcontainerPath: '',\\n\\t\\t\\t\\treadonly: false,\\n\\t\\t\\t},\\n\\t\\t\\taddingPortBinding: false,\\n\\t\\t\\tconfiguredDeployOptions: null,\\n\\t\\t\\tdeployOptionsDocsUrl: loadState('settings', 'deployOptionsDocsUrl', null),\\n\\t\\t}\\n\\t},\\n\\twatch: {\\n\\t\\tshow(newShow) {\\n\\t\\t\\tif (newShow) {\\n\\t\\t\\t\\tthis.fetchExAppDeployOptions()\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tthis.configuredDeployOptions = null\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tstartAddingMount() {\\n\\t\\t\\tthis.addingMount = true\\n\\t\\t\\tthis.$nextTick(() => {\\n\\t\\t\\t\\tthis.$refs.newMountHostPath.focus()\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\taddMountPoint() {\\n\\t\\t\\tthis.deployOptions.mounts.push(this.newMountPoint)\\n\\t\\t\\tthis.newMountPoint = {\\n\\t\\t\\t\\thostPath: '',\\n\\t\\t\\t\\tcontainerPath: '',\\n\\t\\t\\t\\treadonly: false,\\n\\t\\t\\t}\\n\\t\\t\\tthis.addingMount = false\\n\\t\\t},\\n\\t\\tcancelAddMountPoint() {\\n\\t\\t\\tthis.newMountPoint = {\\n\\t\\t\\t\\thostPath: '',\\n\\t\\t\\t\\tcontainerPath: '',\\n\\t\\t\\t\\treadonly: false,\\n\\t\\t\\t}\\n\\t\\t\\tthis.addingMount = false\\n\\t\\t},\\n\\t\\tremoveMount(mountToRemove) {\\n\\t\\t\\tthis.deployOptions.mounts = this.deployOptions.mounts.filter(mount => mount !== mountToRemove)\\n\\t\\t},\\n\\t\\tasync fetchExAppDeployOptions() {\\n\\t\\t\\treturn axios.get(generateUrl(`/apps/app_api/apps/deploy-options/${this.app.id}`))\\n\\t\\t\\t\\t.then(response => {\\n\\t\\t\\t\\t\\tthis.configuredDeployOptions = response.data\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(() => {\\n\\t\\t\\t\\t\\tthis.configuredDeployOptions = null\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\t\\tasync submitDeployOptions() {\\n\\t\\t\\tawait this.appApiStore.fetchDockerDaemons()\\n\\t\\t\\tif (this.appApiStore.dockerDaemons.length === 1 && this.app.needsDownload) {\\n\\t\\t\\t\\tthis.enable(this.app.id, this.appApiStore.dockerDaemons[0], this.deployOptions)\\n\\t\\t\\t} else if (this.app.needsDownload) {\\n\\t\\t\\t\\temit('showDaemonSelectionModal', this.deployOptions)\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tthis.enable(this.app.id, this.app.daemon, this.deployOptions)\\n\\t\\t\\t}\\n\\t\\t\\tthis.$emit('update:show', false)\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n.deploy-option {\\n\\tmargin: calc(var(--default-grid-baseline) * 4) 0;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\talign-items: flex-start;\\n\\n\\t&__hint {\\n\\t\\tmargin-top: 4px;\\n\\t\\tfont-size: 0.8em;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n}\\n\\n.envs {\\n\\twidth: 100%;\\n\\toverflow: auto;\\n\\theight: 100%;\\n\\tmax-height: 300px;\\n\\n\\tli {\\n\\t\\tmargin: 10px 0;\\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, `.app-level-badge[data-v-053710c8]{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-053710c8]{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-description[data-v-10fcea52]{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","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 [(_setup.appstoreEnabled)?_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}],null,false,1397544286)}):_vm._e(),_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.store.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.store.updateCount))])]},proxy:true},{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.APPSTORE_CATEGORY_ICONS.updates}})]},proxy:true}],null,false,3001044337)}):_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=419cd0cf&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../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=419cd0cf&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=419cd0cf&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=419cd0cf&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 \"419cd0cf\",\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=053710c8&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/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=053710c8&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=053710c8&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=053710c8&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 \"053710c8\",\n null\n \n)\n\nexport default component.exports","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\nimport { mdiAccountMultipleOutline, mdiAccountOutline, mdiArchiveOutline, mdiCheck, mdiClipboardFlowOutline, mdiClose, mdiCogOutline, mdiControllerClassicOutline, mdiCreationOutline, mdiDownload, mdiFileDocumentEdit, mdiFolder, mdiKeyOutline, mdiMagnify, mdiMonitorEye, mdiMultimedia, mdiOfficeBuildingOutline, mdiOpenInApp, mdiSecurity, mdiStar, mdiStarCircleOutline, mdiStarShootingOutline, mdiTools, mdiViewColumnOutline, } 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: mdiAccountOutline,\n enabled: mdiCheck,\n disabled: mdiClose,\n bundles: mdiArchiveOutline,\n supported: mdiStarShootingOutline,\n featured: mdiStar,\n updates: mdiDownload,\n // generic category\n ai: mdiCreationOutline,\n auth: mdiKeyOutline,\n customization: mdiCogOutline,\n dashboard: mdiViewColumnOutline,\n files: mdiFolder,\n games: mdiControllerClassicOutline,\n integration: mdiOpenInApp,\n monitoring: mdiMonitorEye,\n multimedia: mdiMultimedia,\n office: mdiFileDocumentEdit,\n organization: mdiOfficeBuildingOutline,\n search: mdiMagnify,\n security: mdiSecurity,\n social: mdiAccountMultipleOutline,\n tools: mdiTools,\n workflow: mdiClipboardFlowOutline,\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, `\n.app-score__wrapper[data-v-d9bfc6c8] {\n\tdisplay: inline-flex;\n\tcolor: var(--color-favorite, #a08b00);\n> *[data-v-d9bfc6c8] {\n\t\tvertical-align: text-bottom;\n}\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppScore.vue\"],\"names\":[],\"mappings\":\";AA+DA;CACA,oBAAA;CACA,qCAAA;AAEA;EACA,2BAAA;AACA;AACA\",\"sourcesContent\":[\"<!--\\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\\n - SPDX-License-Identifier: AGPL-3.0-or-later\\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/components/NcIconSvgWrapper'\\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","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\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","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.app.app_api && _setup.app.daemon)?_c(_setup.AppDaemonBadge,{attrs:{\"daemon\":_setup.app.daemon}}):_vm._e(),_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}}),_vm._v(\" \"),_c(_setup.AppDeployDaemonTab,{attrs:{\"app\":_setup.app}})],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<!-- eslint-disable-next-line vue/no-v-html This is rendered markdown so should be \"safe\" -->\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, depth }) => {\n\t\t\t\tdepth = Math.min(6, depth + (this.minHeading - 1))\n\t\t\t\treturn `<h${depth}>${text}</h${depth}>`\n\t\t\t}\n\t\t\trenderer.image = ({ 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 = ({ text }) => {\n\t\t\t\treturn `<blockquote>${text}</blockquote>`\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.settings-markdown :deep {\n\ta {\n\t\ttext-decoration: underline;\n\t\t&::after {\n\t\t\tcontent: '↗';\n\t\t\tpadding-inline: calc(var(--default-grid-baseline) / 2);\n\t\t}\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-inline-start: 10px;\n\t\tmargin-inline-start: 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-inline-start: 1em;\n\t\tborder-inline-start: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-inline: 0;\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!./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=35d8331c&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/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=35d8331c&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=35d8331c&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=35d8331c&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 \"35d8331c\",\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=10fcea52&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/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=10fcea52&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=10fcea52&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=10fcea52&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 \"10fcea52\",\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.mdiTextBoxOutline}})]},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 || _vm.isManualInstall},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.removeData)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.disableButtonText,\"disabled\":_vm.installing || _vm.isLoading || _vm.isInitializing || _vm.isDeploying},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 || !_vm.defaultDeployDaemonAccessible || _vm.isInitializing || _vm.isDeploying},on:{\"click\":_vm.enableButtonAction}}):(!_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(\" \"),(_vm.app?.app_api && (_vm.app.canInstall || _vm.app.isCompatible))?_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Advanced deploy options'),\"type\":\"secondary\"},on:{\"click\":() => _vm.showDeployOptionsModal = true},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiToyBrickPlusOutline}})]},proxy:true}],null,false,973660380)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Deploy options'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),(!_vm.defaultDeployDaemonAccessible)?_c('p',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Default Deploy daemon is not accessible'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.removeData,\"disabled\":_vm.installing || _vm.isLoading || !_vm.defaultDeployDaemonAccessible},on:{\"update:checked\":_vm.toggleRemoveData}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Delete data on remove'))+\"\\n\\t\\t\\t\")]):_vm._e()],1),_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 && !_vm.app.shipped)?_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.mdiBugOutline}})]},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.mdiFeatureSearchOutline}})]},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.mdiTooltipQuestionOutline}})]},proxy:true}],null,false,88743630)}):_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)]),_vm._v(\" \"),(_vm.app?.app_api)?_c('AppDeployOptionsModal',{attrs:{\"show\":_vm.showDeployOptionsModal,\"app\":_vm.app},on:{\"update:show\":function($event){_vm.showDeployOptionsModal=$event}}}):_vm._e(),_vm._v(\" \"),(_vm.app?.app_api)?_c('DaemonSelectionDialog',{attrs:{\"show\":_vm.showSelectDaemonModal,\"app\":_vm.app,\"deploy-options\":_vm.deployOptions},on:{\"update:show\":function($event){_vm.showSelectDaemonModal=$event}}}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcDialog :open=\"show\"\n\t\tsize=\"normal\"\n\t\t:name=\"t('settings', 'Advanced deploy options')\"\n\t\t@update:open=\"$emit('update:show', $event)\">\n\t\t<div class=\"modal__content\">\n\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t{{ configuredDeployOptions === null ? t('settings', 'Edit ExApp deploy options before installation') : t('settings', 'Configured ExApp deploy options. Can be set only during installation') }}.\n\t\t\t\t<a v-if=\"deployOptionsDocsUrl\" :href=\"deployOptionsDocsUrl\">\n\t\t\t\t\t{{ t('settings', 'Learn more') }}\n\t\t\t\t</a>\n\t\t\t</p>\n\t\t\t<h3 v-if=\"environmentVariables.length > 0 || (configuredDeployOptions !== null && configuredDeployOptions.environment_variables.length > 0)\">\n\t\t\t\t{{ t('settings', 'Environment variables') }}\n\t\t\t</h3>\n\t\t\t<template v-if=\"configuredDeployOptions === null\">\n\t\t\t\t<div v-for=\"envVar in environmentVariables\"\n\t\t\t\t\t:key=\"envVar.envName\"\n\t\t\t\t\tclass=\"deploy-option\">\n\t\t\t\t\t<NcTextField :label=\"envVar.displayName\" :value.sync=\"deployOptions.environment_variables[envVar.envName]\" />\n\t\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t\t{{ envVar.description }}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<fieldset v-else-if=\"Object.keys(configuredDeployOptions).length > 0\"\n\t\t\t\tclass=\"envs\">\n\t\t\t\t<legend class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'ExApp container environment variables') }}\n\t\t\t\t</legend>\n\t\t\t\t<NcTextField v-for=\"(value, key) in configuredDeployOptions.environment_variables\"\n\t\t\t\t\t:key=\"key\"\n\t\t\t\t\t:label=\"value.displayName ?? key\"\n\t\t\t\t\t:helper-text=\"value.description\"\n\t\t\t\t\t:value=\"value.value\"\n\t\t\t\t\treadonly />\n\t\t\t</fieldset>\n\t\t\t<template v-else>\n\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'No environment variables defined') }}\n\t\t\t\t</p>\n\t\t\t</template>\n\n\t\t\t<h3>{{ t('settings', 'Mounts') }}</h3>\n\t\t\t<template v-if=\"configuredDeployOptions === null\">\n\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'Define host folder mounts to bind to the ExApp container') }}\n\t\t\t\t</p>\n\t\t\t\t<NcNoteCard type=\"info\" :text=\"t('settings', 'Must exist on the Deploy daemon host prior to installing the ExApp')\" />\n\t\t\t\t<div v-for=\"mount in deployOptions.mounts\"\n\t\t\t\t\t:key=\"mount.hostPath\"\n\t\t\t\t\tclass=\"deploy-option\"\n\t\t\t\t\tstyle=\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\">\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Host path')\" :value.sync=\"mount.hostPath\" />\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Container path')\" :value.sync=\"mount.containerPath\" />\n\t\t\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"mount.readonly\">\n\t\t\t\t\t\t{{ t('settings', 'Read-only') }}\n\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t<NcButton :aria-label=\"t('settings', 'Remove mount')\"\n\t\t\t\t\t\tstyle=\"margin-top: 6px;\"\n\t\t\t\t\t\t@click=\"removeMount(mount)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiDeleteOutline\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"addingMount\" class=\"deploy-option\">\n\t\t\t\t\t<h4>\n\t\t\t\t\t\t{{ t('settings', 'New mount') }}\n\t\t\t\t\t</h4>\n\t\t\t\t\t<div style=\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\">\n\t\t\t\t\t\t<NcTextField ref=\"newMountHostPath\"\n\t\t\t\t\t\t\t:label=\"t('settings', 'Host path')\"\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Enter path to host folder')\"\n\t\t\t\t\t\t\t:value.sync=\"newMountPoint.hostPath\" />\n\t\t\t\t\t\t<NcTextField :label=\"t('settings', 'Container path')\"\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Enter path to container folder')\"\n\t\t\t\t\t\t\t:value.sync=\"newMountPoint.containerPath\" />\n\t\t\t\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"newMountPoint.readonly\"\n\t\t\t\t\t\t\t:aria-label=\"t('settings', 'Toggle read-only mode')\">\n\t\t\t\t\t\t\t{{ t('settings', 'Read-only') }}\n\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div style=\"display: flex; align-items: center; margin-top: 4px;\">\n\t\t\t\t\t\t<NcButton :aria-label=\"t('settings', 'Confirm adding new mount')\"\n\t\t\t\t\t\t\t@click=\"addMountPoint\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiCheck\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('settings', 'Confirm') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t<NcButton :aria-label=\"t('settings', 'Cancel adding mount')\"\n\t\t\t\t\t\t\tstyle=\"margin-left: 4px;\"\n\t\t\t\t\t\t\t@click=\"cancelAddMountPoint\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiClose\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{ t('settings', 'Cancel') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<NcButton v-if=\"!addingMount\"\n\t\t\t\t\t:aria-label=\"t('settings', 'Add mount')\"\n\t\t\t\t\tstyle=\"margin-top: 5px;\"\n\t\t\t\t\t@click=\"startAddingMount\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiPlus\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('settings', 'Add mount') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t\t<template v-else-if=\"configuredDeployOptions.mounts.length > 0\">\n\t\t\t\t<p class=\"deploy-option__hint\">\n\t\t\t\t\t{{ t('settings', 'ExApp container mounts') }}\n\t\t\t\t</p>\n\t\t\t\t<div v-for=\"mount in configuredDeployOptions.mounts\"\n\t\t\t\t\t:key=\"mount.hostPath\"\n\t\t\t\t\tclass=\"deploy-option\"\n\t\t\t\t\tstyle=\"display: flex; align-items: center; justify-content: space-between; flex-direction: row;\">\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Host path')\" :value.sync=\"mount.hostPath\" readonly />\n\t\t\t\t\t<NcTextField :label=\"t('settings', 'Container path')\" :value.sync=\"mount.containerPath\" readonly />\n\t\t\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"mount.readonly\" disabled>\n\t\t\t\t\t\t{{ t('settings', 'Read-only') }}\n\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<p v-else class=\"deploy-option__hint\">\n\t\t\t\t{{ t('settings', 'No mounts defined') }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<template v-if=\"!app.active && (app.canInstall || app.isCompatible) && configuredDeployOptions === null\" #actions>\n\t\t\t<NcButton :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 || !defaultDeployDaemonAccessible || isInitializing || isDeploying\"\n\t\t\t\t@click.stop=\"submitDeployOptions\">\n\t\t\t\t{{ enableButtonText }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</NcDialog>\n</template>\n\n<script>\nimport { computed, ref } from 'vue'\n\nimport axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { emit } from '@nextcloud/event-bus'\n\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\nimport NcTextField from '@nextcloud/vue/components/NcTextField'\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\n\nimport { mdiPlus, mdiCheck, mdiClose, mdiDeleteOutline } from '@mdi/js'\n\nimport { useAppApiStore } from '../../store/app-api-store.ts'\nimport { useAppsStore } from '../../store/apps-store.ts'\n\nimport AppManagement from '../../mixins/AppManagement.js'\n\nexport default {\n\tname: 'AppDeployOptionsModal',\n\tcomponents: {\n\t\tNcDialog,\n\t\tNcTextField,\n\t\tNcButton,\n\t\tNcNoteCard,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcIconSvgWrapper,\n\t},\n\tmixins: [AppManagement],\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshow: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup(props) {\n\t\t// for AppManagement mixin\n\t\tconst store = useAppsStore()\n\t\tconst appApiStore = useAppApiStore()\n\n\t\tconst environmentVariables = computed(() => {\n\t\t\tif (props.app?.releases?.length === 1) {\n\t\t\t\treturn props.app?.releases[0]?.environmentVariables || []\n\t\t\t}\n\t\t\treturn []\n\t\t})\n\n\t\tconst deployOptions = ref({\n\t\t\tenvironment_variables: environmentVariables.value.reduce((acc, envVar) => {\n\t\t\t\tacc[envVar.envName] = envVar.default || ''\n\t\t\t\treturn acc\n\t\t\t}, {}),\n\t\t\tmounts: [],\n\t\t})\n\n\t\treturn {\n\t\t\tenvironmentVariables,\n\t\t\tdeployOptions,\n\t\t\tstore,\n\t\t\tappApiStore,\n\t\t\tmdiPlus,\n\t\t\tmdiCheck,\n\t\t\tmdiClose,\n\t\t\tmdiDeleteOutline,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\taddingMount: false,\n\t\t\tnewMountPoint: {\n\t\t\t\thostPath: '',\n\t\t\t\tcontainerPath: '',\n\t\t\t\treadonly: false,\n\t\t\t},\n\t\t\taddingPortBinding: false,\n\t\t\tconfiguredDeployOptions: null,\n\t\t\tdeployOptionsDocsUrl: loadState('settings', 'deployOptionsDocsUrl', null),\n\t\t}\n\t},\n\twatch: {\n\t\tshow(newShow) {\n\t\t\tif (newShow) {\n\t\t\t\tthis.fetchExAppDeployOptions()\n\t\t\t} else {\n\t\t\t\tthis.configuredDeployOptions = null\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tstartAddingMount() {\n\t\t\tthis.addingMount = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.newMountHostPath.focus()\n\t\t\t})\n\t\t},\n\t\taddMountPoint() {\n\t\t\tthis.deployOptions.mounts.push(this.newMountPoint)\n\t\t\tthis.newMountPoint = {\n\t\t\t\thostPath: '',\n\t\t\t\tcontainerPath: '',\n\t\t\t\treadonly: false,\n\t\t\t}\n\t\t\tthis.addingMount = false\n\t\t},\n\t\tcancelAddMountPoint() {\n\t\t\tthis.newMountPoint = {\n\t\t\t\thostPath: '',\n\t\t\t\tcontainerPath: '',\n\t\t\t\treadonly: false,\n\t\t\t}\n\t\t\tthis.addingMount = false\n\t\t},\n\t\tremoveMount(mountToRemove) {\n\t\t\tthis.deployOptions.mounts = this.deployOptions.mounts.filter(mount => mount !== mountToRemove)\n\t\t},\n\t\tasync fetchExAppDeployOptions() {\n\t\t\treturn axios.get(generateUrl(`/apps/app_api/apps/deploy-options/${this.app.id}`))\n\t\t\t\t.then(response => {\n\t\t\t\t\tthis.configuredDeployOptions = response.data\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.configuredDeployOptions = null\n\t\t\t\t})\n\t\t},\n\t\tasync submitDeployOptions() {\n\t\t\tawait this.appApiStore.fetchDockerDaemons()\n\t\t\tif (this.appApiStore.dockerDaemons.length === 1 && this.app.needsDownload) {\n\t\t\t\tthis.enable(this.app.id, this.appApiStore.dockerDaemons[0], this.deployOptions)\n\t\t\t} else if (this.app.needsDownload) {\n\t\t\t\temit('showDaemonSelectionModal', this.deployOptions)\n\t\t\t} else {\n\t\t\t\tthis.enable(this.app.id, this.app.daemon, this.deployOptions)\n\t\t\t}\n\t\t\tthis.$emit('update:show', false)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.deploy-option {\n\tmargin: calc(var(--default-grid-baseline) * 4) 0;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: flex-start;\n\n\t&__hint {\n\t\tmargin-top: 4px;\n\t\tfont-size: 0.8em;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n\n.envs {\n\twidth: 100%;\n\toverflow: auto;\n\theight: 100%;\n\tmax-height: 300px;\n\n\tli {\n\t\tmargin: 10px 0;\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!./AppDeployOptionsModal.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!./AppDeployOptionsModal.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/vue-loader/lib/index.js??vue-loader-options!./AppDeployOptionsModal.vue?vue&type=style&index=0&id=d7fb3b54&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDeployOptionsModal.vue?vue&type=style&index=0&id=d7fb3b54&prod&scoped=true&lang=css\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDeployOptionsModal.vue?vue&type=template&id=d7fb3b54&scoped=true\"\nimport script from \"./AppDeployOptionsModal.vue?vue&type=script&lang=js\"\nexport * from \"./AppDeployOptionsModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./AppDeployOptionsModal.vue?vue&type=style&index=0&id=d7fb3b54&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 \"d7fb3b54\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcDialog',{attrs:{\"open\":_vm.show,\"size\":\"normal\",\"name\":_vm.t('settings', 'Advanced deploy options')},on:{\"update:open\":function($event){return _vm.$emit('update:show', $event)}},scopedSlots:_vm._u([(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible) && _vm.configuredDeployOptions === null)?{key:\"actions\",fn:function(){return [_c('NcButton',{attrs:{\"title\":_vm.enableButtonTooltip,\"aria-label\":_vm.enableButtonTooltip,\"type\":\"primary\",\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading || !_vm.defaultDeployDaemonAccessible || _vm.isInitializing || _vm.isDeploying},on:{\"click\":function($event){$event.stopPropagation();return _vm.submitDeployOptions.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.enableButtonText)+\"\\n\\t\\t\")])]},proxy:true}:null],null,true)},[_c('div',{staticClass:\"modal__content\"},[_c('p',{staticClass:\"deploy-option__hint\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.configuredDeployOptions === null ? _vm.t('settings', 'Edit ExApp deploy options before installation') : _vm.t('settings', 'Configured ExApp deploy options. Can be set only during installation'))+\".\\n\\t\\t\\t\"),(_vm.deployOptionsDocsUrl)?_c('a',{attrs:{\"href\":_vm.deployOptionsDocsUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Learn more'))+\"\\n\\t\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.environmentVariables.length > 0 || (_vm.configuredDeployOptions !== null && _vm.configuredDeployOptions.environment_variables.length > 0))?_c('h3',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Environment variables'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.configuredDeployOptions === null)?_vm._l((_vm.environmentVariables),function(envVar){return _c('div',{key:envVar.envName,staticClass:\"deploy-option\"},[_c('NcTextField',{attrs:{\"label\":envVar.displayName,\"value\":_vm.deployOptions.environment_variables[envVar.envName]},on:{\"update:value\":function($event){return _vm.$set(_vm.deployOptions.environment_variables, envVar.envName, $event)}}}),_vm._v(\" \"),_c('p',{staticClass:\"deploy-option__hint\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(envVar.description)+\"\\n\\t\\t\\t\\t\")])],1)}):(Object.keys(_vm.configuredDeployOptions).length > 0)?_c('fieldset',{staticClass:\"envs\"},[_c('legend',{staticClass:\"deploy-option__hint\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'ExApp container environment variables'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_vm._l((_vm.configuredDeployOptions.environment_variables),function(value,key){return _c('NcTextField',{key:key,attrs:{\"label\":value.displayName ?? key,\"helper-text\":value.description,\"value\":value.value,\"readonly\":\"\"}})})],2):[_c('p',{staticClass:\"deploy-option__hint\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'No environment variables defined'))+\"\\n\\t\\t\\t\")])],_vm._v(\" \"),_c('h3',[_vm._v(_vm._s(_vm.t('settings', 'Mounts')))]),_vm._v(\" \"),(_vm.configuredDeployOptions === null)?[_c('p',{staticClass:\"deploy-option__hint\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Define host folder mounts to bind to the ExApp container'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('NcNoteCard',{attrs:{\"type\":\"info\",\"text\":_vm.t('settings', 'Must exist on the Deploy daemon host prior to installing the ExApp')}}),_vm._v(\" \"),_vm._l((_vm.deployOptions.mounts),function(mount){return _c('div',{key:mount.hostPath,staticClass:\"deploy-option\",staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"justify-content\":\"space-between\",\"flex-direction\":\"row\"}},[_c('NcTextField',{attrs:{\"label\":_vm.t('settings', 'Host path'),\"value\":mount.hostPath},on:{\"update:value\":function($event){return _vm.$set(mount, \"hostPath\", $event)}}}),_vm._v(\" \"),_c('NcTextField',{attrs:{\"label\":_vm.t('settings', 'Container path'),\"value\":mount.containerPath},on:{\"update:value\":function($event){return _vm.$set(mount, \"containerPath\", $event)}}}),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":mount.readonly},on:{\"update:checked\":function($event){return _vm.$set(mount, \"readonly\", $event)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Read-only'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{staticStyle:{\"margin-top\":\"6px\"},attrs:{\"aria-label\":_vm.t('settings', 'Remove mount')},on:{\"click\":function($event){return _vm.removeMount(mount)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiDeleteOutline}})]},proxy:true}],null,true)})],1)}),_vm._v(\" \"),(_vm.addingMount)?_c('div',{staticClass:\"deploy-option\"},[_c('h4',[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'New mount'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"justify-content\":\"space-between\",\"flex-direction\":\"row\"}},[_c('NcTextField',{ref:\"newMountHostPath\",attrs:{\"label\":_vm.t('settings', 'Host path'),\"aria-label\":_vm.t('settings', 'Enter path to host folder'),\"value\":_vm.newMountPoint.hostPath},on:{\"update:value\":function($event){return _vm.$set(_vm.newMountPoint, \"hostPath\", $event)}}}),_vm._v(\" \"),_c('NcTextField',{attrs:{\"label\":_vm.t('settings', 'Container path'),\"aria-label\":_vm.t('settings', 'Enter path to container folder'),\"value\":_vm.newMountPoint.containerPath},on:{\"update:value\":function($event){return _vm.$set(_vm.newMountPoint, \"containerPath\", $event)}}}),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.newMountPoint.readonly,\"aria-label\":_vm.t('settings', 'Toggle read-only mode')},on:{\"update:checked\":function($event){return _vm.$set(_vm.newMountPoint, \"readonly\", $event)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Read-only'))+\"\\n\\t\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"margin-top\":\"4px\"}},[_c('NcButton',{attrs:{\"aria-label\":_vm.t('settings', 'Confirm adding new mount')},on:{\"click\":_vm.addMountPoint},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiCheck}})]},proxy:true}],null,false,1018299955)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Confirm'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcButton',{staticStyle:{\"margin-left\":\"4px\"},attrs:{\"aria-label\":_vm.t('settings', 'Cancel adding mount')},on:{\"click\":_vm.cancelAddMountPoint},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiClose}})]},proxy:true}],null,false,2764082467)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Cancel'))+\"\\n\\t\\t\\t\\t\\t\")])],1)]):_vm._e(),_vm._v(\" \"),(!_vm.addingMount)?_c('NcButton',{staticStyle:{\"margin-top\":\"5px\"},attrs:{\"aria-label\":_vm.t('settings', 'Add mount')},on:{\"click\":_vm.startAddingMount},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('NcIconSvgWrapper',{attrs:{\"path\":_vm.mdiPlus}})]},proxy:true}],null,false,103601839)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add mount'))+\"\\n\\t\\t\\t\")]):_vm._e()]:(_vm.configuredDeployOptions.mounts.length > 0)?[_c('p',{staticClass:\"deploy-option__hint\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'ExApp container mounts'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_vm._l((_vm.configuredDeployOptions.mounts),function(mount){return _c('div',{key:mount.hostPath,staticClass:\"deploy-option\",staticStyle:{\"display\":\"flex\",\"align-items\":\"center\",\"justify-content\":\"space-between\",\"flex-direction\":\"row\"}},[_c('NcTextField',{attrs:{\"label\":_vm.t('settings', 'Host path'),\"value\":mount.hostPath,\"readonly\":\"\"},on:{\"update:value\":function($event){return _vm.$set(mount, \"hostPath\", $event)}}}),_vm._v(\" \"),_c('NcTextField',{attrs:{\"label\":_vm.t('settings', 'Container path'),\"value\":mount.containerPath,\"readonly\":\"\"},on:{\"update:value\":function($event){return _vm.$set(mount, \"containerPath\", $event)}}}),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":mount.readonly,\"disabled\":\"\"},on:{\"update:checked\":function($event){return _vm.$set(mount, \"readonly\", $event)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Read-only'))+\"\\n\\t\\t\\t\\t\")])],1)})]:_c('p',{staticClass:\"deploy-option__hint\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'No mounts defined'))+\"\\n\\t\\t\")])],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\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=\"mdiTextBoxOutline\" />\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 || isManualInstall\"\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, removeData)\">\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=\"disableButtonText\"\n\t\t\t\t\t\t:disabled=\"installing || isLoading || isInitializing || isDeploying\"\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 || !defaultDeployDaemonAccessible || isInitializing || isDeploying\"\n\t\t\t\t\t\t@click=\"enableButtonAction\">\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\t<NcButton v-if=\"app?.app_api && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Advanced deploy options')\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t@click=\"() => showDeployOptionsModal = true\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiToyBrickPlusOutline\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('settings', 'Deploy options') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<p v-if=\"!defaultDeployDaemonAccessible\" class=\"warning\">\n\t\t\t\t\t{{ t('settings', 'Default Deploy daemon is not accessible') }}\n\t\t\t\t</p>\n\t\t\t\t<NcCheckboxRadioSwitch v-if=\"app.canUnInstall\"\n\t\t\t\t\t:checked=\"removeData\"\n\t\t\t\t\t:disabled=\"installing || isLoading || !defaultDeployDaemonAccessible\"\n\t\t\t\t\t@update:checked=\"toggleRemoveData\">\n\t\t\t\t\t{{ t('settings', 'Delete data on remove') }}\n\t\t\t\t</NcCheckboxRadioSwitch>\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 && !app.shipped\" 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=\"mdiBugOutline\" />\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=\"mdiFeatureSearchOutline\" />\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=\"mdiTooltipQuestionOutline\" />\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\n\t\t\t<AppDeployOptionsModal v-if=\"app?.app_api\"\n\t\t\t\t:show.sync=\"showDeployOptionsModal\"\n\t\t\t\t:app=\"app\" />\n\t\t\t<DaemonSelectionDialog v-if=\"app?.app_api\"\n\t\t\t\t:show.sync=\"showSelectDaemonModal\"\n\t\t\t\t:app=\"app\"\n\t\t\t\t:deploy-options=\"deployOptions\" />\n\t\t</div>\n\t</NcAppSidebarTab>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport NcAppSidebarTab from '@nextcloud/vue/components/NcAppSidebarTab'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcDateTime from '@nextcloud/vue/components/NcDateTime'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport NcSelect from '@nextcloud/vue/components/NcSelect'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport AppDeployOptionsModal from './AppDeployOptionsModal.vue'\nimport DaemonSelectionDialog from '../AppAPI/DaemonSelectionDialog.vue'\n\nimport AppManagement from '../../mixins/AppManagement.js'\nimport { mdiBugOutline, mdiFeatureSearchOutline, mdiStar, mdiTextBoxOutline, mdiTooltipQuestionOutline, mdiToyBrickPlusOutline } from '@mdi/js'\nimport { useAppsStore } from '../../store/apps-store'\nimport { useAppApiStore } from '../../store/app-api-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\tNcCheckboxRadioSwitch,\n\t\tAppDeployOptionsModal,\n\t\tDaemonSelectionDialog,\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\t\tconst appApiStore = useAppApiStore()\n\n\t\treturn {\n\t\t\tstore,\n\t\t\tappApiStore,\n\n\t\t\tmdiBugOutline,\n\t\t\tmdiFeatureSearchOutline,\n\t\t\tmdiStar,\n\t\t\tmdiTextBoxOutline,\n\t\t\tmdiTooltipQuestionOutline,\n\t\t\tmdiToyBrickPlusOutline,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t\tremoveData: false,\n\t\t\tshowDeployOptionsModal: false,\n\t\t\tshowSelectDaemonModal: false,\n\t\t\tdeployOptions: null,\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\twatch: {\n\t\t'app.id'() {\n\t\t\tthis.removeData = false\n\t\t},\n\t},\n\tbeforeUnmount() {\n\t\tthis.deployOptions = null\n\t\tunsubscribe('showDaemonSelectionModal')\n\t},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t\tsubscribe('showDaemonSelectionModal', (deployOptions) => {\n\t\t\tthis.showSelectionModal(deployOptions)\n\t\t})\n\t},\n\tmethods: {\n\t\ttoggleRemoveData() {\n\t\t\tthis.removeData = !this.removeData\n\t\t},\n\t\tshowSelectionModal(deployOptions = null) {\n\t\t\tthis.deployOptions = deployOptions\n\t\t\tthis.showSelectDaemonModal = true\n\t\t},\n\t\tasync enableButtonAction() {\n\t\t\tif (!this.app?.app_api) {\n\t\t\t\tthis.enable(this.app.id)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tawait this.appApiStore.fetchDockerDaemons()\n\t\t\tif (this.appApiStore.dockerDaemons.length === 1 && this.app.needsDownload) {\n\t\t\t\tthis.enable(this.app.id, this.appApiStore.dockerDaemons[0])\n\t\t\t} else if (this.app.needsDownload) {\n\t\t\t\tthis.showSelectionModal()\n\t\t\t} else {\n\t\t\t\tthis.enable(this.app.id, this.app.daemon)\n\t\t\t}\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\talign-items: center;\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\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=5148f46c&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/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=5148f46c&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=5148f46c&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=5148f46c&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 \"5148f46c\",\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=1114c30b&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/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=1114c30b&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=1114c30b&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=1114c30b&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 \"1114c30b\",\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!./AppDeployDaemonTab.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!./AppDeployDaemonTab.vue?vue&type=script&setup=true&lang=ts\"","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_vm.app?.daemon)?_c(_setup.NcAppSidebarTab,{attrs:{\"id\":\"daemon\",\"name\":_vm.t('settings', 'Daemon'),\"order\":3},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiFileChart,\"size\":24}})]},proxy:true}],null,false,1746493066)},[_vm._v(\" \"),_c('div',{staticClass:\"daemon\"},[_c('h4',[_vm._v(_vm._s(_vm.t('settings', 'Deploy Daemon')))]),_vm._v(\" \"),_c('p',[_c('b',[_vm._v(_vm._s(_vm.t('settings', 'Type')))]),_vm._v(\": \"+_vm._s(_vm.app?.daemon.accepts_deploy_id))]),_vm._v(\" \"),_c('p',[_c('b',[_vm._v(_vm._s(_vm.t('settings', 'Name')))]),_vm._v(\": \"+_vm._s(_vm.app?.daemon.name))]),_vm._v(\" \"),_c('p',[_c('b',[_vm._v(_vm._s(_vm.t('settings', 'Display Name')))]),_vm._v(\": \"+_vm._s(_vm.app?.daemon.display_name))]),_vm._v(\" \"),_c('p',[_c('b',[_vm._v(_vm._s(_vm.t('settings', 'GPUs support')))]),_vm._v(\": \"+_vm._s(_setup.gpuSupport))]),_vm._v(\" \"),_c('p',[_c('b',[_vm._v(_vm._s(_vm.t('settings', 'Compute device')))]),_vm._v(\": \"+_vm._s(_vm.app?.daemon?.deploy_config?.computeDevice?.label))])])]):_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!./AppDeployDaemonTab.vue?vue&type=style&index=0&id=e726cadc&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDeployDaemonTab.vue?vue&type=style&index=0&id=e726cadc&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDeployDaemonTab.vue?vue&type=template&id=e726cadc&scoped=true\"\nimport script from \"./AppDeployDaemonTab.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppDeployDaemonTab.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppDeployDaemonTab.vue?vue&type=style&index=0&id=e726cadc&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 \"e726cadc\",\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 (_vm.daemon)?_c('span',{staticClass:\"app-daemon-badge\",attrs:{\"title\":_vm.daemon.name}},[_c(_setup.NcIconSvgWrapper,{attrs:{\"path\":_setup.mdiFileChart,\"size\":20,\"inline\":\"\"}}),_vm._v(\"\\n\\t\"+_vm._s(_vm.daemon.display_name)+\"\\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!./AppDaemonBadge.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!./AppDaemonBadge.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!./AppDaemonBadge.vue?vue&type=style&index=0&id=0698b3b8&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDaemonBadge.vue?vue&type=style&index=0&id=0698b3b8&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDaemonBadge.vue?vue&type=template&id=0698b3b8&scoped=true\"\nimport script from \"./AppDaemonBadge.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppDaemonBadge.vue?vue&type=script&setup=true&lang=ts\"\nimport style0 from \"./AppDaemonBadge.vue?vue&type=style&index=0&id=0698b3b8&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 \"0698b3b8\",\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, mdiCogOutline } 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 let path;\n if (app.value?.app_api) {\n // Use different default icon for ExApps (AppAPI)\n path = mdiCogOutline;\n }\n else {\n path = [app.value?.category ?? []].flat()\n .map((name) => AppstoreCategoryIcons[name])\n .filter((icon) => !!icon)\n .at(0)\n ?? (!app.value?.app_api ? mdiCog : mdiCogOutline);\n }\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=ffae2952&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/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=ffae2952&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=ffae2952&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=ffae2952&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 \"ffae2952\",\n null\n \n)\n\nexport default component.exports","// 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, `.daemon[data-v-e726cadc]{padding:20px}.daemon h4[data-v-e726cadc]{font-weight:bold;margin:10px auto}`, \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppStoreSidebar/AppDeployDaemonTab.vue\"],\"names\":[],\"mappings\":\"AACA,yBACE,YAAA,CAEA,4BACE,gBAAA,CACA,gBAAA\",\"sourcesContent\":[\"\\n.daemon {\\n padding: 20px;\\n\\n h4 {\\n font-weight: bold;\\n margin: 10px auto;\\n }\\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(_setup.NcDialog,{attrs:{\"open\":_vm.show,\"name\":_vm.t('settings', 'Choose Deploy Daemon for {appName}', {appName: _vm.app.name }),\"size\":\"normal\"},on:{\"update:open\":_setup.closeModal}},[_c(_setup.DaemonSelectionList,{attrs:{\"app\":_vm.app,\"deploy-options\":_vm.deployOptions},on:{\"close\":_setup.closeModal}})],1)\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 format-list-bulleted-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=\"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FormatListBulletedIcon\",\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!./FormatListBulleted.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./FormatListBulleted.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FormatListBulleted.vue?vue&type=template&id=5c444520\"\nimport script from \"./FormatListBulleted.vue?vue&type=script&lang=js\"\nexport * from \"./FormatListBulleted.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 format-list-bulleted-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\":\"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcListItem',{attrs:{\"name\":_vm.itemTitle,\"details\":_vm.isDefault ? _vm.t('settings', 'Default') : '',\"force-display-actions\":true,\"counter-number\":_vm.daemon.exAppsCount,\"active\":_vm.isDefault,\"counter-type\":\"highlighted\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.selectDaemonAndInstall.apply(null, arguments)}},scopedSlots:_vm._u([{key:\"subname\",fn:function(){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.daemon.accepts_deploy_id)+\"\\n\\t\")]},proxy:true}])})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<NcListItem :name=\"itemTitle\"\n\t\t:details=\"isDefault ? t('settings', 'Default') : ''\"\n\t\t:force-display-actions=\"true\"\n\t\t:counter-number=\"daemon.exAppsCount\"\n\t\t:active=\"isDefault\"\n\t\tcounter-type=\"highlighted\"\n\t\t@click.stop=\"selectDaemonAndInstall\">\n\t\t<template #subname>\n\t\t\t{{ daemon.accepts_deploy_id }}\n\t\t</template>\n\t</NcListItem>\n</template>\n\n<script>\nimport NcListItem from '@nextcloud/vue/components/NcListItem'\nimport AppManagement from '../../mixins/AppManagement.js'\nimport { useAppsStore } from '../../store/apps-store'\nimport { useAppApiStore } from '../../store/app-api-store'\n\nexport default {\n\tname: 'DaemonSelectionEntry',\n\tcomponents: {\n\t\tNcListItem,\n\t},\n\tmixins: [AppManagement], // TODO: Convert to Composition API when AppManagement is refactored\n\tprops: {\n\t\tdaemon: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tisDefault: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tdeployOptions: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tsetup() {\n\t\tconst store = useAppsStore()\n\t\tconst appApiStore = useAppApiStore()\n\n\t\treturn {\n\t\t\tstore,\n\t\t\tappApiStore,\n\t\t}\n\t},\n\tcomputed: {\n\t\titemTitle() {\n\t\t\treturn this.daemon.name + ' - ' + this.daemon.display_name\n\t\t},\n\t\tdaemons() {\n\t\t\treturn this.appApiStore.dockerDaemons\n\t\t},\n\t},\n\tmethods: {\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\tselectDaemonAndInstall() {\n\t\t\tthis.closeModal()\n\t\t\tthis.enable(this.app.id, this.daemon, this.deployOptions)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DaemonSelectionEntry.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!./DaemonSelectionEntry.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DaemonSelectionEntry.vue?vue&type=template&id=3834d8ce\"\nimport script from \"./DaemonSelectionEntry.vue?vue&type=script&lang=js\"\nexport * from \"./DaemonSelectionEntry.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DaemonSelectionList.vue?vue&type=script&setup=true&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DaemonSelectionList.vue?vue&type=script&setup=true&lang=js\"","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<div class=\"daemon-selection-list\">\n\t\t<ul v-if=\"dockerDaemons.length > 0\"\n\t\t\t:aria-label=\"t('settings', 'Registered Deploy daemons list')\">\n\t\t\t<DaemonSelectionEntry v-for=\"daemon in dockerDaemons\"\n\t\t\t\t:key=\"daemon.id\"\n\t\t\t\t:daemon=\"daemon\"\n\t\t\t\t:is-default=\"defaultDaemon.name === daemon.name\"\n\t\t\t\t:app=\"app\"\n\t\t\t\t:deploy-options=\"deployOptions\"\n\t\t\t\t@close=\"closeModal\" />\n\t\t</ul>\n\t\t<NcEmptyContent v-else\n\t\t\tclass=\"daemon-selection-list__empty-content\"\n\t\t\t:name=\"t('settings', 'No Deploy daemons configured')\"\n\t\t\t:description=\"t('settings', 'Register a custom one or setup from available templates')\">\n\t\t\t<template #icon>\n\t\t\t\t<FormatListBullet :size=\"20\" />\n\t\t\t</template>\n\t\t\t<template #action>\n\t\t\t\t<NcButton :href=\"appApiAdminPage\">\n\t\t\t\t\t{{ t('settings', 'Manage Deploy daemons') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script setup>\nimport { computed, defineProps } from 'vue'\nimport { generateUrl } from '@nextcloud/router'\n\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport FormatListBullet from 'vue-material-design-icons/FormatListBulleted.vue'\nimport DaemonSelectionEntry from './DaemonSelectionEntry.vue'\nimport { useAppApiStore } from '../../store/app-api-store.ts'\n\ndefineProps({\n\tapp: {\n\t\ttype: Object,\n\t\trequired: true,\n\t},\n\tdeployOptions: {\n\t\ttype: Object,\n\t\trequired: false,\n\t\tdefault: () => ({}),\n\t},\n})\n\nconst appApiStore = useAppApiStore()\n\nconst dockerDaemons = computed(() => appApiStore.dockerDaemons)\nconst defaultDaemon = computed(() => appApiStore.defaultDaemon)\nconst appApiAdminPage = computed(() => generateUrl('/settings/admin/app_api'))\nconst emit = defineEmits(['close'])\nconst closeModal = () => {\n\temit('close')\n}\n</script>\n\n<style scoped lang=\"scss\">\n.daemon-selection-list {\n\tmax-height: 350px;\n\toverflow-y: scroll;\n\tpadding: 2rem;\n\n\t&__empty-content {\n\t\tmargin-top: 0;\n\t\ttext-align: center;\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!./DaemonSelectionList.vue?vue&type=style&index=0&id=07c487de&prod&scoped=true&lang=scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/sass-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DaemonSelectionList.vue?vue&type=style&index=0&id=07c487de&prod&scoped=true&lang=scss\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./DaemonSelectionList.vue?vue&type=template&id=07c487de&scoped=true\"\nimport script from \"./DaemonSelectionList.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./DaemonSelectionList.vue?vue&type=script&setup=true&lang=js\"\nimport style0 from \"./DaemonSelectionList.vue?vue&type=style&index=0&id=07c487de&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 \"07c487de\",\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('div',{staticClass:\"daemon-selection-list\"},[(_setup.dockerDaemons.length > 0)?_c('ul',{attrs:{\"aria-label\":_vm.t('settings', 'Registered Deploy daemons list')}},_vm._l((_setup.dockerDaemons),function(daemon){return _c(_setup.DaemonSelectionEntry,{key:daemon.id,attrs:{\"daemon\":daemon,\"is-default\":_setup.defaultDaemon.name === daemon.name,\"app\":_vm.app,\"deploy-options\":_vm.deployOptions},on:{\"close\":_setup.closeModal}})}),1):_c(_setup.NcEmptyContent,{staticClass:\"daemon-selection-list__empty-content\",attrs:{\"name\":_vm.t('settings', 'No Deploy daemons configured'),\"description\":_vm.t('settings', 'Register a custom one or setup from available templates')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c(_setup.FormatListBullet,{attrs:{\"size\":20}})]},proxy:true},{key:\"action\",fn:function(){return [_c(_setup.NcButton,{attrs:{\"href\":_setup.appApiAdminPage}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Manage Deploy daemons'))+\"\\n\\t\\t\\t\")])]},proxy:true}])})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DaemonSelectionDialog.vue?vue&type=script&setup=true&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DaemonSelectionDialog.vue?vue&type=script&setup=true&lang=js\"","<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<NcDialog :open=\"show\"\n\t\t:name=\"t('settings', 'Choose Deploy Daemon for {appName}', {appName: app.name })\"\n\t\tsize=\"normal\"\n\t\t@update:open=\"closeModal\">\n\t\t<DaemonSelectionList :app=\"app\"\n\t\t\t:deploy-options=\"deployOptions\"\n\t\t\t@close=\"closeModal\" />\n\t</NcDialog>\n</template>\n\n<script setup>\nimport { defineProps, defineEmits } from 'vue'\nimport NcDialog from '@nextcloud/vue/components/NcDialog'\nimport DaemonSelectionList from './DaemonSelectionList.vue'\n\ndefineProps({\n\tshow: {\n\t\ttype: Boolean,\n\t\trequired: true,\n\t},\n\tapp: {\n\t\ttype: Object,\n\t\trequired: true,\n\t},\n\tdeployOptions: {\n\t\ttype: Object,\n\t\trequired: false,\n\t\tdefault: () => ({}),\n\t},\n})\n\nconst emit = defineEmits(['update:show'])\nconst closeModal = () => {\n\temit('update:show', false)\n}\n</script>\n","import { render, staticRenderFns } from \"./DaemonSelectionDialog.vue?vue&type=template&id=993019e6\"\nimport script from \"./DaemonSelectionDialog.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./DaemonSelectionDialog.vue?vue&type=script&setup=true&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_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=d9bfc6c8&prod&scoped=true&lang=css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../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=d9bfc6c8&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=d9bfc6c8&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=d9bfc6c8&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 \"d9bfc6c8\",\n null\n \n)\n\nexport default component.exports"],"names":["showApiError","showError","t","useAppsStore","defineStore","state","apps","categories","updateCount","loadState","loading","loadingList","gettingCategoriesPromise","actions","loadCategories","force","arguments","length","undefined","this","data","axios","get","generateUrl","category","icon","APPSTORE_CATEGORY_ICONS","id","$patch","error","logger","loadApps","getCategoryById","categoryId","find","_ref","getAppById","appId","_ref2","___CSS_LOADER_EXPORT___","push","module","generateOcsUrl","then","ocs","meta","statuscode","emit","window","dispatchEvent","Event","computed","appGroups","app","groups","map","group","name","installing","app_api","appApiStore","getLoading","$store","getters","isLoading","isInitializing","status","action","isDeploying","isManualInstall","daemon","accepts_deploy_id","updateButtonText","version","update","enableButtonText","progress","deploy","init","needsDownload","disableButtonText","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","defaultDeployDaemonAccessible","getDefaultDaemon","getDaemonAccessible","groupCheckedAppsData","mounted","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","canLimitToGroups","types","includes","addGroupLimitation","groupArray","pop","concat","removeGroupLimitation","currentGroups","index","indexOf","splice","forceEnable","forceEnableApp","rebuildNavigation","catch","response","enable","deployOptions","enableApp","disable","disableApp","remove","removeData","uninstallApp","install","updateApp","store","Math","max","Node","constructor","value","_defineProperty","_head","WeakMap","_tail","_size","Queue","_classPrivateFieldInitSpec","clear","enqueue","_this$size","node","_classPrivateFieldGet","next","_classPrivateFieldSet","dequeue","_this$size3","current","peek","size","Symbol","iterator","pLimit","concurrency","validateConcurrency","queue","activeCount","resumeNext","run","async","function_","resolve","arguments_","result","generator","_len","Array","_key","Promise","internalResolve","bind","Object","defineProperties","pendingCount","clearQueue","set","newConcurrency","queueMicrotask","Number","isInteger","POSITIVE_INFINITY","TypeError","components","AppItem","NcButton","mixins","AppManagement","props","type","String","required","setup","useAppApiStore","counter","filter","hasPendingUpdate","showUpdateAll","useListView","exApps","isAppApiEnabled","getAllApps","toLowerCase","sort","a","b","natSortDiff","OC","Util","naturalSortCompare","sortStringA","active","sortStringB","installed","bundles","level","appstore","getAppBundles","bundle","bundleApps","bundleIds","searchApps","_app","useAppStoreView","useBundleView","allBundlesEnabled","bundleToggleText","beforeDestroy","unsubscribe","setSearch","resetSearch","subscribe","toggleBundle","disableBundle","enableBundle","console","Notification","show","updateAll","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","_vm","_c","_self","attrs","staticClass","class","_v","_s","n","on","_e","key","_l","$event","parseApiResponse","element","appElement","date","Date","parse","expiryDate","Error","filterElements","now","_defineComponent","__name","__props","PostType","defineAsyncComponent","CarouselType","ShowcaseType","hasError","ref","elements","shuffleArray","array","i","j","floor","random","onBeforeMount","info","parsedElements","shuffledElements","order","Infinity","__sfc","getComponent","defineComponent","render","h","mdiEyeOffOutline","NcEmptyContent","NcIconSvgWrapper","NcLoadingIcon","_setup","_setupProxy","scopedSlots","_u","fn","proxy","entry","_b","tag","route","useRoute","currentCategory","params","appStoreLabel","viewLabel","APPS_SECTION_ENUM","displayName","watchEffect","document","title","instance","getCurrentInstance","shouldRefetchCategories","fetchAllApps","updateAppsStatus","onBeforeUnmount","clearInterval","getStatusUpdater","NcAppContent","AppList","AppStoreDiscoverSection","domProps","filterId","filterUrl","toString","substring","AppLevelBadge","AppScore","DaemonSelectionDialog","SvgFilterMixin","listView","Boolean","default","headers","inline","mdiCogOutline","isSelected","scrolled","screenshotLoaded","showSelectDaemonModal","hasRating","appstoreData","ratingNumOverall","dataItemTag","withSidebar","$route","shouldDisplayDefaultIcon","preview","watch","releases","screenshot","image","Image","onload","src","watchers","prefix","content","getDataItemHeaders","columnName","join","showSelectionModal","enableButtonAction","fetchDockerDaemons","dockerDaemons","staticStyle","appName","summary","score","stopPropagation","canUnInstall","canInstall","isCompatible","apply","statusUpdater","daemonAccessible","defaultDaemon","getUpdateCount","getAppStatus","getInitializingOrDeployingApps","appsApiFailure","message","isHTML","setLoading","Vue","setError","isArray","forEach","_id","confirmPassword","post","removable","update_required","showInfo","onClick","location","reload","close","setTimeout","api","fetchAppStatus","initializingOrDeployingApps","debug","hasOwn","daemons","default_daemon_config","setInterval","appstoreEnabled","developerDocsUrl","categoriesLoading","isSubscribed","NcAppNavigation","NcAppNavigationItem","NcAppNavigationSpacer","NcCounterBubble","discover","enabled","disabled","updates","supported","featured","isSupported","isFeatured","badgeIcon","mdiStarShootingOutline","mdiCheck","badgeText","badgeTitle","freeze","mdiStarCircleOutline","mdiAccountOutline","mdiClose","mdiArchiveOutline","mdiStar","mdiDownload","ai","mdiCreationOutline","auth","mdiKeyOutline","customization","dashboard","mdiViewColumnOutline","files","mdiFolder","games","mdiControllerClassicOutline","integration","mdiOpenInApp","monitoring","mdiMonitorEye","multimedia","mdiMultimedia","office","mdiFileDocumentEdit","organization","mdiOfficeBuildingOutline","mdiMagnify","security","mdiSecurity","social","mdiAccountMultipleOutline","tools","mdiTools","workflow","mdiClipboardFlowOutline","text","minHeading","renderMarkdown","renderer","marked","Renderer","link","prot","href","decodeURIComponent","unescape","replace","e","out","heading","depth","min","_ref3","blockquote","_ref4","dompurify","sanitize","trim","gfm","highlight","tables","breaks","pedantic","smartLists","smartypants","SAFE_FOR_JQUERY","ALLOWED_TAGS","mdiTextShort","NcAppSidebarTab","Markdown","description","NcDialog","NcTextField","NcNoteCard","NcCheckboxRadioSwitch","environmentVariables","environment_variables","reduce","acc","envVar","envName","mounts","mdiPlus","mdiDeleteOutline","addingMount","newMountPoint","hostPath","containerPath","readonly","addingPortBinding","configuredDeployOptions","deployOptionsDocsUrl","newShow","fetchExAppDeployOptions","startAddingMount","$nextTick","$refs","newMountHostPath","focus","addMountPoint","cancelAddMountPoint","removeMount","mountToRemove","mount","submitDeployOptions","$emit","$set","keys","NcDateTime","NcSelect","AppDeployOptionsModal","mdiBugOutline","mdiFeatureSearchOutline","mdiTextBoxOutline","mdiTooltipQuestionOutline","mdiToyBrickPlusOutline","showDeployOptionsModal","lastModified","at","appAuthors","warn","authorName","xmlNode","author","split","localeCompare","appstoreUrl","externalResources","resources","internal","label","website","documentation","user","admin","developer","appCategories","flat","rateAppUrl","getGroups","beforeUnmount","toggleRemoveData","directives","rawName","expression","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","click","missingMinOwnCloudVersion","missingMaxOwnCloudVersion","missingDependencies","dep","shipped","resource","bugs","discussion","hasChangelog","values","translations","some","changelog","createChangelogFromRelease","release","getLanguage","en","mdiClockFast","gpuSupport","deploy_config","computeDevice","mdiFileChart","display_name","router","useRouter","legacyStore","useStore","exApp","rating","ratingNumRecent","ratingRecent","ratingOverall","showSidebar","appIcon","categoryIcon","path","AppstoreCategoryIcons","mdiCog","fetch","blob","rawSvg","replaceAll","useAppIcon","licenseText","license","licence","toUpperCase","activeTab","hasScreenshot","loadScreenshot","onMounted","hideAppDetails","NcAppSidebar","AppDescriptionTab","AppDetailsTab","AppReleasesTab","AppDeployDaemonTab","AppDaemonBadge","emits","fillColor","$attrs","NcListItem","isDefault","itemTitle","closeModal","selectDaemonAndInstall","exAppsCount","appApiAdminPage","DaemonSelectionEntry","FormatListBullet","DaemonSelectionList","mdiStarHalfFull","mdiStarOutline","appScore","toFixed","fullStars","emptyStars","hasHalfStar"],"sourceRoot":""} \ No newline at end of file