-{"version":3,"file":"files-main.js?v=de5c8e1c2f0fc4aa5cda","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c067","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?023e","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?98f5","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.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!./TemplatePreview.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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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 \"440aea22\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.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!./TemplatePicker.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!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&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!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=55dd9121&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&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 \"55dd9121\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport type Node from '@nextcloud/files/dist/files/node'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger'\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** Property key from Node main or additional attributes.\n\tWill be used if no custom sort function is provided.\n\tSorting will be done by localCompare */\n\tproperty: string\n\t/** Special function used to sort Nodes between them */\n\tsortFunction?: (nodeA: Node, nodeB: Node) => number;\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if nothing is provided */\n\tsummary?: (node: Node[]) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/** Method return the content of the provided path */\n\tgetFiles: (path: string) => Node[]\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getFiles || typeof view.getFiles !== 'function') {\n\t\t\tthrow new Error('Navigation getFiles is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('Column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('Column title is required')\n\t}\n\n\tif (!column.property || typeof column.property !== 'string') {\n\t\tthrow new Error('Column property is required')\n\t}\n\n\t// Optional properties\n\tif (column.sortFunction && typeof column.sortFunction !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\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!./NavigationQuota.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!./NavigationQuota.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!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&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!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=26c061ec&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&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 \"26c061ec\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\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!./Setting.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!./Setting.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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 />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a :href=\"webdavDocs\" target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField'\nimport Setting from '../components/Setting.vue'\n\nimport { emit } from '@nextcloud/event-bus'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n})\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\n\t\t\t...userConfig,\n\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\temit('files:config:updated', { key, value })\n\t\t\taxios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\tvalue,\n\t\t\t})\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.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!./Settings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=54b74cff&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.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 \"54b74cff\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.show_hidden},on:{\"update:checked\":[function($event){_vm.show_hidden=$event},function($event){return _vm.setConfig('show_hidden', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.crop_image_previews},on:{\"update:checked\":[function($event){_vm.crop_image_previews=$event},function($event){return _vm.setConfig('crop_image_previews', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"view.expanded\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\" />\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tSettingsModal,\n\t\tNavigationQuota,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\tlogger.debug('View changed', { id: view.id, view })\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.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!./Navigation.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!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&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!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=83bb0f06&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=83bb0f06&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 \"83bb0f06\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":view.expanded,\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}})}),1)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport { stringify } from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js'\nimport './legacy/filelistSearch.js'\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport NavigationService from './services/Navigation.ts'\nimport NavigationView from './views/Navigation.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\n\n// Init Files App Settings Service\nconst Settings = new SettingsService()\nObject.assign(window.OCA.Files, { Settings })\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel })\n\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init legacy files views\nprocessLegacyFilesViews()\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-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\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, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\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-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(27249); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","registerLegacyView","order","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","view","isValidNavigation","isUniqueNavigation","_views","e","Error","message","push","_currentView","views","find","search","getFiles","isSvg","columns","isValidColumn","emptyView","column","title","property","sortFunction","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","show_hidden","crop_image_previews","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","userConfig","settings","webdavUrl","webdavDocs","webdavUrlCopied","beforeDestroy","onClose","setConfig","emit","copyCloudId","navigator","showSuccess","setTimeout","length","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NcAppNavigation","SettingsModal","NavigationQuota","settingsOpened","currentViewId","currentView","parentViews","filter","sort","childViews","reduce","list","watch","showView","newAppContent","itemId","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","Settings","_settings","_name","_el","_open","_close","Router","mode","base","generateUrl","linkActiveClass","routes","alias","stringifyQuery","result","stringify","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","values","sublist","subview","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"files-main.js?v=e2400fc70cb2b525fc36","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files/src/utils/davUtils.js","webpack:///nextcloud/apps/files/src/services/Templates.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue","webpack:///nextcloud/apps/files/src/utils/fileUtils.js","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c067","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?81db","webpack://nextcloud/./apps/files/src/components/TemplatePreview.vue?c414","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?023e","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?afd8","webpack://nextcloud/./apps/files/src/views/TemplatePicker.vue?1f7b","webpack:///nextcloud/apps/files/src/templates.js","webpack:///nextcloud/apps/files/src/legacy/filelistSearch.js","webpack:///nextcloud/apps/files/src/logger.js","webpack:///nextcloud/apps/files/src/legacy/navigationMapper.js","webpack:///nextcloud/apps/files/src/services/Navigation.ts","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2b80","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?2966","webpack://nextcloud/./apps/files/src/components/NavigationQuota.vue?08cb","webpack:///nextcloud/apps/files/src/components/Setting.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files/src/components/Setting.vue","webpack://nextcloud/./apps/files/src/components/Setting.vue?98ea","webpack://nextcloud/./apps/files/src/components/Setting.vue?8d57","webpack:///nextcloud/apps/files/src/views/Settings.vue","webpack:///nextcloud/apps/files/src/views/Settings.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Settings.vue?b81b","webpack://nextcloud/./apps/files/src/views/Settings.vue?84f7","webpack:///nextcloud/apps/files/src/views/Navigation.vue","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files/src/views/Navigation.vue?98f5","webpack://nextcloud/./apps/files/src/views/Navigation.vue?74b9","webpack://nextcloud/./apps/files/src/views/Navigation.vue?8122","webpack:///nextcloud/apps/files/src/services/Settings.js","webpack:///nextcloud/apps/files/src/models/Setting.js","webpack:///nextcloud/apps/files/src/router/router.js","webpack:///nextcloud/apps/files/src/main.js","webpack:///nextcloud/apps/files/src/components/NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/components/TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/files/src/views/Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&","webpack:///nextcloud/apps/files/src/views/TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport const getRootPath = function() {\n\tif (getCurrentUser()) {\n\t\treturn generateRemoteUrl(`dav/files/${getCurrentUser().uid}`)\n\t} else {\n\t\treturn generateRemoteUrl('webdav').replace('/remote.php', '/public.php')\n\t}\n}\n\nexport const isPublic = function() {\n\treturn !getCurrentUser()\n}\n\nexport const getToken = function() {\n\treturn document.getElementById('sharingToken') && document.getElementById('sharingToken').value\n}\n\n/**\n * Return the current directory, fallback to root\n *\n * @return {string}\n */\nexport const getCurrentDirectory = function() {\n\tconst currentDirInfo = OCA?.Files?.App?.currentFileList?.dirInfo\n\t\t|| { path: '/', name: '' }\n\n\t// Make sure we don't have double slashes\n\treturn `${currentDirInfo.path}/${currentDirInfo.name}`.replace(/\\/\\//gi, '/')\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\n\nexport const getTemplates = async function() {\n\tconst response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))\n\treturn response.data.ocs.data\n}\n\n/**\n * Create a new file from a specified template\n *\n * @param {string} filePath The new file destination path\n * @param {string} templatePath The template source path\n * @param {string} templateType The template type e.g 'user'\n */\nexport const createFromTemplate = async function(filePath, templatePath, templateType) {\n\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {\n\t\tfilePath,\n\t\ttemplatePath,\n\t\ttemplateType,\n\t})\n\treturn response.data.ocs.data\n}\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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<li class=\"template-picker__item\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\ttype=\"radio\"\n\t\t\tclass=\"radio\"\n\t\t\tname=\"template-picker\"\n\t\t\t@change=\"onCheck\">\n\n\t\t<label :for=\"id\" class=\"template-picker__label\">\n\t\t\t<div class=\"template-picker__preview\"\n\t\t\t\t:class=\"failedPreview ? 'template-picker__preview--failed' : ''\">\n\t\t\t\t<img class=\"template-picker__image\"\n\t\t\t\t\t:src=\"realPreviewUrl\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tdraggable=\"false\"\n\t\t\t\t\t@error=\"onFailure\">\n\t\t\t</div>\n\n\t\t\t<span class=\"template-picker__title\">\n\t\t\t\t{{ nameWithoutExt }}\n\t\t\t</span>\n\t\t</label>\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { encodeFilePath } from '../utils/fileUtils'\nimport { getToken, isPublic } from '../utils/davUtils'\n\n// preview width generation\nconst previewWidth = 256\n\nexport default {\n\tname: 'TemplatePreview',\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tbasename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfileid: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t\tfilename: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpreviewUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\thasPreview: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tmime: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tratio: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfailedPreview: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.basename.indexOf('.') > -1 ? this.basename.split('.').slice(0, -1).join('.') : this.basename\n\t\t},\n\n\t\tid() {\n\t\t\treturn `template-picker-${this.fileid}`\n\t\t},\n\n\t\trealPreviewUrl() {\n\t\t\t// If original preview failed, fallback to mime icon\n\t\t\tif (this.failedPreview && this.mimeIcon) {\n\t\t\t\treturn this.mimeIcon\n\t\t\t}\n\n\t\t\tif (this.previewUrl) {\n\t\t\t\treturn this.previewUrl\n\t\t\t}\n\t\t\t// TODO: find a nicer standard way of doing this?\n\t\t\tif (isPublic()) {\n\t\t\t\treturn generateUrl(`/apps/files_sharing/publicpreview/${getToken()}?fileId=${this.fileid}&file=${encodeFilePath(this.filename)}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t\t}\n\t\t\treturn generateUrl(`/core/preview?fileId=${this.fileid}&x=${previewWidth}&y=${previewWidth}&a=1`)\n\t\t},\n\n\t\tmimeIcon() {\n\t\t\treturn OC.MimeType.getIconUrl(this.mime)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonCheck() {\n\t\t\tthis.$emit('check', this.fileid)\n\t\t},\n\t\tonFailure() {\n\t\t\tthis.failedPreview = true\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.template-picker {\n\t&__item {\n\t\tdisplay: flex;\n\t}\n\n\t&__label {\n\t\tdisplay: flex;\n\t\t// Align in the middle of the grid\n\t\talign-items: center;\n\t\tflex: 1 1;\n\t\tflex-direction: column;\n\n\t\t&, * {\n\t\t\tcursor: pointer;\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t&::before {\n\t\t\tdisplay: none !important;\n\t\t}\n\t}\n\n\t&__preview {\n\t\tdisplay: block;\n\t\toverflow: hidden;\n\t\t// Stretch so all entries are the same width\n\t\tflex: 1 1;\n\t\twidth: var(--width);\n\t\tmin-height: var(--height);\n\t\tmax-height: var(--height);\n\t\tpadding: 0;\n\t\tborder: var(--border) solid var(--color-border);\n\t\tborder-radius: var(--border-radius-large);\n\n\t\tinput:checked + label > & {\n\t\t\tborder-color: var(--color-primary);\n\t\t}\n\n\t\t&--failed {\n\t\t\t// Make sure to properly center fallback icon\n\t\t\tdisplay: flex;\n\t\t}\n\t}\n\n\t&__image {\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-main-background);\n\n\t\tobject-fit: cover;\n\t}\n\n\t// Failed preview, fallback to mime icon\n\t&__preview--failed &__image {\n\t\twidth: calc(var(--margin) * 8);\n\t\t// Center mime icon\n\t\tmargin: auto;\n\t\tbackground-color: transparent !important;\n\n\t\tobject-fit: initial;\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\t// also count preview border\n\t\tmax-width: calc(var(--width) + 2*2px);\n\t\tpadding: var(--margin);\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst encodeFilePath = function(path) {\n\tconst pathSections = (path.startsWith('/') ? path : `/${path}`).split('/')\n\tlet relativePath = ''\n\tpathSections.forEach((section) => {\n\t\tif (section !== '') {\n\t\t\trelativePath += '/' + encodeURIComponent(section)\n\t\t}\n\t})\n\treturn relativePath\n}\n\n/**\n * Extract dir and name from file path\n *\n * @param {string} path the full path\n * @return {string[]} [dirPath, fileName]\n */\nconst extractFilePaths = function(path) {\n\tconst pathSections = path.split('/')\n\tconst fileName = pathSections[pathSections.length - 1]\n\tconst dirPath = pathSections.slice(0, pathSections.length - 1).join('/')\n\treturn [dirPath, fileName]\n}\n\nexport { encodeFilePath, extractFilePaths }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePreview.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!./TemplatePreview.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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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!./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePreview.vue?vue&type=template&id=440aea22&scoped=true&\"\nimport script from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePreview.vue?vue&type=style&index=0&id=440aea22&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 \"440aea22\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"template-picker__item\"},[_c('input',{staticClass:\"radio\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"template-picker\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onCheck}}),_vm._v(\" \"),_c('label',{staticClass:\"template-picker__label\",attrs:{\"for\":_vm.id}},[_c('div',{staticClass:\"template-picker__preview\",class:_vm.failedPreview ? 'template-picker__preview--failed' : ''},[_c('img',{staticClass:\"template-picker__image\",attrs:{\"src\":_vm.realPreviewUrl,\"alt\":\"\",\"draggable\":\"false\"},on:{\"error\":_vm.onFailure}})]),_vm._v(\" \"),_c('span',{staticClass:\"template-picker__title\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.nameWithoutExt)+\"\\n\\t\\t\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\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<NcModal v-if=\"opened\"\n\t\t:clear-view-delay=\"-1\"\n\t\tclass=\"templates-picker\"\n\t\tsize=\"normal\"\n\t\t@close=\"close\">\n\t\t<form class=\"templates-picker__form\"\n\t\t\t:style=\"style\"\n\t\t\t@submit.prevent.stop=\"onSubmit\">\n\t\t\t<h2>{{ t('files', 'Pick a template for {name}', { name: nameWithoutExt }) }}</h2>\n\n\t\t\t<!-- Templates list -->\n\t\t\t<ul class=\"templates-picker__list\">\n\t\t\t\t<TemplatePreview v-bind=\"emptyTemplate\"\n\t\t\t\t\t:checked=\"checked === emptyTemplate.fileid\"\n\t\t\t\t\t@check=\"onCheck\" />\n\n\t\t\t\t<TemplatePreview v-for=\"template in provider.templates\"\n\t\t\t\t\t:key=\"template.fileid\"\n\t\t\t\t\tv-bind=\"template\"\n\t\t\t\t\t:checked=\"checked === template.fileid\"\n\t\t\t\t\t:ratio=\"provider.ratio\"\n\t\t\t\t\t@check=\"onCheck\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Cancel and submit -->\n\t\t\t<div class=\"templates-picker__buttons\">\n\t\t\t\t<button @click=\"close\">\n\t\t\t\t\t{{ t('files', 'Cancel') }}\n\t\t\t\t</button>\n\t\t\t\t<input type=\"submit\"\n\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t:value=\"t('files', 'Create')\"\n\t\t\t\t\t:aria-label=\"t('files', 'Create a new file with the selected template')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<NcEmptyContent v-if=\"loading\" class=\"templates-picker__loading\" icon=\"icon-loading\">\n\t\t\t{{ t('files', 'Creating file') }}\n\t\t</NcEmptyContent>\n\t</NcModal>\n</template>\n\n<script>\nimport { normalize } from 'path'\nimport { showError } from '@nextcloud/dialogs'\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent'\nimport NcModal from '@nextcloud/vue/dist/Components/NcModal'\n\nimport { getCurrentDirectory } from '../utils/davUtils'\nimport { createFromTemplate, getTemplates } from '../services/Templates'\nimport TemplatePreview from '../components/TemplatePreview'\n\nconst border = 2\nconst margin = 8\nconst width = margin * 20\n\nexport default {\n\tname: 'TemplatePicker',\n\n\tcomponents: {\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tTemplatePreview,\n\t},\n\n\tprops: {\n\t\tlogger: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t// Check empty template by default\n\t\t\tchecked: -1,\n\t\t\tloading: false,\n\t\t\tname: null,\n\t\t\topened: false,\n\t\t\tprovider: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Strip away extension from name\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tnameWithoutExt() {\n\t\t\treturn this.name.indexOf('.') > -1\n\t\t\t\t? this.name.split('.').slice(0, -1).join('.')\n\t\t\t\t: this.name\n\t\t},\n\n\t\temptyTemplate() {\n\t\t\treturn {\n\t\t\t\tbasename: t('files', 'Blank'),\n\t\t\t\tfileid: -1,\n\t\t\t\tfilename: this.t('files', 'Blank'),\n\t\t\t\thasPreview: false,\n\t\t\t\tmime: this.provider?.mimetypes[0] || this.provider?.mimetypes,\n\t\t\t}\n\t\t},\n\n\t\tselectedTemplate() {\n\t\t\treturn this.provider.templates.find(template => template.fileid === this.checked)\n\t\t},\n\n\t\t/**\n\t\t * Style css vars bin,d\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tstyle() {\n\t\t\treturn {\n\t\t\t\t'--margin': margin + 'px',\n\t\t\t\t'--width': width + 'px',\n\t\t\t\t'--border': border + 'px',\n\t\t\t\t'--fullwidth': width + 2 * margin + 2 * border + 'px',\n\t\t\t\t'--height': this.provider.ratio ? Math.round(width / this.provider.ratio) + 'px' : null,\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the picker\n\t\t *\n\t\t * @param {string} name the file name to create\n\t\t * @param {object} provider the template provider picked\n\t\t */\n\t\tasync open(name, provider) {\n\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.name = name\n\t\t\tthis.provider = provider\n\n\t\t\tconst templates = await getTemplates()\n\t\t\tconst fetchedProvider = templates.find((fetchedProvider) => fetchedProvider.app === provider.app && fetchedProvider.label === provider.label)\n\t\t\tif (fetchedProvider === null) {\n\t\t\t\tthrow new Error('Failed to match provider in results')\n\t\t\t}\n\t\t\tthis.provider = fetchedProvider\n\n\t\t\t// If there is no templates available, just create an empty file\n\t\t\tif (fetchedProvider.templates.length === 0) {\n\t\t\t\tthis.onSubmit()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Else, open the picker\n\t\t\tthis.opened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the picker and reset variables\n\t\t */\n\t\tclose() {\n\t\t\tthis.checked = this.emptyTemplate.fileid\n\t\t\tthis.loading = false\n\t\t\tthis.name = null\n\t\t\tthis.opened = false\n\t\t\tthis.provider = null\n\t\t},\n\n\t\t/**\n\t\t * Manages the radio template picker change\n\t\t *\n\t\t * @param {number} fileid the selected template file id\n\t\t */\n\t\tonCheck(fileid) {\n\t\t\tthis.checked = fileid\n\t\t},\n\n\t\tasync onSubmit() {\n\t\t\tthis.loading = true\n\t\t\tconst currentDirectory = getCurrentDirectory()\n\t\t\tconst fileList = OCA?.Files?.App?.currentFileList\n\n\t\t\t// If the file doesn't have an extension, add the default one\n\t\t\tif (this.nameWithoutExt === this.name) {\n\t\t\t\tthis.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })\n\t\t\t\tthis.name = this.name + this.provider?.extension\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst fileInfo = await createFromTemplate(\n\t\t\t\t\tnormalize(`${currentDirectory}/${this.name}`),\n\t\t\t\t\tthis.selectedTemplate?.filename,\n\t\t\t\t\tthis.selectedTemplate?.templateType,\n\t\t\t\t)\n\t\t\t\tthis.logger.debug('Created new file', fileInfo)\n\n\t\t\t\t// Fetch FileInfo and model\n\t\t\t\tconst data = await fileList?.addAndFetchFileInfo(this.name).then((status, data) => data)\n\t\t\t\tconst model = new OCA.Files.FileInfoModel(data, {\n\t\t\t\t\tfilesClient: fileList?.filesClient,\n\t\t\t\t})\n\n\t\t\t\t// Run default action\n\t\t\t\tconst fileAction = OCA.Files.fileActions.getDefaultFileAction(fileInfo.mime, 'file', OC.PERMISSION_ALL)\n\t\t\t\tif (fileAction) {\n\t\t\t\t\tfileAction.action(fileInfo.basename, {\n\t\t\t\t\t\t$file: fileList?.findFileEl(this.name),\n\t\t\t\t\t\tdir: currentDirectory,\n\t\t\t\t\t\tfileList,\n\t\t\t\t\t\tfileActions: fileList?.fileActions,\n\t\t\t\t\t\tfileInfoModel: model,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.close()\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger.error('Error while creating the new file from template')\n\t\t\t\tconsole.error(error)\n\t\t\t\tshowError(this.t('files', 'Unable to create new file from template'))\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.templates-picker {\n\t&__form {\n\t\tpadding: calc(var(--margin) * 2);\n\t\t// Will be handled by the buttons\n\t\tpadding-bottom: 0;\n\n\t\th2 {\n\t\t\ttext-align: center;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: var(--margin) 0 calc(var(--margin) * 2);\n\t\t}\n\t}\n\n\t&__list {\n\t\tdisplay: grid;\n\t\tgrid-gap: calc(var(--margin) * 2);\n\t\tgrid-auto-columns: 1fr;\n\t\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\n\t\tmax-width: calc(var(--fullwidth) * 6);\n\t\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\n\t\t// Make sure all rows are the same height\n\t\tgrid-auto-rows: 1fr;\n\t\t// Center the columns set\n\t\tjustify-content: center;\n\t}\n\n\t&__buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\tpadding: calc(var(--margin) * 2) var(--margin);\n\t\tposition: sticky;\n\t\tbottom: 0;\n\t\tbackground-image: linear-gradient(0, var(--gradient-main-background));\n\n\t\tbutton, input[type='submit'] {\n\t\t\theight: 44px;\n\t\t}\n\t}\n\n\t// Make sure we're relative for the loading emptycontent on top\n\t::v-deep .modal-container {\n\t\tposition: relative;\n\t}\n\n\t&__loading {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tjustify-content: center;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tmargin: 0;\n\t\tbackground-color: var(--color-main-background-translucent);\n\t}\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TemplatePicker.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!./TemplatePicker.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!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&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!./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./TemplatePicker.vue?vue&type=template&id=55dd9121&scoped=true&\"\nimport script from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nexport * from \"./TemplatePicker.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TemplatePicker.vue?vue&type=style&index=0&id=55dd9121&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 \"55dd9121\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.opened)?_c('NcModal',{staticClass:\"templates-picker\",attrs:{\"clear-view-delay\":-1,\"size\":\"normal\"},on:{\"close\":_vm.close}},[_c('form',{staticClass:\"templates-picker__form\",style:(_vm.style),on:{\"submit\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onSubmit.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('files', 'Pick a template for {name}', { name: _vm.nameWithoutExt })))]),_vm._v(\" \"),_c('ul',{staticClass:\"templates-picker__list\"},[_c('TemplatePreview',_vm._b({attrs:{\"checked\":_vm.checked === _vm.emptyTemplate.fileid},on:{\"check\":_vm.onCheck}},'TemplatePreview',_vm.emptyTemplate,false)),_vm._v(\" \"),_vm._l((_vm.provider.templates),function(template){return _c('TemplatePreview',_vm._b({key:template.fileid,attrs:{\"checked\":_vm.checked === template.fileid,\"ratio\":_vm.provider.ratio},on:{\"check\":_vm.onCheck}},'TemplatePreview',template,false))})],2),_vm._v(\" \"),_c('div',{staticClass:\"templates-picker__buttons\"},[_c('button',{on:{\"click\":_vm.close}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Cancel'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('input',{staticClass:\"primary\",attrs:{\"type\":\"submit\",\"aria-label\":_vm.t('files', 'Create a new file with the selected template')},domProps:{\"value\":_vm.t('files', 'Create')}})])]),_vm._v(\" \"),(_vm.loading)?_c('NcEmptyContent',{staticClass:\"templates-picker__loading\",attrs:{\"icon\":\"icon-loading\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files', 'Creating file'))+\"\\n\\t\")]):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentDirectory } from './utils/davUtils'\nimport axios from '@nextcloud/axios'\nimport Vue from 'vue'\n\nimport TemplatePickerView from './views/TemplatePicker'\nimport { showError } from '@nextcloud/dialogs'\n\n// Set up logger\nconst logger = getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\n// Create document root\nconst TemplatePickerRoot = document.createElement('div')\nTemplatePickerRoot.id = 'template-picker'\ndocument.body.appendChild(TemplatePickerRoot)\n\n// Retrieve and init templates\nlet templates = loadState('files', 'templates', [])\nlet templatesPath = loadState('files', 'templates_path', false)\nlogger.debug('Templates providers', templates)\nlogger.debug('Templates folder', { templatesPath })\n\n// Init vue app\nconst View = Vue.extend(TemplatePickerView)\nconst TemplatePicker = new View({\n\tname: 'TemplatePicker',\n\tpropsData: {\n\t\tlogger,\n\t},\n})\nTemplatePicker.$mount('#template-picker')\n\n// Init template engine after load to make sure it's the last injected entry\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (!templatesPath) {\n\t\tlogger.debug('Templates folder not initialized')\n\t\tconst initTemplatesPlugin = {\n\t\t\tattach(menu) {\n\t\t\t\t// register the new menu entry\n\t\t\t\tmenu.addMenuEntry({\n\t\t\t\t\tid: 'template-init',\n\t\t\t\t\tdisplayName: t('files', 'Set up templates folder'),\n\t\t\t\t\ttemplateName: t('files', 'Templates'),\n\t\t\t\t\ticonClass: 'icon-template-add',\n\t\t\t\t\tfileType: 'file',\n\t\t\t\t\tactionHandler(name) {\n\t\t\t\t\t\tinitTemplatesFolder(name)\n\t\t\t\t\t\tmenu.removeMenuEntry('template-init')\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t},\n\t\t}\n\t\tOC.Plugins.register('OCA.Files.NewFileMenu', initTemplatesPlugin)\n\t}\n})\n\n// Init template files menu\ntemplates.forEach((provider, index) => {\n\tconst newTemplatePlugin = {\n\t\tattach(menu) {\n\t\t\tconst fileList = menu.fileList\n\n\t\t\t// only attach to main file list, public view is not supported yet\n\t\t\tif (fileList.id !== 'files' && fileList.id !== 'files.public') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// register the new menu entry\n\t\t\tmenu.addMenuEntry({\n\t\t\t\tid: `template-new-${provider.app}-${index}`,\n\t\t\t\tdisplayName: provider.label,\n\t\t\t\ttemplateName: provider.label + provider.extension,\n\t\t\t\ticonClass: provider.iconClass || 'icon-file',\n\t\t\t\tfileType: 'file',\n\t\t\t\tactionHandler(name) {\n\t\t\t\t\tTemplatePicker.open(name, provider)\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\tOC.Plugins.register('OCA.Files.NewFileMenu', newTemplatePlugin)\n})\n\n/**\n * Init the template directory\n *\n * @param {string} name the templates folder name\n */\nconst initTemplatesFolder = async function(name) {\n\tconst templatePath = (getCurrentDirectory() + `/${name}`).replace('//', '/')\n\ttry {\n\t\tlogger.debug('Initializing the templates directory', { templatePath })\n\t\tconst response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/path'), {\n\t\t\ttemplatePath,\n\t\t\tcopySystemTemplates: true,\n\t\t})\n\n\t\t// Go to template directory\n\t\tOCA.Files.App.currentFileList.changeDirectory(templatePath, true, true)\n\n\t\ttemplates = response.data.ocs.data.templates\n\t\ttemplatesPath = response.data.ocs.data.template_path\n\t} catch (error) {\n\t\tlogger.error('Unable to initialize the templates directory')\n\t\tshowError(t('files', 'Unable to initialize the templates directory'))\n\t}\n}\n","/*\n * @copyright Copyright (c) 2021 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { subscribe } from '@nextcloud/event-bus'\n\n(function() {\n\n\tconst FilesPlugin = {\n\t\tattach(fileList) {\n\t\t\tsubscribe('nextcloud:unified-search.search', ({ query }) => {\n\t\t\t\tfileList.setFilter(query)\n\t\t\t})\n\t\t\tsubscribe('nextcloud:unified-search.reset', () => {\n\t\t\t\tthis.query = null\n\t\t\t\tfileList.setFilter('')\n\t\t\t})\n\n\t\t},\n\t}\n\n\twindow.OC.Plugins.register('OCA.Files.FileList', FilesPlugin)\n\n})()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { getLoggerBuilder } from '@nextcloud/logger'\n\nexport default getLoggerBuilder()\n\t.setApp('files')\n\t.detectUser()\n\t.build()\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport logger from '../logger.js'\n\n/**\n * Fetch and register the legacy files views\n */\nexport default function() {\n\tconst legacyViews = Object.values(loadState('files', 'navigation', {}))\n\n\tif (legacyViews.length > 0) {\n\t\tlogger.debug('Legacy files views detected. Processing...', legacyViews)\n\t\tlegacyViews.forEach(view => {\n\t\t\tregisterLegacyView(view)\n\t\t\tif (view.sublist) {\n\t\t\t\tview.sublist.forEach(subview => registerLegacyView({ ...subview, parent: view.id }))\n\t\t\t}\n\t\t})\n\t}\n}\n\nconst registerLegacyView = function({ id, name, order, icon, parent, classes = '', expanded, params }) {\n\tOCP.Files.Navigation.register({\n\t\tid,\n\t\tname,\n\t\torder,\n\t\tparams,\n\t\tparent,\n\t\texpanded: expanded === true,\n\t\ticonClass: icon ? `icon-${icon}` : 'nav-icon-' + id,\n\t\tlegacy: true,\n\t\tsticky: classes.includes('pinned'),\n\t})\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport type Node from '@nextcloud/files/dist/files/node'\nimport isSvg from 'is-svg'\n\nimport logger from '../logger'\n\nexport interface Column {\n\t/** Unique column ID */\n\tid: string\n\t/** Translated column title */\n\ttitle: string\n\t/** Property key from Node main or additional attributes.\n\tWill be used if no custom sort function is provided.\n\tSorting will be done by localCompare */\n\tproperty: string\n\t/** Special function used to sort Nodes between them */\n\tsortFunction?: (nodeA: Node, nodeB: Node) => number;\n\t/** Custom summary of the column to display at the end of the list.\n\t Will not be displayed if nothing is provided */\n\tsummary?: (node: Node[]) => string\n}\n\nexport interface Navigation {\n\t/** Unique view ID */\n\tid: string\n\t/** Translated view name */\n\tname: string\n\t/** Method return the content of the provided path */\n\tgetFiles: (path: string) => Node[]\n\t/** The view icon as an inline svg */\n\ticon: string\n\t/** The view order */\n\torder: number\n\t/** This view column(s). Name and actions are\n\tby default always included */\n\tcolumns?: Column[]\n\t/** The empty view element to render your empty content into */\n\temptyView?: (div: HTMLDivElement) => void\n\t/** The parent unique ID */\n\tparent?: string\n\t/** This view is sticky (sent at the bottom) */\n\tsticky?: boolean\n\t/** This view has children and is expanded or not */\n\texpanded?: boolean\n\n\t/**\n\t * This view is sticky a legacy view.\n\t * Here until all the views are migrated to Vue.\n\t * @deprecated It will be removed in a near future\n\t */\n\tlegacy?: boolean\n\t/**\n\t * An icon class. \n\t * @deprecated It will be removed in a near future\n\t */\n\ticonClass?: string\n}\n\nexport default class {\n\n\tprivate _views: Navigation[] = []\n\tprivate _currentView: Navigation | null = null\n\n\tconstructor() {\n\t\tlogger.debug('Navigation service initialized')\n\t}\n\n\tregister(view: Navigation) {\n\t\ttry {\n\t\t\tisValidNavigation(view)\n\t\t\tisUniqueNavigation(view, this._views)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error) {\n\t\t\t\tlogger.error(e.message, { view })\n\t\t\t}\n\t\t\tthrow e\n\t\t}\n\n\t\tif (view.legacy) {\n\t\t\tlogger.warn('Legacy view detected, please migrate to Vue')\n\t\t}\n\n\t\tif (view.iconClass) {\n\t\t\tview.legacy = true\n\t\t}\n\n\t\tthis._views.push(view)\n\t}\n\n\tget views(): Navigation[] {\n\t\treturn this._views\n\t}\n\n\tsetActive(view: Navigation | null) {\n\t\tthis._currentView = view\n\t}\n\n\tget active(): Navigation | null {\n\t\treturn this._currentView\n\t}\n\n}\n\n/**\n * Make sure the given view is unique\n * and not already registered.\n */\nconst isUniqueNavigation = function(view: Navigation, views: Navigation[]): boolean {\n\tif (views.find(search => search.id === view.id)) {\n\t\tthrow new Error(`Navigation id ${view.id} is already registered`)\n\t}\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Navigation interface requirements.\n */\nconst isValidNavigation = function(view: Navigation): boolean {\n\tif (!view.id || typeof view.id !== 'string') {\n\t\tthrow new Error('Navigation id is required and must be a string')\n\t}\n\n\tif (!view.name || typeof view.name !== 'string') {\n\t\tthrow new Error('Navigation name is required and must be a string')\n\t}\n\n\t/**\n\t * Legacy handle their content and icon differently\n\t * TODO: remove when support for legacy views is removed\n\t */\n\tif (!view.legacy) {\n\t\tif (!view.getFiles || typeof view.getFiles !== 'function') {\n\t\t\tthrow new Error('Navigation getFiles is required and must be a function')\n\t\t}\n\n\t\tif (!view.icon || typeof view.icon !== 'string' || !isSvg(view.icon)) {\n\t\t\tthrow new Error('Navigation icon is required and must be a valid svg string')\n\t\t}\n\t}\n\n\tif (!('order' in view) || typeof view.order !== 'number') {\n\t\tthrow new Error('Navigation order is required and must be a number')\n\t}\n\n\t// Optional properties\n\tif (view.columns) {\n\t\tview.columns.forEach(isValidColumn)\n\t}\n\n\tif (view.emptyView && typeof view.emptyView !== 'function') {\n\t\tthrow new Error('Navigation emptyView must be a function')\n\t}\n\n\tif (view.parent && typeof view.parent !== 'string') {\n\t\tthrow new Error('Navigation parent must be a string')\n\t}\n\n\tif ('sticky' in view && typeof view.sticky !== 'boolean') {\n\t\tthrow new Error('Navigation sticky must be a boolean')\n\t}\n\n\tif ('expanded' in view && typeof view.expanded !== 'boolean') {\n\t\tthrow new Error('Navigation expanded must be a boolean')\n\t}\n\n\treturn true\n}\n\n/**\n * Typescript cannot validate an interface.\n * Please keep in sync with the Column interface requirements.\n */\nconst isValidColumn = function(column: Column): boolean {\n\tif (!column.id || typeof column.id !== 'string') {\n\t\tthrow new Error('Column id is required')\n\t}\n\n\tif (!column.title || typeof column.title !== 'string') {\n\t\tthrow new Error('Column title is required')\n\t}\n\n\tif (!column.property || typeof column.property !== 'string') {\n\t\tthrow new Error('Column property is required')\n\t}\n\n\t// Optional properties\n\tif (column.sortFunction && typeof column.sortFunction !== 'function') {\n\t\tthrow new Error('Column sortFunction must be a function')\n\t}\n\n\tif (column.summary && typeof column.summary !== 'function') {\n\t\tthrow new Error('Column summary must be a function')\n\t}\n\n\treturn true\n}\n","<template>\n\t<NcAppNavigationItem v-if=\"storageStats\"\n\t\t:aria-label=\"t('files', 'Storage informations')\"\n\t\t:class=\"{ 'app-navigation-entry__settings-quota--not-unlimited': storageStats.quota >= 0}\"\n\t\t:loading=\"loadingStorageStats\"\n\t\t:name=\"storageStatsTitle\"\n\t\t:title=\"storageStatsTooltip\"\n\t\tclass=\"app-navigation-entry__settings-quota\"\n\t\tdata-cy-files-navigation-settings-quota\n\t\t@click.stop.prevent=\"debounceUpdateStorageStats\">\n\t\t<ChartPie slot=\"icon\" :size=\"20\" />\n\n\t\t<!-- Progress bar -->\n\t\t<NcProgressBar v-if=\"storageStats.quota >= 0\"\n\t\t\tslot=\"extra\"\n\t\t\t:error=\"storageStats.relative > 80\"\n\t\t\t:value=\"Math.min(storageStats.relative, 100)\" />\n\t</NcAppNavigationItem>\n</template>\n\n<script>\nimport { formatFileSize } from '@nextcloud/files'\nimport { generateUrl } from '@nextcloud/router'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError } from '@nextcloud/dialogs'\nimport { debounce, throttle } from 'throttle-debounce'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\nimport ChartPie from 'vue-material-design-icons/ChartPie.vue'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\nimport NcProgressBar from '@nextcloud/vue/dist/Components/NcProgressBar.js'\n\nimport logger from '../logger.js'\nimport { subscribe } from '@nextcloud/event-bus'\n\nexport default {\n\tname: 'NavigationQuota',\n\n\tcomponents: {\n\t\tChartPie,\n\t\tNcAppNavigationItem,\n\t\tNcProgressBar,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingStorageStats: false,\n\t\t\tstorageStats: loadState('files', 'storageStats', null),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tstorageStatsTitle() {\n\t\t\tconst usedQuotaByte = formatFileSize(this.storageStats?.used)\n\t\t\tconst quotaByte = formatFileSize(this.storageStats?.quota)\n\n\t\t\t// If no quota set\n\t\t\tif (this.storageStats?.quota < 0) {\n\t\t\t\treturn this.t('files', '{usedQuotaByte} used', { usedQuotaByte })\n\t\t\t}\n\n\t\t\treturn this.t('files', '{used} of {quota} used', {\n\t\t\t\tused: usedQuotaByte,\n\t\t\t\tquota: quotaByte,\n\t\t\t})\n\t\t},\n\t\tstorageStatsTooltip() {\n\t\t\tif (!this.storageStats.relative) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\treturn this.t('files', '{relative}% used', this.storageStats)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t/**\n\t\t * Update storage stats every minute\n\t\t * TODO: remove when all views are migrated to Vue\n\t\t */\n\t\tsetInterval(this.throttleUpdateStorageStats, 60 * 1000)\n\n\t\tsubscribe('files:file:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:file:updated', this.throttleUpdateStorageStats)\n\n\t\tsubscribe('files:folder:created', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:deleted', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:moved', this.throttleUpdateStorageStats)\n\t\tsubscribe('files:folder:updated', this.throttleUpdateStorageStats)\n\t},\n\n\tmethods: {\n\t\t// From user input\n\t\tdebounceUpdateStorageStats: debounce(200, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\t\t// From interval or event bus\n\t\tthrottleUpdateStorageStats: throttle(1000, function(event) {\n\t\t\tthis.updateStorageStats(event)\n\t\t}),\n\n\t\t/**\n\t\t * Update the storage stats\n\t\t * Throttled at max 1 refresh per minute\n\t\t *\n\t\t * @param {Event} [event = null] if user interaction\n\t\t */\n\t\tasync updateStorageStats(event = null) {\n\t\t\tif (this.loadingStorageStats) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.loadingStorageStats = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.get(generateUrl('/apps/files/api/v1/stats'))\n\t\t\t\tif (!response?.data?.data) {\n\t\t\t\t\tthrow new Error('Invalid storage stats')\n\t\t\t\t}\n\t\t\t\tthis.storageStats = response.data.data\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error('Could not refresh storage stats', { error })\n\t\t\t\t// Only show to the user if it was manually triggered\n\t\t\t\tif (event) {\n\t\t\t\t\tshowError(t('files', 'Could not refresh storage stats'))\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingStorageStats = false\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// User storage stats display\n.app-navigation-entry__settings-quota {\n\t// Align title with progress and icon\n\t&--not-unlimited::v-deep .app-navigation-entry__title {\n\t\tmargin-top: -4px;\n\t}\n\n\tprogress {\n\t\tposition: absolute;\n\t\tbottom: 10px;\n\t\tmargin-left: 44px;\n\t\twidth: calc(100% - 44px - 22px);\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!./NavigationQuota.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!./NavigationQuota.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!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&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!./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./NavigationQuota.vue?vue&type=template&id=26c061ec&scoped=true&\"\nimport script from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationQuota.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NavigationQuota.vue?vue&type=style&index=0&id=26c061ec&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 \"26c061ec\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.storageStats)?_c('NcAppNavigationItem',{staticClass:\"app-navigation-entry__settings-quota\",class:{ 'app-navigation-entry__settings-quota--not-unlimited': _vm.storageStats.quota >= 0},attrs:{\"aria-label\":_vm.t('files', 'Storage informations'),\"loading\":_vm.loadingStorageStats,\"name\":_vm.storageStatsTitle,\"title\":_vm.storageStatsTooltip,\"data-cy-files-navigation-settings-quota\":\"\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.debounceUpdateStorageStats.apply(null, arguments)}}},[_c('ChartPie',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"}),_vm._v(\" \"),(_vm.storageStats.quota >= 0)?_c('NcProgressBar',{attrs:{\"slot\":\"extra\",\"error\":_vm.storageStats.relative > 80,\"value\":Math.min(_vm.storageStats.relative, 100)},slot:\"extra\"}):_vm._e()],1):_vm._e()\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!./Setting.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!./Setting.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\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 />\n</template>\n<script>\nexport default {\n\tname: 'Setting',\n\tprops: {\n\t\tel: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$el.appendChild(this.el())\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./Setting.vue?vue&type=template&id=03406edc&\"\nimport script from \"./Setting.vue?vue&type=script&lang=js&\"\nexport * from \"./Setting.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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppSettingsDialog :open=\"open\"\n\t\t:show-navigation=\"true\"\n\t\t:title=\"t('files', 'Files settings')\"\n\t\t@update:open=\"onClose\">\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection id=\"settings\" :title=\"t('files', 'Files settings')\">\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"show_hidden\"\n\t\t\t\t@update:checked=\"setConfig('show_hidden', $event)\">\n\t\t\t\t{{ t('files', 'Show hidden files') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t<NcCheckboxRadioSwitch :checked.sync=\"crop_image_previews\"\n\t\t\t\t@update:checked=\"setConfig('crop_image_previews', $event)\">\n\t\t\t\t{{ t('files', 'Crop image previews') }}\n\t\t\t</NcCheckboxRadioSwitch>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Settings API-->\n\t\t<NcAppSettingsSection v-if=\"settings.length !== 0\"\n\t\t\tid=\"more-settings\"\n\t\t\t:title=\"t('files', 'Additional settings')\">\n\t\t\t<template v-for=\"setting in settings\">\n\t\t\t\t<Setting :key=\"setting.name\" :el=\"setting.el\" />\n\t\t\t</template>\n\t\t</NcAppSettingsSection>\n\n\t\t<!-- Webdav URL-->\n\t\t<NcAppSettingsSection id=\"webdav\" :title=\"t('files', 'WebDAV')\">\n\t\t\t<NcInputField id=\"webdav-url-input\"\n\t\t\t\t:show-trailing-button=\"true\"\n\t\t\t\t:success=\"webdavUrlCopied\"\n\t\t\t\t:trailing-button-label=\"t('files', 'Copy to clipboard')\"\n\t\t\t\t:value=\"webdavUrl\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t@focus=\"$event.target.select()\"\n\t\t\t\t@trailing-button-click=\"copyCloudId\">\n\t\t\t\t<template #trailing-button-icon>\n\t\t\t\t\t<Clipboard :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcInputField>\n\t\t\t<em>\n\t\t\t\t<a :href=\"webdavDocs\" target=\"_blank\" rel=\"noreferrer noopener\">\n\t\t\t\t\t{{ t('files', 'Use this address to access your Files via WebDAV') }} ↗\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t\t<br />\n\t\t\t<em>\n\t\t\t\t<a :href=\"appPasswordUrl\">\n\t\t\t\t\t{{ t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.') }}\n\t\t\t\t</a>\n\t\t\t</em>\n\t\t</NcAppSettingsSection>\n\t</NcAppSettingsDialog>\n</template>\n\n<script>\nimport NcAppSettingsDialog from '@nextcloud/vue/dist/Components/NcAppSettingsDialog.js'\nimport NcAppSettingsSection from '@nextcloud/vue/dist/Components/NcAppSettingsSection.js'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadioSwitch.js'\nimport Clipboard from 'vue-material-design-icons/Clipboard.vue'\nimport NcInputField from '@nextcloud/vue/dist/Components/NcInputField'\nimport Setting from '../components/Setting.vue'\n\nimport { emit } from '@nextcloud/event-bus'\nimport { generateRemoteUrl, generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { translate } from '@nextcloud/l10n'\nimport axios from '@nextcloud/axios'\n\nconst userConfig = loadState('files', 'config', {\n\tshow_hidden: false,\n\tcrop_image_previews: true,\n})\n\nexport default {\n\tname: 'Settings',\n\tcomponents: {\n\t\tClipboard,\n\t\tNcAppSettingsDialog,\n\t\tNcAppSettingsSection,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcInputField,\n\t\tSetting,\n\t},\n\n\tprops: {\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\n\t\t\t...userConfig,\n\n\t\t\t// Settings API\n\t\t\tsettings: window.OCA?.Files?.Settings?.settings || [],\n\n\t\t\t// Webdav infos\n\t\t\twebdavUrl: generateRemoteUrl('dav/files/' + encodeURIComponent(getCurrentUser()?.uid)),\n\t\t\twebdavDocs: 'https://docs.nextcloud.com/server/stable/go.php?to=user-webdav',\n\t\t\tappPasswordUrl: generateUrl('/settings/user/security#generate-app-token-section'),\n\t\t\twebdavUrlCopied: false,\n\t\t}\n\t},\n\n\tbeforeMount() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.open())\n\t},\n\n\tbeforeDestroy() {\n\t\t// Update the settings API entries state\n\t\tthis.settings.forEach(setting => setting.close())\n\t},\n\n\tmethods: {\n\t\tonClose() {\n\t\t\tthis.$emit('close')\n\t\t},\n\n\t\tsetConfig(key, value) {\n\t\t\temit('files:config:updated', { key, value })\n\t\t\taxios.post(generateUrl('/apps/files/api/v1/config/' + key), {\n\t\t\t\tvalue,\n\t\t\t})\n\t\t},\n\n\t\tasync copyCloudId() {\n\t\t\tdocument.querySelector('input#webdav-url-input').select()\n\n\t\t\tif (!navigator.clipboard) {\n\t\t\t\t// Clipboard API not available\n\t\t\t\tshowError(t('files', 'Clipboard is not available'))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tawait navigator.clipboard.writeText(this.webdavUrl)\n\t\t\tthis.webdavUrlCopied = true\n\t\t\tshowSuccess(t('files', 'WebDAV URL copied to clipboard'))\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.webdavUrlCopied = false\n\t\t\t}, 5000)\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Settings.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!./Settings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Settings.vue?vue&type=template&id=9ad9e82a&scoped=true&\"\nimport script from \"./Settings.vue?vue&type=script&lang=js&\"\nexport * from \"./Settings.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 \"9ad9e82a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppSettingsDialog',{attrs:{\"open\":_vm.open,\"show-navigation\":true,\"title\":_vm.t('files', 'Files settings')},on:{\"update:open\":_vm.onClose}},[_c('NcAppSettingsSection',{attrs:{\"id\":\"settings\",\"title\":_vm.t('files', 'Files settings')}},[_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.show_hidden},on:{\"update:checked\":[function($event){_vm.show_hidden=$event},function($event){return _vm.setConfig('show_hidden', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Show hidden files'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('NcCheckboxRadioSwitch',{attrs:{\"checked\":_vm.crop_image_previews},on:{\"update:checked\":[function($event){_vm.crop_image_previews=$event},function($event){return _vm.setConfig('crop_image_previews', $event)}]}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files', 'Crop image previews'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.settings.length !== 0)?_c('NcAppSettingsSection',{attrs:{\"id\":\"more-settings\",\"title\":_vm.t('files', 'Additional settings')}},[_vm._l((_vm.settings),function(setting){return [_c('Setting',{key:setting.name,attrs:{\"el\":setting.el}})]})],2):_vm._e(),_vm._v(\" \"),_c('NcAppSettingsSection',{attrs:{\"id\":\"webdav\",\"title\":_vm.t('files', 'WebDAV')}},[_c('NcInputField',{attrs:{\"id\":\"webdav-url-input\",\"show-trailing-button\":true,\"success\":_vm.webdavUrlCopied,\"trailing-button-label\":_vm.t('files', 'Copy to clipboard'),\"value\":_vm.webdavUrl,\"readonly\":\"readonly\",\"type\":\"url\"},on:{\"focus\":function($event){return $event.target.select()},\"trailing-button-click\":_vm.copyCloudId},scopedSlots:_vm._u([{key:\"trailing-button-icon\",fn:function(){return [_c('Clipboard',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('em',[_c('a',{attrs:{\"href\":_vm.webdavDocs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'Use this address to access your Files via WebDAV'))+\" ↗\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('br'),_vm._v(\" \"),_c('em',[_c('a',{attrs:{\"href\":_vm.appPasswordUrl}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files', 'If you have enabled 2FA, you must create and use a new app password by clicking here.'))+\"\\n\\t\\t\\t\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<NcAppNavigation data-cy-files-navigation>\n\t\t<template #list>\n\t\t\t<NcAppNavigationItem v-for=\"view in parentViews\"\n\t\t\t\t:key=\"view.id\"\n\t\t\t\t:allow-collapse=\"true\"\n\t\t\t\t:data-cy-files-navigation-item=\"view.id\"\n\t\t\t\t:icon=\"view.iconClass\"\n\t\t\t\t:open=\"view.expanded\"\n\t\t\t\t:pinned=\"view.sticky\"\n\t\t\t\t:title=\"view.name\"\n\t\t\t\t:to=\"generateToNavigation(view)\"\n\t\t\t\t@update:open=\"onToggleExpand(view)\">\n\t\t\t\t<NcAppNavigationItem v-for=\"child in childViews[view.id]\"\n\t\t\t\t\t:key=\"child.id\"\n\t\t\t\t\t:data-cy-files-navigation-item=\"child.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:icon=\"child.iconClass\"\n\t\t\t\t\t:title=\"child.name\"\n\t\t\t\t\t:to=\"generateToNavigation(child)\" />\n\t\t\t</NcAppNavigationItem>\n\t\t</template>\n\n\t\t<!-- Non-scrollable navigation bottom elements -->\n\t\t<template #footer>\n\t\t\t<ul class=\"app-navigation-entry__settings\">\n\t\t\t\t<!-- User storage usage statistics -->\n\t\t\t\t<NavigationQuota />\n\n\t\t\t\t<!-- Files settings modal toggle-->\n\t\t\t\t<NcAppNavigationItem :aria-label=\"t('files', 'Open the files app settings')\"\n\t\t\t\t\t:title=\"t('files', 'Files settings')\"\n\t\t\t\t\tdata-cy-files-navigation-settings-button\n\t\t\t\t\t@click.prevent.stop=\"openSettings\">\n\t\t\t\t\t<Cog slot=\"icon\" :size=\"20\" />\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</ul>\n\t\t</template>\n\n\t\t<!-- Settings modal-->\n\t\t<SettingsModal :open=\"settingsOpened\"\n\t\t\tdata-cy-files-navigation-settings\n\t\t\t@close=\"onSettingsClose\" />\n\t</NcAppNavigation>\n</template>\n\n<script>\nimport { emit, subscribe } from '@nextcloud/event-bus'\nimport { generateUrl } from '@nextcloud/router'\nimport { translate } from '@nextcloud/l10n'\n\nimport axios from '@nextcloud/axios'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport NcAppNavigation from '@nextcloud/vue/dist/Components/NcAppNavigation.js'\nimport NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'\n\nimport logger from '../logger.js'\nimport Navigation from '../services/Navigation.ts'\nimport NavigationQuota from '../components/NavigationQuota.vue'\nimport SettingsModal from './Settings.vue'\n\nexport default {\n\tname: 'Navigation',\n\n\tcomponents: {\n\t\tCog,\n\t\tNcAppNavigation,\n\t\tNcAppNavigationItem,\n\t\tSettingsModal,\n\t\tNavigationQuota,\n\t},\n\n\tprops: {\n\t\t// eslint-disable-next-line vue/prop-name-casing\n\t\tNavigation: {\n\t\t\ttype: Navigation,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsettingsOpened: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tcurrentViewId() {\n\t\t\treturn this.$route?.params?.view || 'files'\n\t\t},\n\n\t\t/** @return {Navigation} */\n\t\tcurrentView() {\n\t\t\treturn this.views.find(view => view.id === this.currentViewId)\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tviews() {\n\t\t\treturn this.Navigation.views\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tparentViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter child views\n\t\t\t\t.filter(view => !view.parent)\n\t\t\t\t// sort views by order\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.order - b.order\n\t\t\t\t})\n\t\t},\n\n\t\t/** @return {Navigation[]} */\n\t\tchildViews() {\n\t\t\treturn this.views\n\t\t\t\t// filter parent views\n\t\t\t\t.filter(view => !!view.parent)\n\t\t\t\t// create a map of parents and their children\n\t\t\t\t.reduce((list, view) => {\n\t\t\t\t\tlist[view.parent] = [...(list[view.parent] || []), view]\n\t\t\t\t\t// Sort children by order\n\t\t\t\t\tlist[view.parent].sort((a, b) => {\n\t\t\t\t\t\treturn a.order - b.order\n\t\t\t\t\t})\n\t\t\t\t\treturn list\n\t\t\t\t}, {})\n\t\t},\n\t},\n\n\twatch: {\n\t\tcurrentView(view, oldView) {\n\t\t\tlogger.debug('View changed', { id: view.id, view })\n\t\t\tthis.showView(view, oldView)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tif (this.currentView) {\n\t\t\tlogger.debug('Navigation mounted. Showing requested view', { view: this.currentView })\n\t\t\tthis.showView(this.currentView)\n\t\t}\n\n\t\tsubscribe('files:legacy-navigation:changed', this.onLegacyNavigationChanged)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {Navigation} view the new active view\n\t\t * @param {Navigation} oldView the old active view\n\t\t */\n\t\tshowView(view, oldView) {\n\t\t\t// Closing any opened sidebar\n\t\t\twindow?.OCA?.Files?.Sidebar?.close?.()\n\n\t\t\tif (view.legacy) {\n\t\t\t\tconst newAppContent = document.querySelector('#app-content #app-content-' + this.currentView.id + '.viewcontainer')\n\t\t\t\tdocument.querySelectorAll('#app-content .viewcontainer').forEach(el => {\n\t\t\t\t\tel.classList.add('hidden')\n\t\t\t\t})\n\t\t\t\tnewAppContent.classList.remove('hidden')\n\n\t\t\t\t// Triggering legacy navigation events\n\t\t\t\tconst { dir = '/' } = OC.Util.History.parseUrlQuery()\n\t\t\t\tconst params = { itemId: view.id, dir }\n\n\t\t\t\tlogger.debug('Triggering legacy navigation event', params)\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('show', params))\n\t\t\t\twindow.jQuery(newAppContent).trigger(new window.jQuery.Event('urlChanged', params))\n\n\t\t\t}\n\n\t\t\tthis.Navigation.setActive(view)\n\t\t\temit('files:navigation:changed', view)\n\t\t},\n\n\t\t/**\n\t\t * Coming from the legacy files app.\n\t\t * TODO: remove when all views are migrated.\n\t\t *\n\t\t * @param {Navigation} view the new active view\n\t\t */\n\t\tonLegacyNavigationChanged({ id } = { id: 'files' }) {\n\t\t\tconst view = this.Navigation.views.find(view => view.id === id)\n\t\t\tif (view && view.legacy && view.id !== this.currentView.id) {\n\t\t\t\t// Force update the current route as the request comes\n\t\t\t\t// from the legacy files app router\n\t\t\t\tthis.$router.replace({ ...this.$route, params: { view: view.id } })\n\t\t\t\tthis.Navigation.setActive(view)\n\t\t\t\tthis.showView(view)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Expand/collapse a a view with children and permanently\n\t\t * save this setting in the server.\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tonToggleExpand(view) {\n\t\t\t// Invert state\n\t\t\tview.expanded = !view.expanded\n\t\t\taxios.post(generateUrl(`/apps/files/api/v1/toggleShowFolder/${view.id}`), { show: view.expanded })\n\t\t},\n\n\t\t/**\n\t\t * Generate the route to a view\n\t\t *\n\t\t * @param {Navigation} view the view to toggle\n\t\t */\n\t\tgenerateToNavigation(view) {\n\t\t\tif (view.params) {\n\t\t\t\tconst { dir, fileid } = view.params\n\t\t\t\treturn { name: 'filelist', params: view.params, query: { dir, fileid } }\n\t\t\t}\n\t\t\treturn { name: 'filelist', params: { view: view.id } }\n\t\t},\n\n\t\t/**\n\t\t * Open the settings modal\n\t\t */\n\t\topenSettings() {\n\t\t\tthis.settingsOpened = true\n\t\t},\n\n\t\t/**\n\t\t * Close the settings modal\n\t\t */\n\t\tonSettingsClose() {\n\t\t\tthis.settingsOpened = false\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\n.app-navigation::v-deep .app-navigation-entry-icon {\n\tbackground-repeat: no-repeat;\n\tbackground-position: center;\n}\n\n.app-navigation > ul.app-navigation__list {\n\t// Use flex gap value for more elegant spacing\n\tpadding-bottom: var(--default-grid-baseline, 4px);\n}\n\n.app-navigation-entry__settings {\n\theight: auto !important;\n\toverflow: hidden !important;\n\tpadding-top: 0 !important;\n\t// Prevent shrinking or growing\n\tflex: 0 0 auto;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.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!./Navigation.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!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&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!./Navigation.vue?vue&type=style&index=0&id=83bb0f06&prod&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=83bb0f06&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=js&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=83bb0f06&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 \"83bb0f06\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcAppNavigation',{attrs:{\"data-cy-files-navigation\":\"\"},scopedSlots:_vm._u([{key:\"list\",fn:function(){return _vm._l((_vm.parentViews),function(view){return _c('NcAppNavigationItem',{key:view.id,attrs:{\"allow-collapse\":true,\"data-cy-files-navigation-item\":view.id,\"icon\":view.iconClass,\"open\":view.expanded,\"pinned\":view.sticky,\"title\":view.name,\"to\":_vm.generateToNavigation(view)},on:{\"update:open\":function($event){return _vm.onToggleExpand(view)}}},_vm._l((_vm.childViews[view.id]),function(child){return _c('NcAppNavigationItem',{key:child.id,attrs:{\"data-cy-files-navigation-item\":child.id,\"exact\":true,\"icon\":child.iconClass,\"title\":child.name,\"to\":_vm.generateToNavigation(child)}})}),1)})},proxy:true},{key:\"footer\",fn:function(){return [_c('ul',{staticClass:\"app-navigation-entry__settings\"},[_c('NavigationQuota'),_vm._v(\" \"),_c('NcAppNavigationItem',{attrs:{\"aria-label\":_vm.t('files', 'Open the files app settings'),\"title\":_vm.t('files', 'Files settings'),\"data-cy-files-navigation-settings-button\":\"\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openSettings.apply(null, arguments)}}},[_c('Cog',{attrs:{\"slot\":\"icon\",\"size\":20},slot:\"icon\"})],1)],1)]},proxy:true}])},[_vm._v(\" \"),_vm._v(\" \"),_c('SettingsModal',{attrs:{\"open\":_vm.settingsOpened,\"data-cy-files-navigation-settings\":\"\"},on:{\"close\":_vm.onSettingsClose}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Settings {\n\n\t_settings\n\n\tconstructor() {\n\t\tthis._settings = []\n\t\tconsole.debug('OCA.Files.Settings initialized')\n\t}\n\n\t/**\n\t * Register a new setting\n\t *\n\t * @since 19.0.0\n\t * @param {OCA.Files.Settings.Setting} view element to add to settings\n\t * @return {boolean} whether registering was successful\n\t */\n\tregister(view) {\n\t\tif (this._settings.filter(e => e.name === view.name).length > 0) {\n\t\t\tconsole.error('A setting with the same name is already registered')\n\t\t\treturn false\n\t\t}\n\t\tthis._settings.push(view)\n\t\treturn true\n\t}\n\n\t/**\n\t * All settings elements\n\t *\n\t * @return {OCA.Files.Settings.Setting[]} All currently registered settings\n\t */\n\tget settings() {\n\t\treturn this._settings\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Gary Kim <gary@garykim.dev>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default class Setting {\n\n\t_close\n\t_el\n\t_name\n\t_open\n\n\t/**\n\t * Create a new files app setting\n\t *\n\t * @since 19.0.0\n\t * @param {string} name the name of this setting\n\t * @param {object} component the component\n\t * @param {Function} component.el function that returns an unmounted dom element to be added\n\t * @param {Function} [component.open] callback for when setting is added\n\t * @param {Function} [component.close] callback for when setting is closed\n\t */\n\tconstructor(name, { el, open, close }) {\n\t\tthis._name = name\n\t\tthis._el = el\n\t\tthis._open = open\n\t\tthis._close = close\n\n\t\tif (typeof this._open !== 'function') {\n\t\t\tthis._open = () => {}\n\t\t}\n\n\t\tif (typeof this._close !== 'function') {\n\t\t\tthis._close = () => {}\n\t\t}\n\t}\n\n\tget name() {\n\t\treturn this._name\n\t}\n\n\tget el() {\n\t\treturn this._el\n\t}\n\n\tget open() {\n\t\treturn this._open\n\t}\n\n\tget close() {\n\t\treturn this._close\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\nimport { stringify } from 'query-string'\n\nVue.use(Router)\n\nconst router = new Router({\n\tmode: 'history',\n\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl('/apps/files', ''),\n\tlinkActiveClass: 'active',\n\n\troutes: [\n\t\t{\n\t\t\tpath: '/',\n\t\t\t// Pretending we're using the default view\n\t\t\talias: '/files',\n\t\t},\n\t\t{\n\t\t\tpath: '/:view/:fileid?',\n\t\t\tname: 'filelist',\n\t\t\tprops: true,\n\t\t},\n\t],\n\n\t// Custom stringifyQuery to prevent encoding of slashes in the url\n\tstringifyQuery(query) {\n\t\tconst result = stringify(query).replace(/%2F/gmi, '/')\n\t\treturn result ? ('?' + result) : ''\n\t},\n})\n\nexport default router\n","import './templates.js'\nimport './legacy/filelistSearch.js'\nimport processLegacyFilesViews from './legacy/navigationMapper.js'\n\nimport Vue from 'vue'\nimport NavigationService from './services/Navigation.ts'\nimport NavigationView from './views/Navigation.vue'\n\nimport SettingsService from './services/Settings.js'\nimport SettingsModel from './models/Setting.js'\n\nimport router from './router/router.js'\n\n// Init private and public Files namespace\nwindow.OCA.Files = window.OCA.Files ?? {}\nwindow.OCP.Files = window.OCP.Files ?? {}\n\n// Init Navigation Service\nconst Navigation = new NavigationService()\nObject.assign(window.OCP.Files, { Navigation })\n\n// Init Files App Settings Service\nconst Settings = new SettingsService()\nObject.assign(window.OCA.Files, { Settings })\nObject.assign(window.OCA.Files.Settings, { Setting: SettingsModel })\n\n// Init Navigation View\nconst View = Vue.extend(NavigationView)\nconst FilesNavigationRoot = new View({\n\tname: 'FilesNavigationRoot',\n\tpropsData: {\n\t\tNavigation,\n\t},\n\trouter,\n})\nFilesNavigationRoot.$mount('#app-navigation-files')\n\n// Init legacy files views\nprocessLegacyFilesViews()\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-navigation-entry__settings-quota--not-unlimited[data-v-26c061ec] .app-navigation-entry__title{margin-top:-4px}.app-navigation-entry__settings-quota progress[data-v-26c061ec]{position:absolute;bottom:10px;margin-left:44px;width:calc(100% - 44px - 22px)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/NavigationQuota.vue\"],\"names\":[],\"mappings\":\"AAIC,mGACC,eAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,gBAAA,CACA,8BAAA\",\"sourcesContent\":[\"\\n// User storage stats display\\n.app-navigation-entry__settings-quota {\\n\\t// Align title with progress and icon\\n\\t&--not-unlimited::v-deep .app-navigation-entry__title {\\n\\t\\tmargin-top: -4px;\\n\\t}\\n\\n\\tprogress {\\n\\t\\tposition: absolute;\\n\\t\\tbottom: 10px;\\n\\t\\tmargin-left: 44px;\\n\\t\\twidth: calc(100% - 44px - 22px);\\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, \".template-picker__item[data-v-440aea22]{display:flex}.template-picker__label[data-v-440aea22]{display:flex;align-items:center;flex:1 1;flex-direction:column}.template-picker__label[data-v-440aea22],.template-picker__label *[data-v-440aea22]{cursor:pointer;user-select:none}.template-picker__label[data-v-440aea22]::before{display:none !important}.template-picker__preview[data-v-440aea22]{display:block;overflow:hidden;flex:1 1;width:var(--width);min-height:var(--height);max-height:var(--height);padding:0;border:var(--border) solid var(--color-border);border-radius:var(--border-radius-large)}input:checked+label>.template-picker__preview[data-v-440aea22]{border-color:var(--color-primary)}.template-picker__preview--failed[data-v-440aea22]{display:flex}.template-picker__image[data-v-440aea22]{max-width:100%;background-color:var(--color-main-background);object-fit:cover}.template-picker__preview--failed .template-picker__image[data-v-440aea22]{width:calc(var(--margin)*8);margin:auto;background-color:rgba(0,0,0,0) !important;object-fit:initial}.template-picker__title[data-v-440aea22]{overflow:hidden;max-width:calc(var(--width) + 4px);padding:var(--margin);white-space:nowrap;text-overflow:ellipsis}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/components/TemplatePreview.vue\"],\"names\":[],\"mappings\":\"AAGC,wCACC,YAAA,CAGD,yCACC,YAAA,CAEA,kBAAA,CACA,QAAA,CACA,qBAAA,CAEA,oFACC,cAAA,CACA,gBAAA,CAGD,iDACC,uBAAA,CAIF,2CACC,aAAA,CACA,eAAA,CAEA,QAAA,CACA,kBAAA,CACA,wBAAA,CACA,wBAAA,CACA,SAAA,CACA,8CAAA,CACA,wCAAA,CAEA,+DACC,iCAAA,CAGD,mDAEC,YAAA,CAIF,yCACC,cAAA,CACA,6CAAA,CAEA,gBAAA,CAID,2EACC,2BAAA,CAEA,WAAA,CACA,yCAAA,CAEA,kBAAA,CAGD,yCACC,eAAA,CAEA,kCAAA,CACA,qBAAA,CACA,kBAAA,CACA,sBAAA\",\"sourcesContent\":[\"\\n\\n.template-picker {\\n\\t&__item {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: flex;\\n\\t\\t// Align in the middle of the grid\\n\\t\\talign-items: center;\\n\\t\\tflex: 1 1;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&, * {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t\\tuser-select: none;\\n\\t\\t}\\n\\n\\t\\t&::before {\\n\\t\\t\\tdisplay: none !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__preview {\\n\\t\\tdisplay: block;\\n\\t\\toverflow: hidden;\\n\\t\\t// Stretch so all entries are the same width\\n\\t\\tflex: 1 1;\\n\\t\\twidth: var(--width);\\n\\t\\tmin-height: var(--height);\\n\\t\\tmax-height: var(--height);\\n\\t\\tpadding: 0;\\n\\t\\tborder: var(--border) solid var(--color-border);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\n\\t\\tinput:checked + label > & {\\n\\t\\t\\tborder-color: var(--color-primary);\\n\\t\\t}\\n\\n\\t\\t&--failed {\\n\\t\\t\\t// Make sure to properly center fallback icon\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\t}\\n\\n\\t&__image {\\n\\t\\tmax-width: 100%;\\n\\t\\tbackground-color: var(--color-main-background);\\n\\n\\t\\tobject-fit: cover;\\n\\t}\\n\\n\\t// Failed preview, fallback to mime icon\\n\\t&__preview--failed &__image {\\n\\t\\twidth: calc(var(--margin) * 8);\\n\\t\\t// Center mime icon\\n\\t\\tmargin: auto;\\n\\t\\tbackground-color: transparent !important;\\n\\n\\t\\tobject-fit: initial;\\n\\t}\\n\\n\\t&__title {\\n\\t\\toverflow: hidden;\\n\\t\\t// also count preview border\\n\\t\\tmax-width: calc(var(--width) + 2*2px);\\n\\t\\tpadding: var(--margin);\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t}\\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-navigation[data-v-83bb0f06] .app-navigation-entry-icon{background-repeat:no-repeat;background-position:center}.app-navigation>ul.app-navigation__list[data-v-83bb0f06]{padding-bottom:var(--default-grid-baseline, 4px)}.app-navigation-entry__settings[data-v-83bb0f06]{height:auto !important;overflow:hidden !important;padding-top:0 !important;flex:0 0 auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/Navigation.vue\"],\"names\":[],\"mappings\":\"AAEA,4DACC,2BAAA,CACA,0BAAA,CAGD,yDAEC,gDAAA,CAGD,iDACC,sBAAA,CACA,0BAAA,CACA,wBAAA,CAEA,aAAA\",\"sourcesContent\":[\"\\n// TODO: remove when https://github.com/nextcloud/nextcloud-vue/pull/3539 is in\\n.app-navigation::v-deep .app-navigation-entry-icon {\\n\\tbackground-repeat: no-repeat;\\n\\tbackground-position: center;\\n}\\n\\n.app-navigation > ul.app-navigation__list {\\n\\t// Use flex gap value for more elegant spacing\\n\\tpadding-bottom: var(--default-grid-baseline, 4px);\\n}\\n\\n.app-navigation-entry__settings {\\n\\theight: auto !important;\\n\\toverflow: hidden !important;\\n\\tpadding-top: 0 !important;\\n\\t// Prevent shrinking or growing\\n\\tflex: 0 0 auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".templates-picker__form[data-v-55dd9121]{padding:calc(var(--margin)*2);padding-bottom:0}.templates-picker__form h2[data-v-55dd9121]{text-align:center;font-weight:bold;margin:var(--margin) 0 calc(var(--margin)*2)}.templates-picker__list[data-v-55dd9121]{display:grid;grid-gap:calc(var(--margin)*2);grid-auto-columns:1fr;max-width:calc(var(--fullwidth)*6);grid-template-columns:repeat(auto-fit, var(--fullwidth));grid-auto-rows:1fr;justify-content:center}.templates-picker__buttons[data-v-55dd9121]{display:flex;justify-content:space-between;padding:calc(var(--margin)*2) var(--margin);position:sticky;bottom:0;background-image:linear-gradient(0, var(--gradient-main-background))}.templates-picker__buttons button[data-v-55dd9121],.templates-picker__buttons input[type=submit][data-v-55dd9121]{height:44px}.templates-picker[data-v-55dd9121] .modal-container{position:relative}.templates-picker__loading[data-v-55dd9121]{position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;margin:0;background-color:var(--color-main-background-translucent)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files/src/views/TemplatePicker.vue\"],\"names\":[],\"mappings\":\"AAEC,yCACC,6BAAA,CAEA,gBAAA,CAEA,4CACC,iBAAA,CACA,gBAAA,CACA,4CAAA,CAIF,yCACC,YAAA,CACA,8BAAA,CACA,qBAAA,CAEA,kCAAA,CACA,wDAAA,CAEA,kBAAA,CAEA,sBAAA,CAGD,4CACC,YAAA,CACA,6BAAA,CACA,2CAAA,CACA,eAAA,CACA,QAAA,CACA,oEAAA,CAEA,kHACC,WAAA,CAKF,oDACC,iBAAA,CAGD,4CACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,sBAAA,CACA,UAAA,CACA,WAAA,CACA,QAAA,CACA,yDAAA\",\"sourcesContent\":[\"\\n.templates-picker {\\n\\t&__form {\\n\\t\\tpadding: calc(var(--margin) * 2);\\n\\t\\t// Will be handled by the buttons\\n\\t\\tpadding-bottom: 0;\\n\\n\\t\\th2 {\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t\\tmargin: var(--margin) 0 calc(var(--margin) * 2);\\n\\t\\t}\\n\\t}\\n\\n\\t&__list {\\n\\t\\tdisplay: grid;\\n\\t\\tgrid-gap: calc(var(--margin) * 2);\\n\\t\\tgrid-auto-columns: 1fr;\\n\\t\\t// We want maximum 5 columns. Putting 6 as we don't count the grid gap. So it will always be lower than 6\\n\\t\\tmax-width: calc(var(--fullwidth) * 6);\\n\\t\\tgrid-template-columns: repeat(auto-fit, var(--fullwidth));\\n\\t\\t// Make sure all rows are the same height\\n\\t\\tgrid-auto-rows: 1fr;\\n\\t\\t// Center the columns set\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: calc(var(--margin) * 2) var(--margin);\\n\\t\\tposition: sticky;\\n\\t\\tbottom: 0;\\n\\t\\tbackground-image: linear-gradient(0, var(--gradient-main-background));\\n\\n\\t\\tbutton, input[type='submit'] {\\n\\t\\t\\theight: 44px;\\n\\t\\t}\\n\\t}\\n\\n\\t// Make sure we're relative for the loading emptycontent on top\\n\\t::v-deep .modal-container {\\n\\t\\tposition: relative;\\n\\t}\\n\\n\\t&__loading {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 0;\\n\\t\\tleft: 0;\\n\\t\\tjustify-content: center;\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tmargin: 0;\\n\\t\\tbackground-color: var(--color-main-background-translucent);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 2181;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2181: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(91320); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","getCurrentDirectory","currentDirInfo","OCA","Files","App","currentFileList","dirInfo","path","name","replace","getTemplates","axios","generateOcsUrl","response","data","ocs","createFromTemplate","filePath","templatePath","templateType","inheritAttrs","props","basename","type","required","checked","default","fileid","filename","previewUrl","hasPreview","mime","ratio","failedPreview","computed","nameWithoutExt","id","realPreviewUrl","getCurrentUser","document","getElementById","value","pathSections","startsWith","split","relativePath","forEach","section","encodeURIComponent","mimeIcon","methods","onCheck","onFailure","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_c","_self","staticClass","attrs","domProps","on","_v","class","_s","components","NcEmptyContent","NcModal","TemplatePreview","logger","loading","opened","provider","emptyTemplate","selectedTemplate","style","open","templates","fetchedProvider","close","onSubmit","currentDirectory","fileList","extension","normalize","fileInfo","model","filesClient","fileAction","$file","dir","fileActions","fileInfoModel","console","showError","$event","preventDefault","stopPropagation","apply","arguments","t","_b","_l","template","key","_e","getLoggerBuilder","setApp","detectUser","build","Vue","n","TemplatePickerRoot","createElement","body","appendChild","loadState","templatesPath","debug","TemplatePicker","TemplatePickerView","propsData","$mount","window","addEventListener","initTemplatesPlugin","attach","menu","addMenuEntry","displayName","templateName","iconClass","fileType","actionHandler","initTemplatesFolder","removeMenuEntry","OC","Plugins","register","index","newTemplatePlugin","app","label","FilesPlugin","copySystemTemplates","changeDirectory","template_path","error","subscribe","query","setFilter","registerLegacyView","order","icon","parent","classes","expanded","params","OCP","Navigation","legacy","sticky","includes","view","isValidNavigation","isUniqueNavigation","_views","e","Error","message","push","_currentView","views","find","search","getFiles","isSvg","columns","isValidColumn","emptyView","column","title","property","sortFunction","summary","ChartPie","NcAppNavigationItem","NcProgressBar","loadingStorageStats","storageStats","storageStatsTitle","usedQuotaByte","used","quota","storageStatsTooltip","beforeMount","setInterval","debounceUpdateStorageStats","throttleUpdateStorageStats","updateStorageStats","event","slot","relative","Math","min","el","mounted","show_hidden","crop_image_previews","Clipboard","NcAppSettingsDialog","NcAppSettingsSection","NcCheckboxRadioSwitch","NcInputField","Setting","userConfig","settings","webdavUrl","webdavDocs","appPasswordUrl","webdavUrlCopied","beforeDestroy","onClose","setConfig","emit","copyCloudId","navigator","showSuccess","setTimeout","length","setting","target","select","scopedSlots","_u","fn","proxy","Cog","NcAppNavigation","SettingsModal","NavigationQuota","settingsOpened","currentViewId","currentView","parentViews","filter","sort","childViews","reduce","list","watch","showView","newAppContent","itemId","onLegacyNavigationChanged","onToggleExpand","show","generateToNavigation","openSettings","onSettingsClose","child","Settings","_settings","_name","_el","_open","_close","Router","mode","base","generateUrl","linkActiveClass","routes","alias","stringifyQuery","result","stringify","NavigationService","Object","assign","legacyViews","SettingsService","SettingsModel","NavigationView","router","values","sublist","subview","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","every","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}
-{"version":3,"file":"settings-vue-settings-personal-security.js?v=2ca74a913a7abe446629","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?70ef","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?ca52","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?b8ab","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?0836","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?5c2d","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?309d","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?6bad","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?a091","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=32a32b16&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@change=\"rename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span :title=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<NcActions v-if=\"!token.current\"\n\t\t\t\t:title=\"t('settings', 'Device settings')\"\n\t\t\t\t:aria-label=\"t('settings', 'Device settings')\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<NcActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\t\t\t</NcActions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tNcActions,\n\tNcActionButton,\n\tNcActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) (?:ownCloud|Nextcloud)-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n\t// Neon 1.0.0+1\n\tneon: /Neon \\d+\\.\\d+\\.\\d+\\+\\d+/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n\tneon: 'Neon',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\toldName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.oldName = this.token.name\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.oldName)\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\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!./AuthToken.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!./AuthToken.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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=0f73a400&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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 \"0f73a400\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.cancelRename.apply(null, arguments)}],\"change\":_vm.rename,\"input\":function($event){if($event.target.composing)return;_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{staticClass:\"last-activity\",attrs:{\"title\":_vm.lastActivity}},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('NcActions',{attrs:{\"title\":_vm.t('settings', 'Device settings'),\"aria-label\":_vm.t('settings', 'Device settings'),\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],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!./AuthTokenList.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!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggle-scope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&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!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=4f8ceff3&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f8ceff3\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggle-scope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div v-if=\"!adding\" class=\"row spacing\">\n\t\t<!-- Port to TextField component when available -->\n\t\t<input v-model=\"deviceName\"\n\t\t\ttype=\"text\"\n\t\t\t:maxlength=\"120\"\n\t\t\t:disabled=\"loading\"\n\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t@keydown.enter=\"submit\">\n\t\t<NcButton :disabled=\"loading || deviceName.length === 0\"\n\t\t\ttype=\"primary\"\n\t\t\t@click=\"submit\">\n\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t</NcButton>\n\t</div>\n\t<div v-else class=\"spacing\">\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-username\" class=\"app-password-label\">{{ t('settings', 'Username') }}</label>\n\t\t\t<input id=\"app-username\"\n\t\t\t\t:value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-password\" class=\"app-password-label\">{{ t('settings', 'Password') }}</label>\n\t\t\t<input id=\"app-password\"\n\t\t\t\tref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:title=\"copyTooltipOptions\"\n\t\t\t\t:aria-label=\"copyTooltipOptions\"\n\t\t\t\t@click=\"copyPassword\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Check v-if=\"copied\" :size=\"20\" />\n\t\t\t\t\t<ContentCopy v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { showError } from '@nextcloud/dialogs'\nimport { getRootUrl } from '@nextcloud/router'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\n\nimport Check from 'vue-material-design-icons/Check.vue'\nimport ContentCopy from 'vue-material-design-icons/ContentCopy.vue'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tCheck,\n\t\tContentCopy,\n\t\tNcButton,\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tcopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn t('settings', 'Copied!')\n\t\t\t}\n\t\t\treturn t('settings', 'Copy')\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tasync copyPassword() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.appPassword)\n\t\t\t\tthis.copied = true\n\t\t\t} catch (e) {\n\t\t\t\tthis.copied = false\n\t\t\t\tconsole.error(e)\n\t\t\t\tshowError(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t\twidth: 100px;\n\t}\n\n\t.row input {\n\t\theight: 44px !important;\n\t\tpadding: 7px 12px;\n\t\tmargin-right: 12px;\n\t\twidth: 200px;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n\n\t.button-vue{\n\t\tdisplay:inline-block;\n\t\tmargin: 3px 3px 3px 3px;\n\t}\n\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.spacing {\n\t\tpadding-top: 16px;\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!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=32a32b16&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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=32a32b16&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=32a32b16&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=32a32b16&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 \"32a32b16\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.adding)?_c('div',{staticClass:\"row spacing\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"maxlength\":120,\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || _vm.deviceName.length === 0,\"type\":\"primary\"},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\")])],1):_c('div',{staticClass:\"spacing\"},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-username\"}},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"id\":\"app-username\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-password\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"id\":\"app-password\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"title\":_vm.copyTooltipOptions,\"aria-label\":_vm.copyTooltipOptions},on:{\"click\":_vm.copyPassword},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.copied)?_c('Check',{attrs:{\"size\":20}}):_c('ContentCopy',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggle-scope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.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!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=240596c0&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.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 \"240596c0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggle-scope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\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, \".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\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, \"table[data-v-4f8ceff3]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-4f8ceff3]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-4f8ceff3]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-4f8ceff3]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-4f8ceff3],.token-list tr td>a.icon[data-v-4f8ceff3]:focus,.token-list tr.active td>a.icon[data-v-4f8ceff3]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\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-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\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-password-row[data-v-32a32b16]{display:flex;align-items:center}.app-password-row .icon[data-v-32a32b16]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-32a32b16]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-32a32b16]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-32a32b16]{width:245px;font-family:monospace}.button-vue[data-v-32a32b16]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-32a32b16]{display:flex;align-items:center}.spacing[data-v-32a32b16]{padding-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA\",\"sourcesContent\":[\"\\n.app-password-row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n\\twidth: 100px;\\n}\\n\\n.row input {\\n\\theight: 44px !important;\\n\\tpadding: 7px 12px;\\n\\tmargin-right: 12px;\\n\\twidth: 200px;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\\n.button-vue{\\n\\tdisplay:inline-block;\\n\\tmargin: 3px 3px 3px 3px;\\n}\\n\\n.row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n}\\n\\n.spacing {\\n\\tpadding-top: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4783;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4783: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(56619); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","ie","edge","firefox","chrome","safari","androidChrome","iphone","ipad","iosClient","androidClient","iosTalkClient","androidTalkClient","davx5","webPirate","sailfishBrowser","neon","productName","name","components","NcActions","NcActionButton","NcActionCheckbox","props","token","type","required","data","showMore","renaming","newName","oldName","actionOpen","computed","lastActivityRelative","lastActivity","iconName","os","version","icon","wiping","methods","startRename","cancelRename","revoke","rename","wipe","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","class","attrs","id","staticClass","_v","canRename","directives","rawName","value","expression","ref","domProps","on","$event","indexOf","_k","keyCode","key","apply","arguments","target","composing","_s","t","_e","current","scope","filesystem","stopPropagation","preventDefault","$emit","canDelete","AuthToken","tokens","sortedTokens","toggleScope","onDelete","onWipe","length","_l","Check","ContentCopy","NcButton","QR","add","adding","loading","deviceName","appPassword","loginName","copied","showQR","qrUrl","copyTooltipOptions","selectInput","e","submit","confirmPassword","then","catch","console","OC","copyPassword","navigator","showError","setTimeout","reset","scopedSlots","_u","fn","proxy","cb","AuthTokenSetupDialogue","AuthTokenList","canCreateToken","baseUrl","addNewToken","toggleTokenScope","updateToken","deleteToken","wipeToken","resolve","axios","undefined","sanitize","__webpack_nonce__","btoa","requestToken","Vue","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"settings-vue-settings-personal-security.js?v=a98ba53f8ad87946186f","mappings":";6BAAIA,sHC4FJ,GACAC,GAAAA,6CAEAC,KAAAA,uIAEAC,QAAAA,4FAEAC,OAAAA,uJAEAC,OAAAA,2IAEAC,cAAAA,oDACAC,OAAAA,8DACAC,KAAAA,6DACAC,UAAAA,uDACAC,cAAAA,+DACAC,cAAAA,2CACAC,kBAAAA,+CAEAC,MAAAA,2BAEAC,UAAAA,+BAEAC,gBAAAA,qCAEAC,KAAAA,2BAEA,GACAf,GAAAA,EAAAA,UAAAA,qBACAC,KAAAA,EAAAA,UAAAA,QACAC,QAAAA,EAAAA,UAAAA,WACAC,OAAAA,EAAAA,UAAAA,iBACAC,OAAAA,EAAAA,UAAAA,UACAC,cAAAA,EAAAA,UAAAA,6BACAC,OAAAA,EAAAA,UAAAA,UACAC,KAAAA,EAAAA,UAAAA,QACAC,UAAAA,EAAAA,UAAAA,wBAAAA,CAAAQ,YAAAA,OAAAA,YAAAA,cACAP,cAAAA,EAAAA,UAAAA,4BAAAA,CAAAO,YAAAA,OAAAA,YAAAA,cACAN,cAAAA,EAAAA,UAAAA,6BAAAA,CAAAM,YAAAA,OAAAA,YAAAA,cACAL,kBAAAA,EAAAA,UAAAA,iCAAAA,CAAAK,YAAAA,OAAAA,YAAAA,cACAJ,MAAAA,QACAC,UAAAA,YACAC,gBAAAA,kBACAC,KAAAA,QAEA,GACAf,GAAAA,eACAC,KAAAA,eACAC,QAAAA,eACAC,OAAAA,eACAC,OAAAA,eACAC,cAAAA,aACAC,OAAAA,aACAC,KAAAA,cACAC,UAAAA,aACAC,cAAAA,aACAC,cAAAA,aACAC,kBAAAA,aACAC,MAAAA,aACAC,UAAAA,YACAC,gBAAAA,aCxJsL,ED2JtL,CACAG,KAAAA,YACAC,WAAAA,CACAC,UAAAA,EAAAA,GACAC,eAAAA,EAAAA,GACAC,iBAAAA,EAAAA,IAEAC,MAAAA,CACAC,MAAAA,CACAC,KAAAA,OACAC,UAAAA,IAGAC,KAAAA,WACA,OACAC,SAAAA,KAAAA,MAAAA,UAAAA,KAAAA,MAAAA,UACAC,UAAAA,EACAC,QAAAA,GACAC,QAAAA,GACAC,YAAAA,EAEA,EACAC,SAAAA,CACAC,qBAAAA,WACA,gEACA,EACAC,aAAAA,WACA,4DACA,EACAC,SAAAA,WAEA,2FAEA,KACA,IAEA,mDACAC,GAAAA,EAAAA,GACAC,QAAAA,EAAAA,KAEAC,EAAAA,gBAIA,sBACA,kBACA,gBACA,oBACA,IAEArB,EADA,WACAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,MAAAA,EAAAA,GACA,KACAA,EAAAA,GAAAA,IAAAA,EAAAA,GAEAA,EAAAA,GAGAqB,EAAAA,EAAAA,GAEA,CAKA,OAJA,qBACArB,EAAAA,EAAAA,WAAAA,iBAGA,CACAqB,KAAAA,EACArB,KAAAA,EAEA,EACAsB,OAAAA,WACA,0BACA,GAEAC,QAAAA,CACAC,YAAAA,WAAA,WAEA,mBAEA,6BACA,6BACA,iBACA,2BACA,sBACA,GACA,EACAC,aAAAA,WACA,iBACA,4CACA,EACAC,OAAAA,WACA,mBACA,+BACA,EACAC,OAAAA,WACA,iBACA,4CACA,EACAC,KAAAA,WACA,mBACA,6BACA,qIEpPIC,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,YAAiB,WALlD,eCbIM,GAAY,OACd,GCTW,WAAkB,IAAIC,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,KAAK,CAACE,MAAMJ,EAAId,OAAOmB,MAAM,CAAC,UAAUL,EAAI9B,MAAMoC,KAAK,CAACJ,EAAG,KAAK,CAACK,YAAY,UAAU,CAACL,EAAG,MAAM,CAACE,MAAMJ,EAAIlB,SAASG,SAASe,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACK,YAAY,cAAc,CAAEP,EAAI9B,MAAMuC,WAAaT,EAAIzB,SAAU2B,EAAG,QAAQ,CAACQ,WAAW,CAAC,CAAC9C,KAAK,QAAQ+C,QAAQ,UAAUC,MAAOZ,EAAIxB,QAASqC,WAAW,YAAYC,IAAI,QAAQT,MAAM,CAAC,KAAO,QAAQU,SAAS,CAAC,MAASf,EAAIxB,SAAUwC,GAAG,CAAC,MAAQ,CAAC,SAASC,GAAQ,OAAIA,EAAO9C,KAAK+C,QAAQ,QAAQlB,EAAImB,GAAGF,EAAOG,QAAQ,QAAQ,GAAGH,EAAOI,IAAI,SAAgB,KAAYrB,EAAIT,OAAO+B,MAAM,KAAMC,UAAU,EAAE,SAASN,GAAQ,OAAIA,EAAO9C,KAAK+C,QAAQ,QAAQlB,EAAImB,GAAGF,EAAOG,QAAQ,MAAM,GAAGH,EAAOI,IAAI,CAAC,MAAM,WAAkB,KAAYrB,EAAIX,aAAaiC,MAAM,KAAMC,UAAU,GAAG,OAASvB,EAAIT,OAAO,MAAQ,SAAS0B,GAAWA,EAAOO,OAAOC,YAAiBzB,EAAIxB,QAAQyC,EAAOO,OAAOZ,MAAK,KAAKV,EAAG,OAAO,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAIlB,SAASlB,SAASoC,EAAIQ,GAAG,KAAMR,EAAId,OAAQgB,EAAG,OAAO,CAACK,YAAY,kBAAkB,CAACP,EAAIQ,GAAG,IAAIR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,2BAA2B,OAAO3B,EAAI4B,OAAO5B,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACA,EAAG,OAAO,CAACK,YAAY,gBAAgBF,MAAM,CAAC,MAAQL,EAAInB,eAAe,CAACmB,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAIpB,2BAA2BoB,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACK,YAAY,QAAQ,CAAGP,EAAI9B,MAAM2D,QAA8zD7B,EAAI4B,KAAzzD1B,EAAG,YAAY,CAACG,MAAM,CAAC,MAAQL,EAAI2B,EAAE,WAAY,mBAAmB,aAAa3B,EAAI2B,EAAE,WAAY,mBAAmB,KAAO3B,EAAItB,YAAYsC,GAAG,CAAC,cAAc,SAASC,GAAQjB,EAAItB,WAAWuC,CAAM,IAAI,CAAqB,IAAnBjB,EAAI9B,MAAMC,KAAY+B,EAAG,mBAAmB,CAACG,MAAM,CAAC,QAAUL,EAAI9B,MAAM4D,MAAMC,YAAYf,GAAG,CAAC,OAAS,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIkC,MAAM,eAAgBlC,EAAI9B,MAAO,cAAe8B,EAAI9B,MAAM4D,MAAMC,WAAW,IAAI,CAAC/B,EAAIQ,GAAG,aAAaR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,4BAA4B,cAAc3B,EAAI4B,KAAK5B,EAAIQ,GAAG,KAAMR,EAAI9B,MAAMuC,UAAWP,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,eAAeW,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIZ,YAAYkC,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,aAAaR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,WAAW,cAAc3B,EAAI4B,KAAK5B,EAAIQ,GAAG,KAAMR,EAAI9B,MAAMiE,UAAW,CAAqB,IAAnBnC,EAAI9B,MAAMC,KAAY,CAAC+B,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,eAAeW,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIV,OAAOgC,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,iBAAiBR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,WAAW,kBAAkB3B,EAAIQ,GAAG,KAAKN,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,eAAeW,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIR,KAAK8B,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,iBAAiBR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gBAAgB,mBAAuC,IAAnB3B,EAAI9B,MAAMC,KAAY+B,EAAG,iBAAiB,CAACG,MAAM,CAAC,KAAO,cAAc,MAAQL,EAAI2B,EAAE,WAAY,WAAWX,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOe,kBAAkBf,EAAOgB,iBAAwBjC,EAAIV,OAAOgC,MAAM,KAAMC,UAAU,IAAI,CAACvB,EAAIQ,GAAG,eAAeR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,oGAAoG,gBAAgB3B,EAAI4B,MAAM5B,EAAI4B,MAAM,IAAa,IACnlG,GACsB,IDUpB,EACA,KACA,WACA,MEfwL,EC8C1L,CACAhE,KAAAA,gBACAC,WAAAA,CACAuE,UH9BerC,EAAiB,SGgChC9B,MAAAA,CACAoE,OAAAA,CACAlE,KAAAA,MACAC,UAAAA,IAGAO,SAAAA,CACA2D,aAAAA,WACA,+CACA,kCAEA,OADA,4BACA,CACA,GACA,GAEAnD,QAAAA,CACAoD,YAAAA,SAAAA,EAAAA,EAAAA,GAEA,gCACA,EACAhD,OAAAA,SAAAA,EAAAA,GAEA,wBACA,EACAiD,SAAAA,SAAAA,GAEA,sBACA,EACAC,OAAAA,SAAAA,GAEA,oBACA,eCvEI,EAAU,CAAC,EAEf,EAAQ/C,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,eCVI,EAAU,CAAC,EAEf,EAAQJ,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,ICDA,GAXgB,OACd,GCVW,WAAkB,IAAIE,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,QAAQ,CAACG,MAAM,CAAC,GAAK,qBAAqB,CAAEL,EAAIqC,OAAOK,OAAQxC,EAAG,QAAQ,CAACA,EAAG,KAAK,CAACA,EAAG,MAAMF,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,cAAc3B,EAAIQ,GAAG,KAAKN,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,qBAAqB3B,EAAIQ,GAAG,KAAKN,EAAG,UAAUF,EAAI4B,KAAK5B,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACK,YAAY,cAAcP,EAAI2C,GAAI3C,EAAIsC,cAAc,SAASpE,GAAO,OAAOgC,EAAG,YAAY,CAACmB,IAAInD,EAAMoC,GAAGD,MAAM,CAAC,MAAQnC,GAAO8C,GAAG,CAAC,eAAehB,EAAIuC,YAAY,OAASvC,EAAIT,OAAO,OAASS,EAAIwC,SAAS,KAAOxC,EAAIyC,SAAS,IAAG,IAC5kB,GACsB,IDWpB,EACA,KACA,WACA,MAI8B,mNE2EhC,OACA7E,KAAAA,yBACAC,WAAAA,CACA+E,MAAAA,EAAAA,QACAC,YAAAA,EAAAA,EACAC,SAAAA,IACAC,GAAAA,KAEA9E,MAAAA,CACA+E,IAAAA,CACA7E,KAAAA,SACAC,UAAAA,IAGAC,KAAAA,WACA,OACA4E,QAAAA,EACAC,SAAAA,EACAC,WAAAA,GACAC,YAAAA,GACAC,UAAAA,GACAC,QAAAA,EACAC,QAAAA,EACAC,MAAAA,GAEA,EACA7E,SAAAA,CACA8E,mBAAAA,WACA,mBACA,wBAEA,oBACA,GAEAtE,QAAAA,CACAuE,YAAAA,SAAAA,GACAC,EAAAA,cAAAA,QACA,EACAC,OAAAA,WAAA,YACAC,EAAAA,EAAAA,mBACAC,MAAAA,WAEA,OADA,aACA,mBACA,IACAA,MAAAA,SAAAA,GACA,YACA,wBACA,sBAEA,4EACA,iGAEA,wBACA,4BACA,GACA,IACAC,OAAAA,SAAAA,GACAC,EAAAA,MAAAA,sCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,sCAEA,SACA,GACA,EACAC,aAAAA,WAAA,qKAEAC,UAAAA,UAAAA,UAAAA,EAAAA,aAAA,OACA,4DAEA,YACAH,EAAAA,MAAAA,EAAAA,KACAI,EAAAA,EAAAA,IAAAA,EAAAA,WAAAA,0DAAA,QAIA,OAJA,UAEAC,YAAAA,WACA,WACA,mQAEA,EACAC,MAAAA,WACA,eACA,gBACA,eACA,cACA,mBACA,oBACA,iBACA,ICpLmM,cCW/L,EAAU,CAAC,EAEf,EAAQ5E,kBAAoB,IAC5B,EAAQC,cAAgB,IAElB,EAAQC,OAAS,SAAc,KAAM,QAE3C,EAAQC,OAAS,IACjB,EAAQC,mBAAqB,IAEhB,IAAI,IAAS,GAKJ,KAAW,YAAiB,WALlD,ICbI,GAAY,OACd,GCTW,WAAkB,IAAIE,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAASF,EAAIiD,OAAi0B/C,EAAG,MAAM,CAACK,YAAY,WAAW,CAACP,EAAIQ,GAAG,OAAOR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,+DAA+D,OAAO3B,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gEAAgE,QAAQzB,EAAG,MAAM,CAACK,YAAY,oBAAoB,CAACL,EAAG,QAAQ,CAACK,YAAY,qBAAqBF,MAAM,CAAC,IAAM,iBAAiB,CAACL,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gBAAgB3B,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACK,YAAY,aAAaF,MAAM,CAAC,GAAK,eAAe,KAAO,OAAO,SAAW,YAAYU,SAAS,CAAC,MAAQf,EAAIqD,WAAWrC,GAAG,CAAC,MAAQhB,EAAI0D,iBAAiB1D,EAAIQ,GAAG,KAAKN,EAAG,MAAM,CAACK,YAAY,oBAAoB,CAACL,EAAG,QAAQ,CAACK,YAAY,qBAAqBF,MAAM,CAAC,IAAM,iBAAiB,CAACL,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,gBAAgB3B,EAAIQ,GAAG,KAAKN,EAAG,QAAQ,CAACY,IAAI,cAAcP,YAAY,aAAaF,MAAM,CAAC,GAAK,eAAe,KAAO,OAAO,SAAW,YAAYU,SAAS,CAAC,MAAQf,EAAIoD,aAAapC,GAAG,CAAC,MAAQhB,EAAI0D,eAAe1D,EAAIQ,GAAG,KAAKN,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,WAAW,MAAQL,EAAIyD,mBAAmB,aAAazD,EAAIyD,oBAAoBzC,GAAG,CAAC,MAAQhB,EAAIkE,cAAcK,YAAYvE,EAAIwE,GAAG,CAAC,CAACnD,IAAI,OAAOoD,GAAG,WAAW,MAAO,CAAEzE,EAAIsD,OAAQpD,EAAG,QAAQ,CAACG,MAAM,CAAC,KAAO,MAAMH,EAAG,cAAc,CAACG,MAAM,CAAC,KAAO,MAAM,EAAEqE,OAAM,OAAU1E,EAAIQ,GAAG,KAAKN,EAAG,WAAW,CAACc,GAAG,CAAC,MAAQhB,EAAIsE,QAAQ,CAACtE,EAAIQ,GAAG,WAAWR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,SAAS,aAAa,GAAG3B,EAAIQ,GAAG,KAAKN,EAAG,MAAM,CAACK,YAAY,oBAAoB,CAACL,EAAG,OAAO,CAACK,YAAY,uBAAuBP,EAAIQ,GAAG,KAAOR,EAAIuD,OAA2JrD,EAAG,KAAK,CAACG,MAAM,CAAC,MAAQL,EAAIwD,SAA/KtD,EAAG,IAAI,CAACc,GAAG,CAAC,MAAQ,SAASC,GAAQjB,EAAIuD,QAAS,CAAI,IAAI,CAACvD,EAAIQ,GAAG,WAAWR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,iCAAiC,aAAkD,KAA59EzB,EAAG,MAAM,CAACK,YAAY,eAAe,CAACL,EAAG,IAAI,CAACG,MAAM,CAAC,GAAK,+BAA+B,CAACH,EAAG,QAAQ,CAACQ,WAAW,CAAC,CAAC9C,KAAK,QAAQ+C,QAAQ,UAAUC,MAAOZ,EAAImD,WAAYtC,WAAW,eAAeR,MAAM,CAAC,KAAO,OAAO,UAAY,IAAI,SAAWL,EAAIkD,QAAQ,YAAclD,EAAI2B,EAAE,WAAY,aAAaZ,SAAS,CAAC,MAASf,EAAImD,YAAanC,GAAG,CAAC,QAAU,SAASC,GAAQ,OAAIA,EAAO9C,KAAK+C,QAAQ,QAAQlB,EAAImB,GAAGF,EAAOG,QAAQ,QAAQ,GAAGH,EAAOI,IAAI,SAAgB,KAAYrB,EAAI4D,OAAOtC,MAAM,KAAMC,UAAU,EAAE,MAAQ,SAASN,GAAWA,EAAOO,OAAOC,YAAiBzB,EAAImD,WAAWlC,EAAOO,OAAOZ,MAAK,KAAKZ,EAAIQ,GAAG,KAAKN,EAAG,WAAW,CAACG,MAAM,CAAC,SAAWL,EAAIkD,SAAqC,IAA1BlD,EAAImD,WAAWT,OAAa,KAAO,WAAW1B,GAAG,CAAC,MAAQhB,EAAI4D,SAAS,CAAC5D,EAAIQ,GAAG,WAAWR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,4BAA4B,aAAa,IACr4B,GACsB,IDUpB,EACA,KACA,WACA,MAIF,EAAe,EAAiB,4IE0BhC,IAiBA,kCAEA,OADAgD,EAAAA,GACA,CACA,GAEA,IACA/G,KAAAA,mBACAC,WAAAA,CACA+G,uBAAAA,EACAC,cAAAA,GAEA5G,MAAAA,CACAoE,OAAAA,CACAlE,KAAAA,MACAC,UAAAA,GAEA0G,eAAAA,CACA3G,KAAAA,QACAC,UAAAA,IAGAC,KAAAA,WACA,OACA0G,SAAAA,EAAAA,EAAAA,aAAAA,iCAEA,EACA5F,QAAAA,CACA6F,YAAAA,SAAAA,GAAA,WACAhB,EAAAA,MAAAA,2BAAAA,GAEA,OACApG,KAAAA,GAEA,sCACAkG,MAAAA,SAAAA,GAAA,iBACAA,KAAAA,IAAAA,WAAA,wCAEAA,KAAAA,IAAAA,SAAAA,GAAA,wCACAC,OAAAA,SAAAA,GAGA,MAFAC,EAAAA,MAAAA,KAAAA,gCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,sCACA,CACA,GACA,EACAgB,iBAAAA,SAAAA,EAAAA,EAAAA,GACAjB,EAAAA,MAAAA,2BAAAA,EAAAA,GAAAA,EAAAA,GAEA,iBAGA,OAFA9F,EAAAA,MAAAA,GAAAA,EAEA,oBACA4F,KAAAA,IAAAA,WAAA,8CACAC,OAAAA,SAAAA,GAOA,MANAC,EAAAA,MAAAA,KAAAA,mCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,4CAGA/F,EAAAA,MAAAA,GAAAA,EAEA,CACA,GACA,EACAqB,OAAAA,SAAAA,EAAAA,GACAyE,EAAAA,MAAAA,qBAAAA,EAAAA,GAAAA,EAAAA,KAAAA,GAEA,aAGA,OAFA9F,EAAAA,KAAAA,EAEA,oBACA4F,KAAAA,IAAAA,WAAA,6CACAC,OAAAA,SAAAA,GACAC,EAAAA,MAAAA,KAAAA,kCAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,2CAGA/F,EAAAA,KAAAA,CACA,GACA,EACAgH,YAAAA,SAAAA,GACA,8CACApB,MAAAA,SAAAA,GAAA,gBACA,EACAqB,YAAAA,SAAAA,GAAA,WAMA,OALAnB,EAAAA,MAAAA,qBAAAA,GAGA,4DAEA,wCACAF,MAAAA,SAAAA,GAAA,iBACAA,KAAAA,IAAAA,WAAA,wCACAC,OAAAA,SAAAA,GACAC,EAAAA,MAAAA,KAAAA,6BAAAA,GACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,mCAIA,gBACA,GACA,EACAmB,UAAAA,SAAAA,GAAA,4IACA,OAAApB,EAAAA,MAAAA,mBAAAA,GAAA,mBAGAH,EAAAA,EAAAA,mBAAA,uBAxHA,yBACAI,GAAAA,QAAAA,QACAtC,EAAAA,WAAAA,0DACAA,EAAAA,WAAAA,gBACA0D,GACA,EAEA,IAmHA,iCACA,OAAArB,EAAAA,MAAAA,wBAAA,2CAGAsB,EAAAA,QAAAA,KAAAA,EAAAA,QAAAA,SAAAA,EAAAA,IAAA,QACAtB,EAAAA,MAAAA,6BAEA9F,EAAAA,KAAAA,EAAA,kDAEA8F,EAAAA,MAAAA,2BAAAA,EAAAA,IACAC,GAAAA,aAAAA,cAAAA,EAAAA,WAAAA,iDAAA,yOAEA,ICpL6L,MCkB7L,IAXgB,OACd,ICRW,WAAkB,IAAIjE,EAAIC,KAAKC,EAAGF,EAAIG,MAAMD,GAAG,OAAOA,EAAG,MAAM,CAACK,YAAY,UAAUF,MAAM,CAAC,GAAK,aAAa,CAACH,EAAG,KAAK,CAACF,EAAIQ,GAAGR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,qBAAsB,CAAC,OAAG4D,EAAW,CAACC,UAAU,QAAYxF,EAAIQ,GAAG,KAAKN,EAAG,IAAI,CAACK,YAAY,mCAAmC,CAACP,EAAIQ,GAAG,SAASR,EAAI0B,GAAG1B,EAAI2B,EAAE,WAAY,yEAAyE,UAAU3B,EAAIQ,GAAG,KAAKN,EAAG,gBAAgB,CAACG,MAAM,CAAC,OAASL,EAAIqC,QAAQrB,GAAG,CAAC,eAAehB,EAAIiF,iBAAiB,OAASjF,EAAIT,OAAO,OAASS,EAAImF,YAAY,KAAOnF,EAAIoF,aAAapF,EAAIQ,GAAG,KAAMR,EAAI8E,eAAgB5E,EAAG,yBAAyB,CAACG,MAAM,CAAC,IAAML,EAAIgF,eAAehF,EAAI4B,MAAM,EACnrB,GACsB,IDSpB,EACA,KACA,WACA,MAI8B,QEYhC6D,EAAAA,GAAoBC,KAAKzB,GAAG0B,cAE5BC,EAAAA,GAAAA,IAAQC,EAAAA,QAAU,CAAEC,aAAa,IACjCF,EAAAA,GAAAA,UAAAA,EAAkBjE,EAGlB,IADaiE,EAAAA,GAAAA,OAAWG,IACxB,CAAS,CACRC,UAAW,CACV3D,QAAQ4D,EAAAA,EAAAA,GAAU,WAAY,cAC9BnB,gBAAgBmB,EAAAA,EAAAA,GAAU,WAAY,2BAErCC,OAAO,kFCtCNC,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,0pBAA2pB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,0DAA0D,MAAQ,GAAG,SAAW,+PAA+P,eAAiB,CAAC,gvBAAgvB,WAAa,MAE7zD,gECJI6F,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,geAAie,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,mKAAmK,eAAiB,CAAC,ueAAue,WAAa,MAElyC,gECJI6F,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,6GAA8G,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,8DAA8D,MAAQ,GAAG,SAAW,oCAAoC,eAAiB,CAAC,4IAA4I,WAAa,MAErd,+DCJI6F,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAO/F,GAAI,iqBAAkqB,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,MAAQ,GAAG,SAAW,mTAAmT,eAAiB,CAAC,gtBAAgtB,WAAa,MAEr2D,QCNIgG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBjB,IAAjBkB,EACH,OAAOA,EAAaC,QAGrB,IAAIL,EAASC,EAAyBE,GAAY,CACjDlG,GAAIkG,EACJG,QAAQ,EACRD,QAAS,CAAC,GAUX,OANAE,EAAoBJ,GAAUK,KAAKR,EAAOK,QAASL,EAAQA,EAAOK,QAASH,GAG3EF,EAAOM,QAAS,EAGTN,EAAOK,OACf,CAGAH,EAAoBO,EAAIF,E1B5BpBlK,EAAW,GACf6J,EAAoBQ,EAAI,SAASC,EAAQC,EAAUxC,EAAIyC,GACtD,IAAGD,EAAH,CAMA,IAAIE,EAAeC,IACnB,IAASC,EAAI,EAAGA,EAAI3K,EAASgG,OAAQ2E,IAAK,CACrCJ,EAAWvK,EAAS2K,GAAG,GACvB5C,EAAK/H,EAAS2K,GAAG,GACjBH,EAAWxK,EAAS2K,GAAG,GAE3B,IAJA,IAGIC,GAAY,EACPC,EAAI,EAAGA,EAAIN,EAASvE,OAAQ6E,MACpB,EAAXL,GAAsBC,GAAgBD,IAAaM,OAAOC,KAAKlB,EAAoBQ,GAAGW,OAAM,SAASrG,GAAO,OAAOkF,EAAoBQ,EAAE1F,GAAK4F,EAASM,GAAK,IAChKN,EAASU,OAAOJ,IAAK,IAErBD,GAAY,EACTJ,EAAWC,IAAcA,EAAeD,IAG7C,GAAGI,EAAW,CACb5K,EAASiL,OAAON,IAAK,GACrB,IAAIO,EAAInD,SACEc,IAANqC,IAAiBZ,EAASY,EAC/B,CACD,CACA,OAAOZ,CArBP,CAJCE,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAI3K,EAASgG,OAAQ2E,EAAI,GAAK3K,EAAS2K,EAAI,GAAG,GAAKH,EAAUG,IAAK3K,EAAS2K,GAAK3K,EAAS2K,EAAI,GACrG3K,EAAS2K,GAAK,CAACJ,EAAUxC,EAAIyC,EAwB/B,E2B5BAX,EAAoBsB,EAAI,SAASxB,GAChC,IAAIyB,EAASzB,GAAUA,EAAO0B,WAC7B,WAAa,OAAO1B,EAAgB,OAAG,EACvC,WAAa,OAAOA,CAAQ,EAE7B,OADAE,EAAoByB,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CACR,ECNAvB,EAAoByB,EAAI,SAAStB,EAASwB,GACzC,IAAI,IAAI7G,KAAO6G,EACX3B,EAAoB4B,EAAED,EAAY7G,KAASkF,EAAoB4B,EAAEzB,EAASrF,IAC5EmG,OAAOY,eAAe1B,EAASrF,EAAK,CAAEgH,YAAY,EAAMC,IAAKJ,EAAW7G,IAG3E,ECPAkF,EAAoBgC,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOvI,MAAQ,IAAIwI,SAAS,cAAb,EAGhB,CAFE,MAAO9E,GACR,GAAsB,iBAAX+E,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBnC,EAAoB4B,EAAI,SAASQ,EAAKC,GAAQ,OAAOpB,OAAOqB,UAAUC,eAAejC,KAAK8B,EAAKC,EAAO,ECCtGrC,EAAoBqB,EAAI,SAASlB,GACX,oBAAXqC,QAA0BA,OAAOC,aAC1CxB,OAAOY,eAAe1B,EAASqC,OAAOC,YAAa,CAAEpI,MAAO,WAE7D4G,OAAOY,eAAe1B,EAAS,aAAc,CAAE9F,OAAO,GACvD,ECNA2F,EAAoB0C,IAAM,SAAS5C,GAGlC,OAFAA,EAAO6C,MAAQ,GACV7C,EAAO8C,WAAU9C,EAAO8C,SAAW,IACjC9C,CACR,ECJAE,EAAoBgB,EAAI,gBCAxBhB,EAAoB6C,EAAIC,SAASC,SAAWC,KAAKC,SAASC,KAK1D,IAAIC,EAAkB,CACrB,KAAM,GAaPnD,EAAoBQ,EAAEQ,EAAI,SAASoC,GAAW,OAAoC,IAA7BD,EAAgBC,EAAgB,EAGrF,IAAIC,EAAuB,SAASC,EAA4BxL,GAC/D,IAKImI,EAAUmD,EALV1C,EAAW5I,EAAK,GAChByL,EAAczL,EAAK,GACnB0L,EAAU1L,EAAK,GAGIgJ,EAAI,EAC3B,GAAGJ,EAAS+C,MAAK,SAAS1J,GAAM,OAA+B,IAAxBoJ,EAAgBpJ,EAAW,IAAI,CACrE,IAAIkG,KAAYsD,EACZvD,EAAoB4B,EAAE2B,EAAatD,KACrCD,EAAoBO,EAAEN,GAAYsD,EAAYtD,IAGhD,GAAGuD,EAAS,IAAI/C,EAAS+C,EAAQxD,EAClC,CAEA,IADGsD,GAA4BA,EAA2BxL,GACrDgJ,EAAIJ,EAASvE,OAAQ2E,IACzBsC,EAAU1C,EAASI,GAChBd,EAAoB4B,EAAEuB,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBC,GAAW,EAE5B,OAAOpD,EAAoBQ,EAAEC,EAC9B,EAEIiD,EAAqBV,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1FU,EAAmBC,QAAQN,EAAqBO,KAAK,KAAM,IAC3DF,EAAmB7D,KAAOwD,EAAqBO,KAAK,KAAMF,EAAmB7D,KAAK+D,KAAKF,OClDvF1D,EAAoB6D,QAAK7E,ECGzB,IAAI8E,EAAsB9D,EAAoBQ,OAAExB,EAAW,CAAC,OAAO,WAAa,OAAOgB,EAAoB,MAAQ,IACnH8D,EAAsB9D,EAAoBQ,EAAEsD","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?70ef","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?1338","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?ca52","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?b8ab","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?0836","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?90cb","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?5c2d","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?84c8","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?521c","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?6bad","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack:///nextcloud/apps/settings/src/components/AuthTokenSection.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?e9d0","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?a091","webpack:///nextcloud/apps/settings/src/main-personal-security.js","webpack:///nextcloud/apps/settings/src/components/AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&","webpack:///nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&prod&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@change=\"rename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span :title=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<NcActions v-if=\"!token.current\"\n\t\t\t\t:title=\"t('settings', 'Device settings')\"\n\t\t\t\t:aria-label=\"t('settings', 'Device settings')\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<NcActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</NcActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</template>\n\t\t\t</NcActions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tNcActions,\n\tNcActionButton,\n\tNcActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) (?:ownCloud|Nextcloud)-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n\t// Neon 1.0.0+1\n\tneon: /Neon \\d+\\.\\d+\\.\\d+\\+\\d+/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n\tneon: 'Neon',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\toldName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.oldName = this.token.name\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.oldName)\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\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!./AuthToken.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!./AuthToken.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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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!./AuthToken.vue?vue&type=style&index=0&id=0f73a400&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=0f73a400&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=0f73a400&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 \"0f73a400\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"]))return null;return _vm.cancelRename.apply(null, arguments)}],\"change\":_vm.rename,\"input\":function($event){if($event.target.composing)return;_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{staticClass:\"last-activity\",attrs:{\"title\":_vm.lastActivity}},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('NcActions',{attrs:{\"title\":_vm.t('settings', 'Device settings'),\"aria-label\":_vm.t('settings', 'Device settings'),\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('NcActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('NcActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('NcActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it has not started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],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!./AuthTokenList.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!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggle-scope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&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!./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=4f8ceff3&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=4f8ceff3&prod&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&id=4f8ceff3&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f8ceff3\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggle-scope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div v-if=\"!adding\" class=\"row spacing\">\n\t\t<a id=\"generate-app-token-section\">\n\t\t\t<!-- Port to TextField component when available -->\n\t\t\t<input v-model=\"deviceName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t:maxlength=\"120\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t\t@keydown.enter=\"submit\">\n\t\t\t<NcButton :disabled=\"loading || deviceName.length === 0\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t@click=\"submit\">\n\t\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t\t</NcButton>\n\t\t</a>\n\t</div>\n\t<div v-else class=\"spacing\">\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-username\" class=\"app-password-label\">{{ t('settings', 'Username') }}</label>\n\t\t\t<input id=\"app-username\"\n\t\t\t\t:value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<label for=\"app-password\" class=\"app-password-label\">{{ t('settings', 'Password') }}</label>\n\t\t\t<input id=\"app-password\"\n\t\t\t\tref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<NcButton type=\"tertiary\"\n\t\t\t\t:title=\"copyTooltipOptions\"\n\t\t\t\t:aria-label=\"copyTooltipOptions\"\n\t\t\t\t@click=\"copyPassword\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Check v-if=\"copied\" :size=\"20\" />\n\t\t\t\t\t<ContentCopy v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton @click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { showError } from '@nextcloud/dialogs'\nimport { getRootUrl } from '@nextcloud/router'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton'\n\nimport Check from 'vue-material-design-icons/Check.vue'\nimport ContentCopy from 'vue-material-design-icons/ContentCopy.vue'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tCheck,\n\t\tContentCopy,\n\t\tNcButton,\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tcopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn t('settings', 'Copied!')\n\t\t\t}\n\t\t\treturn t('settings', 'Copy')\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tasync copyPassword() {\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(this.appPassword)\n\t\t\t\tthis.copied = true\n\t\t\t} catch (e) {\n\t\t\t\tthis.copied = false\n\t\t\t\tconsole.error(e)\n\t\t\t\tshowError(t('settings', 'Could not copy app password. Please copy it manually.'))\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t\twidth: 100px;\n\t}\n\n\t.row input {\n\t\theight: 44px !important;\n\t\tpadding: 7px 12px;\n\t\tmargin-right: 12px;\n\t\twidth: 200px;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n\n\t.button-vue{\n\t\tdisplay:inline-block;\n\t\tmargin: 3px 3px 3px 3px;\n\t}\n\n\t.row {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t.spacing {\n\t\tpadding-top: 16px;\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!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=7760634d&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=7760634d&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 \"7760634d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.adding)?_c('div',{staticClass:\"row spacing\"},[_c('a',{attrs:{\"id\":\"generate-app-token-section\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"maxlength\":120,\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"disabled\":_vm.loading || _vm.deviceName.length === 0,\"type\":\"primary\"},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\\t\")])],1)]):_c('div',{staticClass:\"spacing\"},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-username\"}},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"id\":\"app-username\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('label',{staticClass:\"app-password-label\",attrs:{\"for\":\"app-password\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"id\":\"app-password\",\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('NcButton',{attrs:{\"type\":\"tertiary\",\"title\":_vm.copyTooltipOptions,\"aria-label\":_vm.copyTooltipOptions},on:{\"click\":_vm.copyPassword},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.copied)?_c('Check',{attrs:{\"size\":20}}):_c('ContentCopy',{attrs:{\"size\":20}})]},proxy:true}])}),_vm._v(\" \"),_c('NcButton',{on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggle-scope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { confirmPassword } from '@nextcloud/password-confirmation'\nimport '@nextcloud/password-confirmation/dist/style.css'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('settings', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.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!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=240596c0&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.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 \"240596c0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggle-scope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\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, \".wiping[data-v-0f73a400]{background-color:var(--color-background-darker)}td[data-v-0f73a400]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-0f73a400],td.more[data-v-0f73a400]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-0f73a400]{padding:10px 6px}td.token-name.token-rename[data-v-0f73a400]{padding:0}td.token-name input[data-v-0f73a400]{width:100%;margin:0}td.token-name .wiping-warning[data-v-0f73a400]{color:var(--color-text-lighter)}td.more[data-v-0f73a400]{padding:0 10px}td.client div[data-v-0f73a400]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AACA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\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, \"table[data-v-4f8ceff3]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-4f8ceff3]{opacity:.5;padding:10px 0}.token-list td>a.icon-more[data-v-4f8ceff3]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-4f8ceff3]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-4f8ceff3],.token-list tr td>a.icon[data-v-4f8ceff3]:focus,.token-list tr.active td>a.icon[data-v-4f8ceff3]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AACA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,cAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\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-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAEC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\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-password-row[data-v-7760634d]{display:flex;align-items:center}.app-password-row .icon[data-v-7760634d]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-7760634d]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle;width:100px}.row input[data-v-7760634d]{height:44px !important;padding:7px 12px;margin-right:12px;width:200px}.monospaced[data-v-7760634d]{width:245px;font-family:monospace}.button-vue[data-v-7760634d]{display:inline-block;margin:3px 3px 3px 3px}.row[data-v-7760634d]{display:flex;align-items:center}.spacing[data-v-7760634d]{padding-top:16px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AACA,mCACC,YAAA,CACA,kBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CACA,WAAA,CAGD,4BACC,sBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAGD,6BACC,WAAA,CACA,qBAAA,CAGD,6BACC,oBAAA,CACA,sBAAA,CAGD,sBACC,YAAA,CACA,kBAAA,CAGD,0BACC,gBAAA\",\"sourcesContent\":[\"\\n.app-password-row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n\\twidth: 100px;\\n}\\n\\n.row input {\\n\\theight: 44px !important;\\n\\tpadding: 7px 12px;\\n\\tmargin-right: 12px;\\n\\twidth: 200px;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\n}\\n\\n.button-vue{\\n\\tdisplay:inline-block;\\n\\tmargin: 3px 3px 3px 3px;\\n}\\n\\n.row {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n}\\n\\n.spacing {\\n\\tpadding-top: 16px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 4783;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4783: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(40726); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","ie","edge","firefox","chrome","safari","androidChrome","iphone","ipad","iosClient","androidClient","iosTalkClient","androidTalkClient","davx5","webPirate","sailfishBrowser","neon","productName","name","components","NcActions","NcActionButton","NcActionCheckbox","props","token","type","required","data","showMore","renaming","newName","oldName","actionOpen","computed","lastActivityRelative","lastActivity","iconName","os","version","icon","wiping","methods","startRename","cancelRename","revoke","rename","wipe","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","component","_vm","this","_c","_self","class","attrs","id","staticClass","_v","canRename","directives","rawName","value","expression","ref","domProps","on","$event","indexOf","_k","keyCode","key","apply","arguments","target","composing","_s","t","_e","current","scope","filesystem","stopPropagation","preventDefault","$emit","canDelete","AuthToken","tokens","sortedTokens","toggleScope","onDelete","onWipe","length","_l","Check","ContentCopy","NcButton","QR","add","adding","loading","deviceName","appPassword","loginName","copied","showQR","qrUrl","copyTooltipOptions","selectInput","e","submit","confirmPassword","then","catch","console","OC","copyPassword","navigator","showError","setTimeout","reset","scopedSlots","_u","fn","proxy","cb","AuthTokenSetupDialogue","AuthTokenList","canCreateToken","baseUrl","addNewToken","toggleTokenScope","updateToken","deleteToken","wipeToken","resolve","axios","undefined","sanitize","__webpack_nonce__","btoa","requestToken","Vue","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","nc","__webpack_exports__"],"sourceRoot":""}