{"version":3,"file":"vue-2.js?v=71b1f9cb73b6f972a0fe","sources":["webpack:///./apps/settings/src/components/AppDetails.vue","webpack:///./apps/settings/src/components/AppDetails.vue?0b0a","webpack:///./apps/settings/src/components/AppDetails.vue?668f","webpack:///./apps/settings/src/components/AppDetails.vue?baba","webpack:///./apps/settings/src/components/AppList.vue","webpack:///./apps/settings/src/components/AppList.vue?ff65","webpack:///./apps/settings/src/components/AppList.vue?f224","webpack:///./apps/settings/src/components/AppList/AppItem.vue","webpack:///./apps/settings/src/components/AppList/AppItem.vue?6d51","webpack:///./apps/settings/src/components/AppList/AppItem.vue?f6ef","webpack:///./apps/settings/src/components/AppList/AppItem.vue?3e9c","webpack:///./apps/settings/src/components/AppList/AppScore.vue","webpack:///./apps/settings/src/components/AppList/AppScore.vue?5862","webpack:///./apps/settings/src/components/AppList/AppScore.vue?8472","webpack:///./apps/settings/src/components/AppManagement.vue","webpack:///./apps/settings/src/components/AppManagement.vue?9197","webpack:///./apps/settings/src/components/PrefixMixin.vue","webpack:///./apps/settings/src/components/PrefixMixin.vue?4fe7","webpack:///./apps/settings/src/components/SvgFilterMixin.vue","webpack:///./apps/settings/src/components/SvgFilterMixin.vue?0fa6","webpack:///./apps/settings/src/views/Apps.vue","webpack:///./apps/settings/src/views/Apps.vue?53fc","webpack:///./apps/settings/src/views/Apps.vue?04ea","webpack:///./apps/settings/src/components/AppDetails.vue?56e1","webpack:///./apps/settings/src/components/AppList.vue?150c","webpack:///./apps/settings/src/components/AppList/AppItem.vue?39d2","webpack:///./apps/settings/src/components/AppList/AppScore.vue?f088","webpack:///./apps/settings/src/components/AppManagement.vue?efce","webpack:///./apps/settings/src/components/PrefixMixin.vue?5c9b","webpack:///./apps/settings/src/components/SvgFilterMixin.vue?e5f1","webpack:///./apps/settings/src/views/Apps.vue?8d72","webpack:///./apps/settings/src/components/AppDetails.vue?9b6d","webpack:///./apps/settings/src/components/AppList/AppItem.vue?5906","webpack:///./apps/settings/src/components/AppDetails.vue?32dc","webpack:///./apps/settings/src/components/AppList.vue?68f1","webpack:///./apps/settings/src/components/AppList/AppItem.vue?9b42","webpack:///./apps/settings/src/components/AppList/AppScore.vue?2fd1","webpack:///./apps/settings/src/views/Apps.vue?b71b","webpack:///./apps/settings/src/components/AppDetails.vue?1f94","webpack:///./apps/settings/src/components/AppList/AppItem.vue?c33e"],"sourcesContent":["import { render, staticRenderFns } from \"./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&\"\nimport script from \"./AppDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./AppDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppDetails.vue?vue&type=style&index=0&id=59a92e62&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 \"59a92e62\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('59a92e62')) {\n api.createRecord('59a92e62', component.options)\n } else {\n api.reload('59a92e62', component.options)\n }\n module.hot.accept(\"./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&\", function () {\n api.rerender('59a92e62', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppDetails.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.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!./AppDetails.vue?vue&type=script&lang=js&\"","import mod from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./AppDetails.vue?vue&type=style&index=0&id=59a92e62&scoped=true&lang=css&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=template&id=59a92e62&scoped=true&\"","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=6d1e92a4&\"\nimport script from \"./AppList.vue?vue&type=script&lang=js&\"\nexport * from \"./AppList.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('6d1e92a4')) {\n api.createRecord('6d1e92a4', component.options)\n } else {\n api.reload('6d1e92a4', component.options)\n }\n module.hot.accept(\"./AppList.vue?vue&type=template&id=6d1e92a4&\", function () {\n api.rerender('6d1e92a4', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppList.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=template&id=6d1e92a4&\"","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=429da85a&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=429da85a&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 \"429da85a\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('429da85a')) {\n api.createRecord('429da85a', component.options)\n } else {\n api.reload('429da85a', component.options)\n }\n module.hot.accept(\"./AppItem.vue?vue&type=template&id=429da85a&scoped=true&\", function () {\n api.rerender('429da85a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppList/AppItem.vue\"\nexport default component.exports","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&\"","import mod from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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!./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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!./AppItem.vue?vue&type=style&index=0&id=429da85a&scoped=true&lang=css&\"","export * from \"-!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=template&id=429da85a&scoped=true&\"","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=0ecce4fc&\"\nimport script from \"./AppScore.vue?vue&type=script&lang=js&\"\nexport * from \"./AppScore.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('0ecce4fc')) {\n api.createRecord('0ecce4fc', component.options)\n } else {\n api.reload('0ecce4fc', component.options)\n }\n module.hot.accept(\"./AppScore.vue?vue&type=template&id=0ecce4fc&\", function () {\n api.rerender('0ecce4fc', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppList/AppScore.vue\"\nexport default component.exports","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.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!./AppScore.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=template&id=0ecce4fc&\"","var render, staticRenderFns\nimport script from \"./AppManagement.vue?vue&type=script&lang=js&\"\nexport * from \"./AppManagement.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3d572c5a')) {\n api.createRecord('3d572c5a', component.options)\n } else {\n api.reload('3d572c5a', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"apps/settings/src/components/AppManagement.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppManagement.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!./AppManagement.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./PrefixMixin.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('b4ed0c44')) {\n api.createRecord('b4ed0c44', component.options)\n } else {\n api.reload('b4ed0c44', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"apps/settings/src/components/PrefixMixin.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrefixMixin.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!./PrefixMixin.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('9219d434')) {\n api.createRecord('9219d434', component.options)\n } else {\n api.reload('9219d434', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"apps/settings/src/components/SvgFilterMixin.vue\"\nexport default component.exports","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&\"","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=d3714d0a&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('d3714d0a')) {\n api.createRecord('d3714d0a', component.options)\n } else {\n api.reload('d3714d0a', component.options)\n }\n module.hot.accept(\"./Apps.vue?vue&type=template&id=d3714d0a&\", function () {\n api.rerender('d3714d0a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"apps/settings/src/views/Apps.vue\"\nexport default component.exports","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.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!./Apps.vue?vue&type=script&lang=js&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=template&id=d3714d0a&\"","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { Multiselect } from '@nextcloud/vue';\nimport marked from 'marked';\nimport dompurify from 'dompurify';\nimport AppScore from './AppList/AppScore';\nimport AppManagement from './AppManagement';\nimport PrefixMixin from './PrefixMixin';\nimport SvgFilterMixin from './SvgFilterMixin';\nexport default {\n name: 'AppDetails',\n components: {\n Multiselect: Multiselect,\n AppScore: AppScore\n },\n mixins: [AppManagement, PrefixMixin, SvgFilterMixin],\n props: ['category', 'app'],\n data: function data() {\n return {\n groupCheckedAppsData: false\n };\n },\n computed: {\n appstoreUrl: function appstoreUrl() {\n return \"https://apps.nextcloud.com/apps/\".concat(this.app.id);\n },\n licence: function licence() {\n if (this.app.licence) {\n return t('settings', '{license}-licensed', {\n license: ('' + this.app.licence).toUpperCase()\n });\n }\n\n return null;\n },\n hasRating: function hasRating() {\n return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;\n },\n author: function author() {\n if (typeof this.app.author === 'string') {\n return [{\n '@value': this.app.author\n }];\n }\n\n if (this.app.author['@value']) {\n return [this.app.author];\n }\n\n return this.app.author;\n },\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n groups: function groups() {\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n },\n renderMarkdown: function renderMarkdown() {\n var renderer = new marked.Renderer();\n\n renderer.link = function (href, title, text) {\n var prot;\n\n try {\n prot = decodeURIComponent(unescape(href)).replace(/[^\\w:]/g, '').toLowerCase();\n } catch (e) {\n return '';\n }\n\n if (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n return '';\n }\n\n var out = '' + text + '';\n return out;\n };\n\n renderer.image = function (href, title, text) {\n if (text) {\n return text;\n }\n\n return title;\n };\n\n renderer.blockquote = function (quote) {\n return quote;\n };\n\n return dompurify.sanitize(marked(this.app.description.trim(), {\n renderer: renderer,\n gfm: false,\n highlight: false,\n tables: false,\n breaks: false,\n pedantic: false,\n sanitize: true,\n smartLists: true,\n smartypants: false\n }), {\n SAFE_FOR_JQUERY: true,\n ALLOWED_TAGS: ['strong', 'p', 'a', 'ul', 'ol', 'li', 'em', 'del', 'blockquote']\n });\n }\n },\n mounted: function mounted() {\n if (this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport AppItem from './AppList/AppItem';\nimport PrefixMixin from './PrefixMixin';\nimport pLimit from 'p-limit';\nexport default {\n name: 'AppList',\n components: {\n AppItem: AppItem\n },\n mixins: [PrefixMixin],\n props: ['category', 'app', 'search'],\n computed: {\n counter: function counter() {\n return this.apps.filter(function (app) {\n return app.update;\n }).length;\n },\n loading: function loading() {\n return this.$store.getters.loading('list');\n },\n hasPendingUpdate: function hasPendingUpdate() {\n return this.apps.filter(function (app) {\n return app.update;\n }).length > 1;\n },\n showUpdateAll: function showUpdateAll() {\n return this.hasPendingUpdate && ['installed', 'updates'].includes(this.category);\n },\n apps: function apps() {\n var _this = this;\n\n var apps = this.$store.getters.getAllApps.filter(function (app) {\n return app.name.toLowerCase().search(_this.search.toLowerCase()) !== -1;\n }).sort(function (a, b) {\n var sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name;\n var sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name;\n return OC.Util.naturalSortCompare(sortStringA, sortStringB);\n });\n\n if (this.category === 'installed') {\n return apps.filter(function (app) {\n return app.installed;\n });\n }\n\n if (this.category === 'enabled') {\n return apps.filter(function (app) {\n return app.active && app.installed;\n });\n }\n\n if (this.category === 'disabled') {\n return apps.filter(function (app) {\n return !app.active && app.installed;\n });\n }\n\n if (this.category === 'app-bundles') {\n return apps.filter(function (app) {\n return app.bundles;\n });\n }\n\n if (this.category === 'updates') {\n return apps.filter(function (app) {\n return app.update;\n });\n }\n\n if (this.category === 'featured') {\n return apps.filter(function (app) {\n return app.level === 200;\n });\n } // filter app store categories\n\n\n return apps.filter(function (app) {\n return app.appstore && app.category !== undefined && (app.category === _this.category || app.category.indexOf(_this.category) > -1);\n });\n },\n bundles: function bundles() {\n var _this2 = this;\n\n return this.$store.getters.getServerData.bundles.filter(function (bundle) {\n return _this2.bundleApps(bundle.id).length > 0;\n });\n },\n bundleApps: function bundleApps() {\n return function (bundle) {\n return this.$store.getters.getAllApps.filter(function (app) {\n return app.bundleIds !== undefined && app.bundleIds.includes(bundle);\n });\n };\n },\n searchApps: function searchApps() {\n var _this3 = this;\n\n if (this.search === '') {\n return [];\n }\n\n return this.$store.getters.getAllApps.filter(function (app) {\n if (app.name.toLowerCase().search(_this3.search.toLowerCase()) !== -1) {\n return !_this3.apps.find(function (_app) {\n return _app.id === app.id;\n });\n }\n\n return false;\n });\n },\n useAppStoreView: function useAppStoreView() {\n return !this.useListView && !this.useBundleView;\n },\n useListView: function useListView() {\n return this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured';\n },\n useBundleView: function useBundleView() {\n return this.category === 'app-bundles';\n },\n allBundlesEnabled: function allBundlesEnabled() {\n var self = this;\n return function (id) {\n return self.bundleApps(id).filter(function (app) {\n return !app.active;\n }).length === 0;\n };\n },\n bundleToggleText: function bundleToggleText() {\n var self = this;\n return function (id) {\n if (self.allBundlesEnabled(id)) {\n return t('settings', 'Disable all');\n }\n\n return t('settings', 'Enable all');\n };\n }\n },\n methods: {\n toggleBundle: function toggleBundle(id) {\n if (this.allBundlesEnabled(id)) {\n return this.disableBundle(id);\n }\n\n return this.enableBundle(id);\n },\n enableBundle: function enableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('enableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n console.error(error);\n OC.Notification.show(error);\n });\n },\n disableBundle: function disableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('disableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n updateAll: function updateAll() {\n var _this4 = this;\n\n var limit = pLimit(1);\n this.apps.filter(function (app) {\n return app.update;\n }).map(function (app) {\n return limit(function () {\n return _this4.$store.dispatch('updateApp', {\n appId: app.id\n });\n });\n });\n }\n }\n};","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport AppScore from './AppScore';\nimport AppManagement from '../AppManagement';\nimport SvgFilterMixin from '../SvgFilterMixin';\nexport default {\n name: 'AppItem',\n components: {\n AppScore: AppScore\n },\n mixins: [AppManagement, SvgFilterMixin],\n props: {\n app: {},\n category: {},\n listView: {\n type: Boolean,\n default: true\n }\n },\n data: function data() {\n return {\n isSelected: false,\n scrolled: false\n };\n },\n computed: {\n hasRating: function hasRating() {\n return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;\n }\n },\n watch: {\n '$route.params.id': function $routeParamsId(id) {\n this.isSelected = this.app.id === id;\n }\n },\n mounted: function mounted() {\n this.isSelected = this.app.id === this.$route.params.id;\n },\n watchers: {},\n methods: {\n showAppDetails: function () {\n var _showAppDetails = _asyncToGenerator(\n /*#__PURE__*/\n regeneratorRuntime.mark(function _callee(event) {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A')) {\n _context.next = 2;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 2:\n _context.prev = 2;\n _context.next = 5;\n return this.$router.push({\n name: 'apps-details',\n params: {\n category: this.category,\n id: this.app.id\n }\n });\n\n case 5:\n _context.next = 9;\n break;\n\n case 7:\n _context.prev = 7;\n _context.t0 = _context[\"catch\"](2);\n\n case 9:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[2, 7]]);\n }));\n\n function showAppDetails(_x) {\n return _showAppDetails.apply(this, arguments);\n }\n\n return showAppDetails;\n }(),\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'AppScore',\n props: ['score'],\n computed: {\n scoreImage: function scoreImage() {\n var score = Math.round(this.score * 10);\n var imageName = 'rating/s' + score + '.svg';\n return OC.imagePath('core', imageName);\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n computed: {\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n loading: function loading() {\n var self = this;\n return function (id) {\n return self.$store.getters.loading(id);\n };\n },\n installing: function installing() {\n return this.$store.getters.loading('install');\n },\n enableButtonText: function enableButtonText() {\n if (this.app.needsDownload) {\n return t('settings', 'Download and enable');\n }\n\n return t('settings', 'Enable');\n },\n forceEnableButtonText: function forceEnableButtonText() {\n if (this.app.needsDownload) {\n return t('settings', 'Enable untested app');\n }\n\n return t('settings', 'Enable untested app');\n },\n enableButtonTooltip: function enableButtonTooltip() {\n if (this.app.needsDownload) {\n return t('settings', 'The app will be downloaded from the app store');\n }\n\n return false;\n },\n forceEnableButtonTooltip: function forceEnableButtonTooltip() {\n var 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\n if (this.app.needsDownload) {\n return base + ' ' + t('settings', 'The app will be downloaded from the app store');\n }\n\n return base;\n }\n },\n mounted: function mounted() {\n if (this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n },\n methods: {\n asyncFindGroup: function asyncFindGroup(query) {\n return this.$store.dispatch('getGroups', {\n search: query,\n limit: 5,\n offset: 0\n });\n },\n isLimitedToGroups: function isLimitedToGroups(app) {\n if (this.app.groups.length || this.groupCheckedAppsData) {\n return true;\n }\n\n return false;\n },\n setGroupLimit: function setGroupLimit() {\n if (!this.groupCheckedAppsData) {\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: []\n });\n }\n },\n canLimitToGroups: function canLimitToGroups(app) {\n if (app.types && app.types.includes('filesystem') || app.types.includes('prelogin') || app.types.includes('authentication') || app.types.includes('logging') || app.types.includes('prevent_group_restriction')) {\n return false;\n }\n\n return true;\n },\n addGroupLimitation: function addGroupLimitation(group) {\n var groups = this.app.groups.concat([]).concat([group.id]);\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: groups\n });\n },\n removeGroupLimitation: function removeGroupLimitation(group) {\n var currentGroups = this.app.groups.concat([]);\n var index = currentGroups.indexOf(group.id);\n\n if (index > -1) {\n currentGroups.splice(index, 1);\n }\n\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: currentGroups\n });\n },\n forceEnable: function forceEnable(appId) {\n this.$store.dispatch('forceEnableApp', {\n appId: appId,\n groups: []\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n enable: function enable(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId,\n groups: []\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n disable: function disable(appId) {\n this.$store.dispatch('disableApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n remove: function remove(appId) {\n this.$store.dispatch('uninstallApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n install: function install(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n update: function update(appId) {\n this.$store.dispatch('updateApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'PrefixMixin',\n methods: {\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'SvgFilterMixin',\n data: function data() {\n return {\n filterId: ''\n };\n },\n computed: {\n filterUrl: function filterUrl() {\n return \"url(#\".concat(this.filterId, \")\");\n }\n },\n mounted: function mounted() {\n this.filterId = 'invertIconApps' + Math.floor(Math.random() * 100) + new Date().getSeconds() + new Date().getMilliseconds();\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent';\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation';\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter';\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem';\nimport AppNavigationSpacer from '@nextcloud/vue/dist/Components/AppNavigationSpacer';\nimport AppSidebar from '@nextcloud/vue/dist/Components/AppSidebar';\nimport Content from '@nextcloud/vue/dist/Components/Content';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport AppList from '../components/AppList';\nimport AppDetails from '../components/AppDetails';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Apps',\n components: {\n AppContent: AppContent,\n AppDetails: AppDetails,\n AppList: AppList,\n AppNavigation: AppNavigation,\n AppNavigationCounter: AppNavigationCounter,\n AppNavigationItem: AppNavigationItem,\n AppNavigationSpacer: AppNavigationSpacer,\n AppSidebar: AppSidebar,\n Content: Content\n },\n props: {\n category: {\n type: String,\n default: 'installed'\n },\n id: {\n type: String,\n default: ''\n }\n },\n data: function data() {\n return {\n searchQuery: ''\n };\n },\n computed: {\n loading: function loading() {\n return this.$store.getters.loading('categories');\n },\n loadingList: function loadingList() {\n return this.$store.getters.loading('list');\n },\n currentApp: function currentApp() {\n var _this = this;\n\n return this.apps.find(function (app) {\n return app.id === _this.id;\n });\n },\n categories: function categories() {\n return this.$store.getters.getCategories;\n },\n apps: function apps() {\n return this.$store.getters.getAllApps;\n },\n updateCount: function updateCount() {\n return this.$store.getters.getUpdateCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n }\n },\n watch: {\n category: function category(val, old) {\n this.setSearch('');\n }\n },\n beforeMount: function beforeMount() {\n this.$store.dispatch('getCategories');\n this.$store.dispatch('getAllApps');\n this.$store.dispatch('getGroups', {\n offset: 0,\n limit: 5\n });\n this.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount);\n },\n mounted: function mounted() {\n /**\n * Register search\n */\n this.appSearch = new OCA.Search(this.setSearch, this.resetSearch);\n },\n methods: {\n setSearch: function setSearch(query) {\n this.searchQuery = query;\n },\n resetSearch: function resetSearch() {\n this.setSearch('');\n },\n hideAppDetails: function hideAppDetails() {\n this.$router.push({\n name: 'apps-category',\n params: {\n category: this.category\n }\n });\n }\n }\n};","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.force[data-v-59a92e62] {\\n\\tbackground: var(--color-main-background);\\n\\tborder-color: var(--color-error);\\n\\tcolor: var(--color-error);\\n}\\n.force[data-v-59a92e62]:hover,\\n.force[data-v-59a92e62]:active {\\n\\tbackground: var(--color-error);\\n\\tborder-color: var(--color-error) !important;\\n\\tcolor: var(--color-main-background);\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.force[data-v-429da85a] {\\n\\tbackground: var(--color-main-background);\\n\\tborder-color: var(--color-error);\\n\\tcolor: var(--color-error);\\n}\\n.force[data-v-429da85a]:hover,\\n.force[data-v-429da85a]:active {\\n\\tbackground: var(--color-error);\\n\\tborder-color: var(--color-error) !important;\\n\\tcolor: var(--color-main-background);\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticStyle: { padding: \"20px\" }, attrs: { id: \"app-details-view\" } },\n [\n _c(\"h2\", [\n !_vm.app.preview\n ? _c(\"div\", { staticClass: \"icon-settings-dark\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.previewAsIcon && _vm.app.preview\n ? _c(\n \"svg\",\n { attrs: { width: \"32\", height: \"32\", viewBox: \"0 0 32 32\" } },\n [\n _c(\"defs\", [\n _c(\n \"filter\",\n { attrs: { id: _vm.filterId } },\n [\n _c(\"feColorMatrix\", {\n attrs: {\n in: \"SourceGraphic\",\n type: \"matrix\",\n values: \"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"image\", {\n staticClass: \"app-icon\",\n attrs: {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n preserveAspectRatio: \"xMinYMin meet\",\n filter: _vm.filterUrl,\n \"xlink:href\": _vm.app.preview\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.name) + \"\\n\\t\")\n ]),\n _vm._v(\" \"),\n _vm.app.screenshot\n ? _c(\"img\", { attrs: { src: _vm.app.screenshot, width: \"100%\" } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.level === 300 || _vm.app.level === 200 || _vm.hasRating\n ? _c(\n \"div\",\n { staticClass: \"app-level\" },\n [\n _vm.app.level === 300\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"This app is supported via your current Nextcloud subscription.\"\n ),\n expression:\n \"t('settings', 'This app is supported via your current Nextcloud subscription.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"supported icon-checkmark-color\"\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Supported\"))\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.level === 200\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"Featured apps are developed by and within the community. They offer central functionality and are ready for production use.\"\n ),\n expression:\n \"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"official icon-checkmark\"\n },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Featured\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasRating\n ? _c(\"AppScore\", {\n attrs: { score: _vm.app.appstoreData.ratingOverall }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.author\n ? _c(\n \"div\",\n { staticClass: \"app-author\" },\n [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.t(\"settings\", \"by\")) + \"\\n\\t\\t\"),\n _vm._l(_vm.author, function(a, index) {\n return _c(\"span\", { key: index }, [\n a[\"@attributes\"] && a[\"@attributes\"][\"homepage\"]\n ? _c(\n \"a\",\n { attrs: { href: a[\"@attributes\"][\"homepage\"] } },\n [_vm._v(_vm._s(a[\"@value\"]))]\n )\n : a[\"@value\"]\n ? _c(\"span\", [_vm._v(_vm._s(a[\"@value\"]))])\n : _c(\"span\", [_vm._v(_vm._s(a))]),\n index + 1 < _vm.author.length\n ? _c(\"span\", [_vm._v(\", \")])\n : _vm._e()\n ])\n })\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.licence\n ? _c(\"div\", { staticClass: \"app-licence\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.licence) + \"\\n\\t\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [\n _c(\"div\", { staticClass: \"actions-buttons\" }, [\n _vm.app.update\n ? _c(\"input\", {\n staticClass: \"update primary\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Update to {version}\", {\n version: _vm.app.update\n }),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.update(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.canUnInstall\n ? _c(\"input\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Remove\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.remove(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.active\n ? _c(\"input\", {\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Disable\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.disable(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible)\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.enableButtonTooltip,\n expression: \"enableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable primary\",\n attrs: {\n type: \"button\",\n value: _vm.enableButtonText,\n disabled:\n !_vm.app.canInstall ||\n _vm.installing ||\n _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.enable(_vm.app.id)\n }\n }\n })\n : !_vm.app.active\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.forceEnableButtonTooltip,\n expression: \"forceEnableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable force\",\n attrs: {\n type: \"button\",\n value: _vm.forceEnableButtonText,\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.forceEnable(_vm.app.id)\n }\n }\n })\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-groups\" }, [\n _vm.app.active && _vm.canLimitToGroups(_vm.app)\n ? _c(\n \"div\",\n { staticClass: \"groups-enable\" },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.groupCheckedAppsData,\n expression: \"groupCheckedAppsData\"\n }\n ],\n staticClass: \"groups-enable__checkbox checkbox\",\n attrs: {\n id: _vm.prefix(\"groups_enable\", _vm.app.id),\n type: \"checkbox\"\n },\n domProps: {\n value: _vm.app.id,\n checked: Array.isArray(_vm.groupCheckedAppsData)\n ? _vm._i(_vm.groupCheckedAppsData, _vm.app.id) > -1\n : _vm.groupCheckedAppsData\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.groupCheckedAppsData,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.app.id,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n (_vm.groupCheckedAppsData = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.groupCheckedAppsData = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.groupCheckedAppsData = $$c\n }\n },\n _vm.setGroupLimit\n ]\n }\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n { attrs: { for: _vm.prefix(\"groups_enable\", _vm.app.id) } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Limit to groups\")))]\n ),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"group_select\",\n attrs: {\n type: \"hidden\",\n title: _vm.t(\"settings\", \"All\"),\n value: \"\"\n }\n }),\n _vm._v(\" \"),\n _vm.isLimitedToGroups(_vm.app)\n ? _c(\n \"Multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.groups,\n value: _vm.appGroups,\n \"options-limit\": 5,\n placeholder: _vm.t(\n \"settings\",\n \"Limit app usage to groups\"\n ),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n \"close-on-select\": false,\n \"tag-width\": 60\n },\n on: {\n select: _vm.addGroupLimitation,\n remove: _vm.removeGroupLimitation,\n \"search-change\": _vm.asyncFindGroup\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n ])\n ]),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"app-dependencies\" }, [\n _vm.app.missingMinOwnCloudVersion\n ? _c(\"li\", [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app has no minimum Nextcloud version assigned. This will be an error in the future.\"\n )\n ) +\n \"\\n\\t\\t\"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.missingMaxOwnCloudVersion\n ? _c(\"li\", [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app has no maximum Nextcloud version assigned. This will be an error in the future.\"\n )\n ) +\n \"\\n\\t\\t\"\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.canInstall\n ? _c(\"li\", [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app cannot be installed because the following dependencies are not fulfilled:\"\n )\n ) +\n \"\\n\\t\\t\\t\"\n ),\n _c(\n \"ul\",\n { staticClass: \"missing-dependencies\" },\n _vm._l(_vm.app.missingDependencies, function(dep, index) {\n return _c(\"li\", { key: index }, [\n _vm._v(\"\\n\\t\\t\\t\\t\\t\" + _vm._s(dep) + \"\\n\\t\\t\\t\\t\")\n ])\n }),\n 0\n )\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"documentation\" }, [\n !_vm.app.internal\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.appstoreUrl,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"View in store\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.website\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.website,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Visit website\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.bugs\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.bugs,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Report a bug\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.user\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.user,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"User documentation\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.admin\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.admin,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Admin documentation\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.developer\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.developer,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [\n _vm._v(\n _vm._s(_vm.t(\"settings\", \"Developer documentation\")) + \" ↗\"\n )\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass: \"app-description\",\n domProps: { innerHTML: _vm._s(_vm.renderMarkdown) }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"app-content-inner\" } }, [\n _c(\n \"div\",\n {\n staticClass: \"apps-list\",\n class: {\n installed: _vm.useBundleView || _vm.useListView,\n store: _vm.useAppStoreView\n },\n attrs: { id: \"apps-list\" }\n },\n [\n _vm.useListView\n ? [\n _vm.showUpdateAll\n ? _c(\"div\", { staticClass: \"counter\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"settings\",\n \"{counter} apps have an update available\",\n { counter: _vm.counter }\n )\n ) +\n \"\\n\\t\\t\\t\\t\"\n ),\n _vm.showUpdateAll\n ? _c(\n \"button\",\n {\n staticClass: \"primary\",\n attrs: { id: \"app-list-update-all\" },\n on: { click: _vm.updateAll }\n },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\\t\" +\n _vm._s(_vm.t(\"settings\", \"Update all\")) +\n \"\\n\\t\\t\\t\\t\"\n )\n ]\n )\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"transition-group\",\n {\n staticClass: \"apps-list-container\",\n attrs: { name: \"app-list\", tag: \"div\" }\n },\n _vm._l(_vm.apps, function(app) {\n return _c(\"AppItem\", {\n key: app.id,\n attrs: { app: app, category: _vm.category }\n })\n }),\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm.useBundleView\n ? _c(\n \"transition-group\",\n {\n staticClass: \"apps-list-container\",\n attrs: { name: \"app-list\", tag: \"div\" }\n },\n [\n _vm._l(_vm.bundles, function(bundle) {\n return [\n _c(\"div\", { key: bundle.id, staticClass: \"apps-header\" }, [\n _c(\"div\", { staticClass: \"app-image\" }),\n _vm._v(\" \"),\n _c(\"h2\", [\n _vm._v(_vm._s(bundle.name) + \" \"),\n _c(\"input\", {\n attrs: {\n type: \"button\",\n value: _vm.bundleToggleText(bundle.id)\n },\n on: {\n click: function($event) {\n return _vm.toggleBundle(bundle.id)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-version\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-level\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-groups\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [\n _vm._v(\"\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\")\n ])\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.bundleApps(bundle.id), function(app) {\n return _c(\"AppItem\", {\n key: bundle.id + app.id,\n attrs: { app: app, category: _vm.category }\n })\n })\n ]\n })\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.useAppStoreView\n ? _vm._l(_vm.apps, function(app) {\n return _c(\"AppItem\", {\n key: app.id,\n attrs: { app: app, category: _vm.category, \"list-view\": false }\n })\n })\n : _vm._e()\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"apps-list installed\", attrs: { id: \"apps-list-search\" } },\n [\n _c(\n \"div\",\n { staticClass: \"apps-list-container\" },\n [\n _vm.search !== \"\" && _vm.searchApps.length > 0\n ? [\n _c(\"div\", { staticClass: \"section\" }, [\n _c(\"div\"),\n _vm._v(\" \"),\n _c(\"td\", { attrs: { colspan: \"5\" } }, [\n _c(\"h2\", [\n _vm._v(\n _vm._s(\n _vm.t(\"settings\", \"Results from other categories\")\n )\n )\n ])\n ])\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.searchApps, function(app) {\n return _c(\"AppItem\", {\n key: app.id,\n attrs: {\n app: app,\n category: _vm.category,\n \"list-view\": true\n }\n })\n })\n ]\n : _vm._e()\n ],\n 2\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.search !== \"\" &&\n !_vm.loading &&\n _vm.searchApps.length === 0 &&\n _vm.apps.length === 0\n ? _c(\n \"div\",\n {\n staticClass: \"emptycontent emptycontent-search\",\n attrs: { id: \"apps-list-empty\" }\n },\n [\n _c(\"div\", {\n staticClass: \"icon-settings-dark\",\n attrs: { id: \"app-list-empty-icon\" }\n }),\n _vm._v(\" \"),\n _c(\"h2\", [\n _vm._v(\n _vm._s(_vm.t(\"settings\", \"No apps found for your version\"))\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { id: \"searchresults\" } })\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"section\",\n class: { selected: _vm.isSelected },\n on: { click: _vm.showAppDetails }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"app-image app-image-icon\",\n on: { click: _vm.showAppDetails }\n },\n [\n (_vm.listView && !_vm.app.preview) ||\n (!_vm.listView && !_vm.app.screenshot)\n ? _c(\"div\", { staticClass: \"icon-settings-dark\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.listView && _vm.app.preview\n ? _c(\n \"svg\",\n { attrs: { width: \"32\", height: \"32\", viewBox: \"0 0 32 32\" } },\n [\n _c(\"defs\", [\n _c(\n \"filter\",\n { attrs: { id: _vm.filterId } },\n [\n _c(\"feColorMatrix\", {\n attrs: {\n in: \"SourceGraphic\",\n type: \"matrix\",\n values: \"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"image\", {\n staticClass: \"app-icon\",\n attrs: {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n preserveAspectRatio: \"xMinYMin meet\",\n filter: _vm.filterUrl,\n \"xlink:href\": _vm.app.preview\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.listView && _vm.app.screenshot\n ? _c(\"img\", { attrs: { src: _vm.app.screenshot, width: \"100%\" } })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"app-name\", on: { click: _vm.showAppDetails } },\n [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.name) + \"\\n\\t\")]\n ),\n _vm._v(\" \"),\n !_vm.listView\n ? _c(\"div\", { staticClass: \"app-summary\" }, [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.summary) + \"\\n\\t\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.listView\n ? _c(\"div\", { staticClass: \"app-version\" }, [\n _vm.app.version\n ? _c(\"span\", [_vm._v(_vm._s(_vm.app.version))])\n : _vm.app.appstoreData.releases[0].version\n ? _c(\"span\", [\n _vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"app-level\" },\n [\n _vm.app.level === 300\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"This app is supported via your current Nextcloud subscription.\"\n ),\n expression:\n \"t('settings', 'This app is supported via your current Nextcloud subscription.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"supported icon-checkmark-color\"\n },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Supported\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.level === 200\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"Featured apps are developed by and within the community. They offer central functionality and are ready for production use.\"\n ),\n expression:\n \"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"official icon-checkmark\"\n },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Featured\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasRating && !_vm.listView\n ? _c(\"AppScore\", { attrs: { score: _vm.app.score } })\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [\n _vm.app.error\n ? _c(\"div\", { staticClass: \"warning\" }, [\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.app.error) + \"\\n\\t\\t\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.loading(_vm.app.id)\n ? _c(\"div\", { staticClass: \"icon icon-loading-small\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.update\n ? _c(\"input\", {\n staticClass: \"update primary\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Update to {update}\", {\n update: _vm.app.update\n }),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.update(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.canUnInstall\n ? _c(\"input\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Remove\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.remove(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.active\n ? _c(\"input\", {\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Disable\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.disable(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible)\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.enableButtonTooltip,\n expression: \"enableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.enableButtonText,\n disabled:\n !_vm.app.canInstall ||\n _vm.installing ||\n _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.enable(_vm.app.id)\n }\n }\n })\n : !_vm.app.active\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.forceEnableButtonTooltip,\n expression: \"forceEnableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable force\",\n attrs: {\n type: \"button\",\n value: _vm.forceEnableButtonText,\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.forceEnable(_vm.app.id)\n }\n }\n })\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"img\", {\n staticClass: \"app-score-image\",\n attrs: { src: _vm.scoreImage }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"Content\",\n {\n class: { \"with-app-sidebar\": _vm.currentApp },\n attrs: {\n \"app-name\": \"settings\",\n \"content-class\": { \"icon-loading\": _vm.loadingList },\n \"navigation-class\": { \"icon-loading\": _vm.loading }\n }\n },\n [\n _c(\"AppNavigation\", [\n _c(\n \"ul\",\n { attrs: { id: \"appscategories\" } },\n [\n _c(\"AppNavigationItem\", {\n attrs: {\n id: \"app-category-your-apps\",\n to: { name: \"apps\" },\n exact: true,\n icon: \"icon-category-installed\",\n title: _vm.t(\"settings\", \"Your apps\")\n }\n }),\n _vm._v(\" \"),\n _c(\"AppNavigationItem\", {\n attrs: {\n id: \"app-category-enabled\",\n to: { name: \"apps-category\", params: { category: \"enabled\" } },\n icon: \"icon-category-enabled\",\n title: _vm.t(\"settings\", \"Active apps\")\n }\n }),\n _vm._v(\" \"),\n _c(\"AppNavigationItem\", {\n attrs: {\n id: \"app-category-disabled\",\n to: { name: \"apps-category\", params: { category: \"disabled\" } },\n icon: \"icon-category-disabled\",\n title: _vm.t(\"settings\", \"Disabled apps\")\n }\n }),\n _vm._v(\" \"),\n _vm.updateCount > 0\n ? _c(\n \"AppNavigationItem\",\n {\n attrs: {\n id: \"app-category-updates\",\n to: {\n name: \"apps-category\",\n params: { category: \"updates\" }\n },\n icon: \"icon-download\",\n title: _vm.t(\"settings\", \"Updates\")\n }\n },\n [\n _c(\n \"AppNavigationCounter\",\n { attrs: { slot: \"counter\" }, slot: \"counter\" },\n [\n _vm._v(\n \"\\n\\t\\t\\t\\t\\t\" +\n _vm._s(_vm.updateCount) +\n \"\\n\\t\\t\\t\\t\"\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"AppNavigationItem\", {\n attrs: {\n id: \"app-category-your-bundles\",\n to: {\n name: \"apps-category\",\n params: { category: \"app-bundles\" }\n },\n icon: \"icon-category-app-bundles\",\n title: _vm.t(\"settings\", \"App bundles\")\n }\n }),\n _vm._v(\" \"),\n _c(\"AppNavigationSpacer\"),\n _vm._v(\" \"),\n _vm.settings.appstoreEnabled\n ? [\n _c(\"AppNavigationItem\", {\n attrs: {\n id: \"app-category-featured\",\n to: {\n name: \"apps-category\",\n params: { category: \"featured\" }\n },\n icon: \"icon-favorite\",\n title: _vm.t(\"settings\", \"Featured apps\")\n }\n }),\n _vm._v(\" \"),\n _vm._l(_vm.categories, function(cat) {\n return _c(\"AppNavigationItem\", {\n key: \"icon-category-\" + cat.ident,\n attrs: {\n icon: \"icon-category-\" + cat.ident,\n to: {\n name: \"apps-category\",\n params: { category: cat.ident }\n },\n title: cat.displayName\n }\n })\n })\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"AppNavigationItem\", {\n attrs: {\n id: \"app-developer-docs\",\n href: \"settings.developerDocumentation\",\n title: _vm.t(\"settings\", \"Developer documentation\") + \" ↗\"\n }\n })\n ],\n 2\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"AppContent\",\n {\n staticClass: \"app-settings-content\",\n class: { \"icon-loading\": _vm.loadingList }\n },\n [\n _c(\"AppList\", {\n attrs: {\n category: _vm.category,\n app: _vm.currentApp,\n search: _vm.searchQuery\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.id && _vm.currentApp\n ? _c(\n \"AppSidebar\",\n { on: { close: _vm.hideAppDetails } },\n [\n _c(\"AppDetails\", {\n attrs: { category: _vm.category, app: _vm.currentApp }\n })\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","// style-loader: Adds some css to the DOM by adding a