1
|
{"version":3,"file":"files_sharing-files_sharing_tab.js?v=bacd79fe1c81f5f8972f","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/files_sharing/src/services/ConfigService.js","webpack:///nextcloud/apps/files_sharing/src/models/Share.js","webpack:///nextcloud/apps/files_sharing/src/mixins/ShareTypes.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?924c","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntrySimple.vue?cb12","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=template&id=1436bf4a&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?10b0","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInternal.vue?4c20","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=template&id=456815d3&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/utils/GeneratePassword.js","webpack:///nextcloud/apps/files_sharing/src/mixins/ShareRequests.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?1f8b","webpack://nextcloud/./apps/files_sharing/src/components/SharingInput.vue?3d7c","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=template&id=6c96bdca&","webpack:///nextcloud/apps/files_sharing/src/mixins/SharesMixin.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?b696","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryInherited.vue?0e5a","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=template&id=c58e421a&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?14e4","webpack://nextcloud/./apps/files_sharing/src/views/SharingInherited.vue?1677","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=template&id=1c2059ae&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue","webpack://nextcloud/./apps/files_sharing/src/components/ExternalShareAction.vue?9bf3","webpack:///nextcloud/apps/files_sharing/src/components/ExternalShareAction.vue?vue&type=template&id=29f555e7&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?cedf","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntryLink.vue?af90","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=template&id=8366155c&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/views/SharingLinkList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/files_sharing/src/views/SharingLinkList.vue","webpack://nextcloud/./apps/files_sharing/src/views/SharingLinkList.vue?a70b","webpack:///nextcloud/apps/files_sharing/src/views/SharingLinkList.vue?vue&type=template&id=8be1a6a2&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?c16d","webpack://nextcloud/./apps/files_sharing/src/components/SharingEntry.vue?10a7","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=template&id=7bdfd3f8&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingList.vue?9f9c","webpack:///nextcloud/apps/files_sharing/src/views/SharingList.vue?vue&type=template&id=0b29d4c0&","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue","webpack:///nextcloud/apps/files_sharing/src/utils/SharedWithMe.js","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/files_sharing/src/views/SharingTab.vue?6997","webpack:///nextcloud/apps/files_sharing/src/views/SharingTab.vue?vue&type=template&id=bc869798&","webpack:///nextcloud/apps/files_sharing/src/services/ShareSearch.js","webpack:///nextcloud/apps/files_sharing/src/services/ExternalLinkActions.js","webpack:///nextcloud/apps/files_sharing/src/services/ExternalShareActions.js","webpack:///nextcloud/apps/files_sharing/src/services/TabSections.js","webpack:///nextcloud/apps/files_sharing/src/files_sharing_tab.js","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntry.vue?vue&type=style&index=0&id=7bdfd3f8&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInherited.vue?vue&type=style&index=0&id=c58e421a&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryInternal.vue?vue&type=style&index=0&id=456815d3&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntryLink.vue?vue&type=style&index=0&id=8366155c&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingEntrySimple.vue?vue&type=style&index=0&id=1436bf4a&lang=scss&scoped=true&","webpack:///nextcloud/apps/files_sharing/src/components/SharingInput.vue?vue&type=style&index=0&lang=scss&","webpack:///nextcloud/apps/files_sharing/src/views/SharingInherited.vue?vue&type=style&index=0&id=1c2059ae&lang=scss&scoped=true&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","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/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 Arthur Schiwon <blizzz@arthur-schiwon.de>\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\nexport default class Config {\n\n\t/**\n\t * Is public upload allowed on link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isPublicUploadEnabled() {\n\t\treturn document.getElementById('filestable')\n\t\t\t&& document.getElementById('filestable').dataset.allowPublicUpload === 'yes'\n\t}\n\n\t/**\n\t * Are link share allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isShareWithLinkAllowed() {\n\t\treturn document.getElementById('allowShareWithLink')\n\t\t\t&& document.getElementById('allowShareWithLink').value === 'yes'\n\t}\n\n\t/**\n\t * Get the federated sharing documentation link\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget federatedShareDocLink() {\n\t\treturn OC.appConfig.core.federatedCloudShareDoc\n\t}\n\n\t/**\n\t * Get the default link share expiration date as string\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultExpirationDateString() {\n\t\tlet expireDateString = ''\n\t\tif (this.isDefaultExpireDateEnabled) {\n\t\t\tconst date = window.moment.utc()\n\t\t\tconst expireAfterDays = this.defaultExpireDate\n\t\t\tdate.add(expireAfterDays, 'days')\n\t\t\texpireDateString = date.format('YYYY-MM-DD')\n\t\t}\n\t\treturn expireDateString\n\t}\n\n\t/**\n\t * Get the default internal expiration date as string\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultInternalExpirationDateString() {\n\t\tlet expireDateString = ''\n\t\tif (this.isDefaultInternalExpireDateEnabled) {\n\t\t\tconst date = window.moment.utc()\n\t\t\tconst expireAfterDays = this.defaultInternalExpireDate\n\t\t\tdate.add(expireAfterDays, 'days')\n\t\t\texpireDateString = date.format('YYYY-MM-DD')\n\t\t}\n\t\treturn expireDateString\n\t}\n\n\t/**\n\t * Get the default remote expiration date as string\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultRemoteExpirationDateString() {\n\t\tlet expireDateString = ''\n\t\tif (this.isDefaultRemoteExpireDateEnabled) {\n\t\t\tconst date = window.moment.utc()\n\t\t\tconst expireAfterDays = this.defaultRemoteExpireDate\n\t\t\tdate.add(expireAfterDays, 'days')\n\t\t\texpireDateString = date.format('YYYY-MM-DD')\n\t\t}\n\t\treturn expireDateString\n\t}\n\n\t/**\n\t * Are link shares password-enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget enforcePasswordForPublicLink() {\n\t\treturn OC.appConfig.core.enforcePasswordForPublicLink === true\n\t}\n\n\t/**\n\t * Is password asked by default on link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget enableLinkPasswordByDefault() {\n\t\treturn OC.appConfig.core.enableLinkPasswordByDefault === true\n\t}\n\n\t/**\n\t * Is link shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new link shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Is internal shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultInternalExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is remote shares expiration enforced ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultRemoteExpireDateEnforced() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDateEnforced === true\n\t}\n\n\t/**\n\t * Is there a default expiration date for new internal shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isDefaultInternalExpireDateEnabled() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDateEnabled === true\n\t}\n\n\t/**\n\t * Are users on this server allowed to send shares to other servers ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isRemoteShareAllowed() {\n\t\treturn OC.appConfig.core.remoteShareAllowed === true\n\t}\n\n\t/**\n\t * Is sharing my mail (link share) enabled ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isMailShareAllowed() {\n\t\tconst capabilities = OC.getCapabilities()\n\t\t// eslint-disable-next-line camelcase\n\t\treturn capabilities?.files_sharing?.sharebymail !== undefined\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\t&& capabilities?.files_sharing?.public?.enabled === true\n\t}\n\n\t/**\n\t * Get the default days to link shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultExpireDate() {\n\t\treturn OC.appConfig.core.defaultExpireDate\n\t}\n\n\t/**\n\t * Get the default days to internal shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultInternalExpireDate() {\n\t\treturn OC.appConfig.core.defaultInternalExpireDate\n\t}\n\n\t/**\n\t * Get the default days to remote shares expiration\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget defaultRemoteExpireDate() {\n\t\treturn OC.appConfig.core.defaultRemoteExpireDate\n\t}\n\n\t/**\n\t * Is resharing allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isResharingAllowed() {\n\t\treturn OC.appConfig.core.resharingAllowed === true\n\t}\n\n\t/**\n\t * Is password enforced for mail shares ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget isPasswordForMailSharesRequired() {\n\t\treturn (OC.getCapabilities().files_sharing.sharebymail === undefined) ? false : OC.getCapabilities().files_sharing.sharebymail.password.enforced\n\t}\n\n\t/**\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget shouldAlwaysShowUnique() {\n\t\treturn (OC.getCapabilities().files_sharing?.sharee?.always_show_unique === true)\n\t}\n\n\t/**\n\t * Is sharing with groups allowed ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget allowGroupSharing() {\n\t\treturn OC.appConfig.core.allowGroupSharing === true\n\t}\n\n\t/**\n\t * Get the maximum results of a share search\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget maxAutocompleteResults() {\n\t\treturn parseInt(OC.config['sharing.maxAutocompleteResults'], 10) || 25\n\t}\n\n\t/**\n\t * Get the minimal string length\n\t * to initiate a share search\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget minSearchStringLength() {\n\t\treturn parseInt(OC.config['sharing.minSearchStringLength'], 10) || 0\n\t}\n\n\t/**\n\t * Get the password policy config\n\t *\n\t * @return {object}\n\t * @readonly\n\t * @memberof Config\n\t */\n\tget passwordPolicy() {\n\t\tconst capabilities = OC.getCapabilities()\n\t\treturn capabilities.password_policy ? capabilities.password_policy : {}\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Gary Kim <gary@garykim.dev>\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\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 Share {\n\n\t_share;\n\n\t/**\n\t * Create the share object\n\t *\n\t * @param {object} ocsData ocs request response\n\t */\n\tconstructor(ocsData) {\n\t\tif (ocsData.ocs && ocsData.ocs.data && ocsData.ocs.data[0]) {\n\t\t\tocsData = ocsData.ocs.data[0]\n\t\t}\n\n\t\t// convert int into boolean\n\t\tocsData.hide_download = !!ocsData.hide_download\n\t\tocsData.mail_send = !!ocsData.mail_send\n\n\t\t// store state\n\t\tthis._share = ocsData\n\t}\n\n\t/**\n\t * Get the share state\n\t * ! used for reactivity purpose\n\t * Do not remove. It allow vuejs to\n\t * inject its watchers into the #share\n\t * state and make the whole class reactive\n\t *\n\t * @return {object} the share raw state\n\t * @readonly\n\t * @memberof Sidebar\n\t */\n\tget state() {\n\t\treturn this._share\n\t}\n\n\t/**\n\t * get the share id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget id() {\n\t\treturn this._share.id\n\t}\n\n\t/**\n\t * Get the share type\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget type() {\n\t\treturn this._share.share_type\n\t}\n\n\t/**\n\t * Get the share permissions\n\t * See OC.PERMISSION_* variables\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget permissions() {\n\t\treturn this._share.permissions\n\t}\n\n\t/**\n\t * Set the share permissions\n\t * See OC.PERMISSION_* variables\n\t *\n\t * @param {number} permissions valid permission, See OC.PERMISSION_* variables\n\t * @memberof Share\n\t */\n\tset permissions(permissions) {\n\t\tthis._share.permissions = permissions\n\t}\n\n\t// SHARE OWNER --------------------------------------------------\n\t/**\n\t * Get the share owner uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget owner() {\n\t\treturn this._share.uid_owner\n\t}\n\n\t/**\n\t * Get the share owner's display name\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget ownerDisplayName() {\n\t\treturn this._share.displayname_owner\n\t}\n\n\t// SHARED WITH --------------------------------------------------\n\t/**\n\t * Get the share with entity uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWith() {\n\t\treturn this._share.share_with\n\t}\n\n\t/**\n\t * Get the share with entity display name\n\t * fallback to its uid if none\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithDisplayName() {\n\t\treturn this._share.share_with_displayname\n\t\t\t|| this._share.share_with\n\t}\n\n\t/**\n\t * Unique display name in case of multiple\n\t * duplicates results with the same name.\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithDisplayNameUnique() {\n\t\treturn this._share.share_with_displayname_unique\n\t\t\t|| this._share.share_with\n\t}\n\n\t/**\n\t * Get the share with entity link\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithLink() {\n\t\treturn this._share.share_with_link\n\t}\n\n\t/**\n\t * Get the share with avatar if any\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget shareWithAvatar() {\n\t\treturn this._share.share_with_avatar\n\t}\n\n\t// SHARED FILE OR FOLDER OWNER ----------------------------------\n\t/**\n\t * Get the shared item owner uid\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget uidFileOwner() {\n\t\treturn this._share.uid_file_owner\n\t}\n\n\t/**\n\t * Get the shared item display name\n\t * fallback to its uid if none\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget displaynameFileOwner() {\n\t\treturn this._share.displayname_file_owner\n\t\t\t|| this._share.uid_file_owner\n\t}\n\n\t// TIME DATA ----------------------------------------------------\n\t/**\n\t * Get the share creation timestamp\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget createdTime() {\n\t\treturn this._share.stime\n\t}\n\n\t/**\n\t * Get the expiration date as a string format\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget expireDate() {\n\t\treturn this._share.expiration\n\t}\n\n\t/**\n\t * Set the expiration date as a string format\n\t * e.g. YYYY-MM-DD\n\t *\n\t * @param {string} date the share expiration date\n\t * @memberof Share\n\t */\n\tset expireDate(date) {\n\t\tthis._share.expiration = date\n\t}\n\n\t// EXTRA DATA ---------------------------------------------------\n\t/**\n\t * Get the public share token\n\t *\n\t * @return {string} the token\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget token() {\n\t\treturn this._share.token\n\t}\n\n\t/**\n\t * Get the share note if any\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget note() {\n\t\treturn this._share.note\n\t}\n\n\t/**\n\t * Set the share note if any\n\t *\n\t * @param {string} note the note\n\t * @memberof Share\n\t */\n\tset note(note) {\n\t\tthis._share.note = note\n\t}\n\n\t/**\n\t * Get the share label if any\n\t * Should only exist on link shares\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget label() {\n\t\treturn this._share.label\n\t}\n\n\t/**\n\t * Set the share label if any\n\t * Should only be set on link shares\n\t *\n\t * @param {string} label the label\n\t * @memberof Share\n\t */\n\tset label(label) {\n\t\tthis._share.label = label\n\t}\n\n\t/**\n\t * Have a mail been sent\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget mailSend() {\n\t\treturn this._share.mail_send === true\n\t}\n\n\t/**\n\t * Hide the download button on public page\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hideDownload() {\n\t\treturn this._share.hide_download === true\n\t}\n\n\t/**\n\t * Hide the download button on public page\n\t *\n\t * @param {boolean} state hide the button ?\n\t * @memberof Share\n\t */\n\tset hideDownload(state) {\n\t\tthis._share.hide_download = state === true\n\t}\n\n\t/**\n\t * Password protection of the share\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget password() {\n\t\treturn this._share.password\n\t}\n\n\t/**\n\t * Password protection of the share\n\t *\n\t * @param {string} password the share password\n\t * @memberof Share\n\t */\n\tset password(password) {\n\t\tthis._share.password = password\n\t}\n\n\t/**\n\t * Password protection by Talk of the share\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget sendPasswordByTalk() {\n\t\treturn this._share.send_password_by_talk\n\t}\n\n\t/**\n\t * Password protection by Talk of the share\n\t *\n\t * @param {boolean} sendPasswordByTalk whether to send the password by Talk\n\t * or not\n\t * @memberof Share\n\t */\n\tset sendPasswordByTalk(sendPasswordByTalk) {\n\t\tthis._share.send_password_by_talk = sendPasswordByTalk\n\t}\n\n\t// SHARED ITEM DATA ---------------------------------------------\n\t/**\n\t * Get the shared item absolute full path\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget path() {\n\t\treturn this._share.path\n\t}\n\n\t/**\n\t * Return the item type: file or folder\n\t *\n\t * @return {string} 'folder' or 'file'\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget itemType() {\n\t\treturn this._share.item_type\n\t}\n\n\t/**\n\t * Get the shared item mimetype\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget mimetype() {\n\t\treturn this._share.mimetype\n\t}\n\n\t/**\n\t * Get the shared item id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileSource() {\n\t\treturn this._share.file_source\n\t}\n\n\t/**\n\t * Get the target path on the receiving end\n\t * e.g the file /xxx/aaa will be shared in\n\t * the receiving root as /aaa, the fileTarget is /aaa\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileTarget() {\n\t\treturn this._share.file_target\n\t}\n\n\t/**\n\t * Get the parent folder id if any\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget fileParent() {\n\t\treturn this._share.file_parent\n\t}\n\n\t// PERMISSIONS Shortcuts\n\n\t/**\n\t * Does this share have READ permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasReadPermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_READ))\n\t}\n\n\t/**\n\t * Does this share have CREATE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasCreatePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_CREATE))\n\t}\n\n\t/**\n\t * Does this share have DELETE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasDeletePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_DELETE))\n\t}\n\n\t/**\n\t * Does this share have UPDATE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasUpdatePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_UPDATE))\n\t}\n\n\t/**\n\t * Does this share have SHARE permissions\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget hasSharePermission() {\n\t\treturn !!((this.permissions & OC.PERMISSION_SHARE))\n\t}\n\n\t// PERMISSIONS Shortcuts for the CURRENT USER\n\t// ! the permissions above are the share settings,\n\t// ! meaning the permissions for the recipient\n\t/**\n\t * Can the current user EDIT this share ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget canEdit() {\n\t\treturn this._share.can_edit === true\n\t}\n\n\t/**\n\t * Can the current user DELETE this share ?\n\t *\n\t * @return {boolean}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget canDelete() {\n\t\treturn this._share.can_delete === true\n\t}\n\n\t/**\n\t * Top level accessible shared folder fileid for the current user\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget viaFileid() {\n\t\treturn this._share.via_fileid\n\t}\n\n\t/**\n\t * Top level accessible shared folder path for the current user\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof Share\n\t */\n\tget viaPath() {\n\t\treturn this._share.via_path\n\t}\n\n\t// TODO: SORT THOSE PROPERTIES\n\n\tget parent() {\n\t\treturn this._share.parent\n\t}\n\n\tget storageId() {\n\t\treturn this._share.storage_id\n\t}\n\n\tget storage() {\n\t\treturn this._share.storage\n\t}\n\n\tget itemSource() {\n\t\treturn this._share.item_source\n\t}\n\n\tget status() {\n\t\treturn this._share.status\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 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\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tSHARE_TYPES: {\n\t\t\t\tSHARE_TYPE_USER: OC.Share.SHARE_TYPE_USER,\n\t\t\t\tSHARE_TYPE_GROUP: OC.Share.SHARE_TYPE_GROUP,\n\t\t\t\tSHARE_TYPE_LINK: OC.Share.SHARE_TYPE_LINK,\n\t\t\t\tSHARE_TYPE_EMAIL: OC.Share.SHARE_TYPE_EMAIL,\n\t\t\t\tSHARE_TYPE_REMOTE: OC.Share.SHARE_TYPE_REMOTE,\n\t\t\t\tSHARE_TYPE_CIRCLE: OC.Share.SHARE_TYPE_CIRCLE,\n\t\t\t\tSHARE_TYPE_GUEST: OC.Share.SHARE_TYPE_GUEST,\n\t\t\t\tSHARE_TYPE_DECK: OC.Share.SHARE_TYPE_DECK,\n\t\t\t\tSHARE_TYPE_REMOTE_GROUP: OC.Share.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tSHARE_TYPE_ROOM: OC.Share.SHARE_TYPE_ROOM,\n\t\t\t},\n\t\t}\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.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!./SharingEntrySimple.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 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=\"sharing-entry\">\n\t\t<slot name=\"avatar\" />\n\t\t<div v-tooltip=\"tooltip\" class=\"sharing-entry__desc\">\n\t\t\t<h5>{{ title }}</h5>\n\t\t\t<p v-if=\"subtitle\">\n\t\t\t\t{{ subtitle }}\n\t\t\t</p>\n\t\t</div>\n\t\t<Actions v-if=\"$slots['default']\" menu-align=\"right\" class=\"sharing-entry__actions\">\n\t\t\t<slot />\n\t\t</Actions>\n\t</li>\n</template>\n\n<script>\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\n\nexport default {\n\tname: 'SharingEntrySimple',\n\n\tcomponents: {\n\t\tActions,\n\t},\n\n\tdirectives: {\n\t\tTooltip,\n\t},\n\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\trequired: true,\n\t\t},\n\t\ttooltip: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tsubtitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tisUnique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tposition: relative;\n\t\tflex: 1 1;\n\t\tmin-width: 0;\n\t\th5 {\n\t\t\twhite-space: nowrap;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tmax-width: inherit;\n\t\t}\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto !important;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntrySimple.vue?vue&type=style&index=0&id=1436bf4a&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!./SharingEntrySimple.vue?vue&type=style&index=0&id=1436bf4a&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntrySimple.vue?vue&type=template&id=1436bf4a&scoped=true&\"\nimport script from \"./SharingEntrySimple.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntrySimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntrySimple.vue?vue&type=style&index=0&id=1436bf4a&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 \"1436bf4a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"sharing-entry\"},[_vm._t(\"avatar\"),_vm._v(\" \"),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],staticClass:\"sharing-entry__desc\"},[_c('h5',[_vm._v(_vm._s(_vm.title))]),_vm._v(\" \"),(_vm.subtitle)?_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subtitle)+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.$slots['default'])?_c('Actions',{staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\"}},[_vm._t(\"default\")],2):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n<template>\n\t<SharingEntrySimple\n\t\tclass=\"sharing-entry__internal\"\n\t\t:title=\"t('files_sharing', 'Internal link')\"\n\t\t:subtitle=\"internalLinkSubtitle\">\n\t\t<template #avatar>\n\t\t\t<div class=\"avatar-external icon-external-white\" />\n\t\t</template>\n\n\t\t<ActionLink ref=\"copyButton\"\n\t\t\t:href=\"internalLink\"\n\t\t\ttarget=\"_blank\"\n\t\t\t:icon=\"copied && copySuccess ? 'icon-checkmark-color' : 'icon-clippy'\"\n\t\t\t@click.prevent=\"copyLink\">\n\t\t\t{{ clipboardTooltip }}\n\t\t</ActionLink>\n\t</SharingEntrySimple>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport ActionLink from '@nextcloud/vue/dist/Components/ActionLink'\nimport SharingEntrySimple from './SharingEntrySimple'\n\nexport default {\n\tname: 'SharingEntryInternal',\n\n\tcomponents: {\n\t\tActionLink,\n\t\tSharingEntrySimple,\n\t},\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcopied: false,\n\t\t\tcopySuccess: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Get the internal link to this file id\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tinternalLink() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + generateUrl('/f/') + this.fileInfo.id\n\t\t},\n\n\t\t/**\n\t\t * Clipboard v-tooltip message\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tclipboardTooltip() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn this.copySuccess\n\t\t\t\t\t? t('files_sharing', 'Link copied')\n\t\t\t\t\t: t('files_sharing', 'Cannot copy, please copy the link manually')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Copy to clipboard')\n\t\t},\n\n\t\tinternalLinkSubtitle() {\n\t\t\tif (this.fileInfo.type === 'dir') {\n\t\t\t\treturn t('files_sharing', 'Only works for users with access to this folder')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Only works for users with access to this file')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tasync copyLink() {\n\t\t\ttry {\n\t\t\t\tawait this.$copyText(this.internalLink)\n\t\t\t\t// focus and show the tooltip\n\t\t\t\tthis.$refs.copyButton.$el.focus()\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry__internal {\n\t.avatar-external {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n\t.icon-checkmark-color {\n\t\topacity: 1;\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!./SharingEntryInternal.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!./SharingEntryInternal.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!./SharingEntryInternal.vue?vue&type=style&index=0&id=456815d3&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!./SharingEntryInternal.vue?vue&type=style&index=0&id=456815d3&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryInternal.vue?vue&type=template&id=456815d3&scoped=true&\"\nimport script from \"./SharingEntryInternal.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryInternal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryInternal.vue?vue&type=style&index=0&id=456815d3&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 \"456815d3\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SharingEntrySimple',{staticClass:\"sharing-entry__internal\",attrs:{\"title\":_vm.t('files_sharing', 'Internal link'),\"subtitle\":_vm.internalLinkSubtitle},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('div',{staticClass:\"avatar-external icon-external-white\"})]},proxy:true}])},[_vm._v(\" \"),_c('ActionLink',{ref:\"copyButton\",attrs:{\"href\":_vm.internalLink,\"target\":\"_blank\",\"icon\":_vm.copied && _vm.copySuccess ? 'icon-checkmark-color' : 'icon-clippy'},on:{\"click\":function($event){$event.preventDefault();return _vm.copyLink.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.clipboardTooltip)+\"\\n\\t\")])],1)}\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 AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport Config from '../services/ConfigService'\n\nconst config = new Config()\nconst passwordSet = 'abcdefgijkmnopqrstwxyzABCDEFGHJKLMNPQRSTWXYZ23456789'\n\n/**\n * Generate a valid policy password or\n * request a valid password if password_policy\n * is enabled\n *\n * @return {string} a valid password\n */\nexport default async function() {\n\t// password policy is enabled, let's request a pass\n\tif (config.passwordPolicy.api && config.passwordPolicy.api.generate) {\n\t\ttry {\n\t\t\tconst request = await axios.get(config.passwordPolicy.api.generate)\n\t\t\tif (request.data.ocs.data.password) {\n\t\t\t\treturn request.data.ocs.data.password\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.info('Error generating password from password_policy', error)\n\t\t}\n\t}\n\n\t// generate password of 10 length based on passwordSet\n\treturn Array(10).fill(0)\n\t\t.reduce((prev, curr) => {\n\t\t\tprev += passwordSet.charAt(Math.floor(Math.random() * passwordSet.length))\n\t\t\treturn prev\n\t\t}, '')\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// TODO: remove when ie not supported\nimport 'url-search-params-polyfill'\n\nimport { generateOcsUrl } from '@nextcloud/router'\nimport axios from '@nextcloud/axios'\nimport Share from '../models/Share'\n\nconst shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares')\nconst headers = {\n\t'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',\n}\n\nexport default {\n\tmethods: {\n\t\t/**\n\t\t * Create a new share\n\t\t *\n\t\t * @param {object} data destructuring object\n\t\t * @param {string} data.path path to the file/folder which should be shared\n\t\t * @param {number} data.shareType 0 = user; 1 = group; 3 = public link; 6 = federated cloud share\n\t\t * @param {string} data.shareWith user/group id with which the file should be shared (optional for shareType > 1)\n\t\t * @param {boolean} [data.publicUpload=false] allow public upload to a public shared folder\n\t\t * @param {string} [data.password] password to protect public link Share with\n\t\t * @param {number} [data.permissions=31] 1 = read; 2 = update; 4 = create; 8 = delete; 16 = share; 31 = all (default: 31, for public shares: 1)\n\t\t * @param {boolean} [data.sendPasswordByTalk=false] send the password via a talk conversation\n\t\t * @param {string} [data.expireDate=''] expire the shareautomatically after\n\t\t * @param {string} [data.label=''] custom label\n\t\t * @return {Share} the new share\n\t\t * @throws {Error}\n\t\t */\n\t\tasync createShare({ path, permissions, shareType, shareWith, publicUpload, password, sendPasswordByTalk, expireDate, label }) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.post(shareUrl, { path, permissions, shareType, shareWith, publicUpload, password, sendPasswordByTalk, expireDate, label })\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t}\n\t\t\t\treturn new Share(request.data.ocs.data)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while creating share', error)\n\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\terrorMessage ? t('files_sharing', 'Error creating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error creating the share'),\n\t\t\t\t\t{ type: 'error' }\n\t\t\t\t)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Delete a share\n\t\t *\n\t\t * @param {number} id share id\n\t\t * @throws {Error}\n\t\t */\n\t\tasync deleteShare(id) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.delete(shareUrl + `/${id}`)\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while deleting share', error)\n\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\terrorMessage ? t('files_sharing', 'Error deleting the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error deleting the share'),\n\t\t\t\t\t{ type: 'error' }\n\t\t\t\t)\n\t\t\t\tthrow error\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update a share\n\t\t *\n\t\t * @param {number} id share id\n\t\t * @param {object} properties key-value object of the properties to update\n\t\t */\n\t\tasync updateShare(id, properties) {\n\t\t\ttry {\n\t\t\t\tconst request = await axios.put(shareUrl + `/${id}`, properties, headers)\n\t\t\t\tif (!request?.data?.ocs) {\n\t\t\t\t\tthrow request\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error while updating share', error)\n\t\t\t\tif (error.response.status !== 400) {\n\t\t\t\t\tconst errorMessage = error?.response?.data?.ocs?.meta?.message\n\t\t\t\t\tOC.Notification.showTemporary(\n\t\t\t\t\t\terrorMessage ? t('files_sharing', 'Error updating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error updating the share'),\n\t\t\t\t\t\t{ type: 'error' }\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tconst message = error.response.data.ocs.meta.message\n\t\t\t\tthrow new Error(message)\n\t\t\t}\n\t\t},\n\t},\n}\n","<!--\n - @copyright Copyright (c) 2019 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<Multiselect ref=\"multiselect\"\n\t\tclass=\"sharing-input\"\n\t\t:clear-on-select=\"true\"\n\t\t:disabled=\"!canReshare\"\n\t\t:hide-selected=\"true\"\n\t\t:internal-search=\"false\"\n\t\t:loading=\"loading\"\n\t\t:options=\"options\"\n\t\t:placeholder=\"inputPlaceholder\"\n\t\t:preselect-first=\"true\"\n\t\t:preserve-search=\"true\"\n\t\t:searchable=\"true\"\n\t\t:user-select=\"true\"\n\t\topen-direction=\"below\"\n\t\tlabel=\"displayName\"\n\t\ttrack-by=\"id\"\n\t\t@search-change=\"asyncFind\"\n\t\t@select=\"addShare\">\n\t\t<template #noOptions>\n\t\t\t{{ t('files_sharing', 'No recommendations. Start typing.') }}\n\t\t</template>\n\t\t<template #noResult>\n\t\t\t{{ noResultText }}\n\t\t</template>\n\t</Multiselect>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport axios from '@nextcloud/axios'\nimport debounce from 'debounce'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport Config from '../services/ConfigService'\nimport GeneratePassword from '../utils/GeneratePassword'\nimport Share from '../models/Share'\nimport ShareRequests from '../mixins/ShareRequests'\nimport ShareTypes from '../mixins/ShareTypes'\n\nexport default {\n\tname: 'SharingInput',\n\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\n\tmixins: [ShareTypes, ShareRequests],\n\n\tprops: {\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tlinkShares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\treshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\t\t\tloading: false,\n\t\t\tquery: '',\n\t\t\trecommendations: [],\n\t\t\tShareSearch: OCA.Sharing.ShareSearch.state,\n\t\t\tsuggestions: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Implement ShareSearch\n\t\t * allows external appas to inject new\n\t\t * results into the autocomplete dropdown\n\t\t * Used for the guests app\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\texternalResults() {\n\t\t\treturn this.ShareSearch.results\n\t\t},\n\t\tinputPlaceholder() {\n\t\t\tconst allowRemoteSharing = this.config.isRemoteShareAllowed\n\n\t\t\tif (!this.canReshare) {\n\t\t\t\treturn t('files_sharing', 'Resharing is not allowed')\n\t\t\t}\n\t\t\t// We can always search with email addresses for users too\n\t\t\tif (!allowRemoteSharing) {\n\t\t\t\treturn t('files_sharing', 'Name or email …')\n\t\t\t}\n\n\t\t\treturn t('files_sharing', 'Name, email, or Federated Cloud ID …')\n\t\t},\n\n\t\tisValidQuery() {\n\t\t\treturn this.query && this.query.trim() !== '' && this.query.length > this.config.minSearchStringLength\n\t\t},\n\n\t\toptions() {\n\t\t\tif (this.isValidQuery) {\n\t\t\t\treturn this.suggestions\n\t\t\t}\n\t\t\treturn this.recommendations\n\t\t},\n\n\t\tnoResultText() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn t('files_sharing', 'Searching …')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'No elements found.')\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.getRecommendations()\n\t},\n\n\tmethods: {\n\t\tasync asyncFind(query, id) {\n\t\t\t// save current query to check if we display\n\t\t\t// recommendations or search results\n\t\t\tthis.query = query.trim()\n\t\t\tif (this.isValidQuery) {\n\t\t\t\t// start loading now to have proper ux feedback\n\t\t\t\t// during the debounce\n\t\t\t\tthis.loading = true\n\t\t\t\tawait this.debounceGetSuggestions(query)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Get suggestions\n\t\t *\n\t\t * @param {string} search the search query\n\t\t * @param {boolean} [lookup=false] search on lookup server\n\t\t */\n\t\tasync getSuggestions(search, lookup = false) {\n\t\t\tthis.loading = true\n\n\t\t\tif (OC.getCapabilities().files_sharing.sharee.query_lookup_default === true) {\n\t\t\t\tlookup = true\n\t\t\t}\n\n\t\t\tconst shareType = [\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_USER,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_GROUP,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_REMOTE,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_CIRCLE,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_ROOM,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_GUEST,\n\t\t\t\tthis.SHARE_TYPES.SHARE_TYPE_DECK,\n\t\t\t]\n\n\t\t\tif (OC.getCapabilities().files_sharing.public.enabled === true) {\n\t\t\t\tshareType.push(this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\t\t\t}\n\n\t\t\tlet request = null\n\t\t\ttry {\n\t\t\t\trequest = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees'), {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\titemType: this.fileInfo.type === 'dir' ? 'folder' : 'file',\n\t\t\t\t\t\tsearch,\n\t\t\t\t\t\tlookup,\n\t\t\t\t\t\tperPage: this.config.maxAutocompleteResults,\n\t\t\t\t\t\tshareType,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error fetching suggestions', error)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst data = request.data.ocs.data\n\t\t\tconst exact = request.data.ocs.data.exact\n\t\t\tdata.exact = [] // removing exact from general results\n\n\t\t\t// flatten array of arrays\n\t\t\tconst rawExactSuggestions = Object.values(exact).reduce((arr, elem) => arr.concat(elem), [])\n\t\t\tconst rawSuggestions = Object.values(data).reduce((arr, elem) => arr.concat(elem), [])\n\n\t\t\t// remove invalid data and format to user-select layout\n\t\t\tconst exactSuggestions = this.filterOutExistingShares(rawExactSuggestions)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t// sort by type so we can get user&groups first...\n\t\t\t\t.sort((a, b) => a.shareType - b.shareType)\n\t\t\tconst suggestions = this.filterOutExistingShares(rawSuggestions)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t// sort by type so we can get user&groups first...\n\t\t\t\t.sort((a, b) => a.shareType - b.shareType)\n\n\t\t\t// lookup clickable entry\n\t\t\t// show if enabled and not already requested\n\t\t\tconst lookupEntry = []\n\t\t\tif (data.lookupEnabled && !lookup) {\n\t\t\t\tlookupEntry.push({\n\t\t\t\t\tid: 'global-lookup',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\tdisplayName: t('files_sharing', 'Search globally'),\n\t\t\t\t\tlookup: true,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// if there is a condition specified, filter it\n\t\t\tconst externalResults = this.externalResults.filter(result => !result.condition || result.condition(this))\n\n\t\t\tconst allSuggestions = exactSuggestions.concat(suggestions).concat(externalResults).concat(lookupEntry)\n\n\t\t\t// Count occurances of display names in order to provide a distinguishable description if needed\n\t\t\tconst nameCounts = allSuggestions.reduce((nameCounts, result) => {\n\t\t\t\tif (!result.displayName) {\n\t\t\t\t\treturn nameCounts\n\t\t\t\t}\n\t\t\t\tif (!nameCounts[result.displayName]) {\n\t\t\t\t\tnameCounts[result.displayName] = 0\n\t\t\t\t}\n\t\t\t\tnameCounts[result.displayName]++\n\t\t\t\treturn nameCounts\n\t\t\t}, {})\n\n\t\t\tthis.suggestions = allSuggestions.map(item => {\n\t\t\t\t// Make sure that items with duplicate displayName get the shareWith applied as a description\n\t\t\t\tif (nameCounts[item.displayName] > 1 && !item.desc) {\n\t\t\t\t\treturn { ...item, desc: item.shareWithDisplayNameUnique }\n\t\t\t\t}\n\t\t\t\treturn item\n\t\t\t})\n\n\t\t\tthis.loading = false\n\t\t\tconsole.info('suggestions', this.suggestions)\n\t\t},\n\n\t\t/**\n\t\t * Debounce getSuggestions\n\t\t *\n\t\t * @param {...*} args the arguments\n\t\t */\n\t\tdebounceGetSuggestions: debounce(function(...args) {\n\t\t\tthis.getSuggestions(...args)\n\t\t}, 300),\n\n\t\t/**\n\t\t * Get the sharing recommendations\n\t\t */\n\t\tasync getRecommendations() {\n\t\t\tthis.loading = true\n\n\t\t\tlet request = null\n\t\t\ttry {\n\t\t\t\trequest = await axios.get(generateOcsUrl('apps/files_sharing/api/v1/sharees_recommended'), {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat: 'json',\n\t\t\t\t\t\titemType: this.fileInfo.type,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error fetching recommendations', error)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Add external results from the OCA.Sharing.ShareSearch api\n\t\t\tconst externalResults = this.externalResults.filter(result => !result.condition || result.condition(this))\n\n\t\t\t// flatten array of arrays\n\t\t\tconst rawRecommendations = Object.values(request.data.ocs.data.exact)\n\t\t\t\t.reduce((arr, elem) => arr.concat(elem), [])\n\n\t\t\t// remove invalid data and format to user-select layout\n\t\t\tthis.recommendations = this.filterOutExistingShares(rawRecommendations)\n\t\t\t\t.map(share => this.formatForMultiselect(share))\n\t\t\t\t.concat(externalResults)\n\n\t\t\tthis.loading = false\n\t\t\tconsole.info('recommendations', this.recommendations)\n\t\t},\n\n\t\t/**\n\t\t * Filter out existing shares from\n\t\t * the provided shares search results\n\t\t *\n\t\t * @param {object[]} shares the array of shares object\n\t\t * @return {object[]}\n\t\t */\n\t\tfilterOutExistingShares(shares) {\n\t\t\treturn shares.reduce((arr, share) => {\n\t\t\t\t// only check proper objects\n\t\t\t\tif (typeof share !== 'object') {\n\t\t\t\t\treturn arr\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (share.value.shareType === this.SHARE_TYPES.SHARE_TYPE_USER) {\n\t\t\t\t\t\t// filter out current user\n\t\t\t\t\t\tif (share.value.shareWith === getCurrentUser().uid) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// filter out the owner of the share\n\t\t\t\t\t\tif (this.reshare && share.value.shareWith === this.reshare.owner) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// filter out existing mail shares\n\t\t\t\t\tif (share.value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\t\t\tconst emails = this.linkShares.map(elem => elem.shareWith)\n\t\t\t\t\t\tif (emails.indexOf(share.value.shareWith.trim()) !== -1) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { // filter out existing shares\n\t\t\t\t\t\t// creating an object of uid => type\n\t\t\t\t\t\tconst sharesObj = this.shares.reduce((obj, elem) => {\n\t\t\t\t\t\t\tobj[elem.shareWith] = elem.type\n\t\t\t\t\t\t\treturn obj\n\t\t\t\t\t\t}, {})\n\n\t\t\t\t\t\t// if shareWith is the same and the share type too, ignore it\n\t\t\t\t\t\tconst key = share.value.shareWith.trim()\n\t\t\t\t\t\tif (key in sharesObj\n\t\t\t\t\t\t\t&& sharesObj[key] === share.value.shareType) {\n\t\t\t\t\t\t\treturn arr\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// ALL GOOD\n\t\t\t\t\t// let's add the suggestion\n\t\t\t\t\tarr.push(share)\n\t\t\t\t} catch {\n\t\t\t\t\treturn arr\n\t\t\t\t}\n\t\t\t\treturn arr\n\t\t\t}, [])\n\t\t},\n\n\t\t/**\n\t\t * Get the icon based on the share type\n\t\t *\n\t\t * @param {number} type the share type\n\t\t * @return {string} the icon class\n\t\t */\n\t\tshareTypeToIcon(type) {\n\t\t\tswitch (type) {\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_GUEST:\n\t\t\t\t// default is a user, other icons are here to differenciate\n\t\t\t\t// themselves from it, so let's not display the user icon\n\t\t\t\t// case this.SHARE_TYPES.SHARE_TYPE_REMOTE:\n\t\t\t\t// case this.SHARE_TYPES.SHARE_TYPE_USER:\n\t\t\t\treturn 'icon-user'\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP:\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_GROUP:\n\t\t\t\treturn 'icon-group'\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_EMAIL:\n\t\t\t\treturn 'icon-mail'\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_CIRCLE:\n\t\t\t\treturn 'icon-circle'\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_ROOM:\n\t\t\t\treturn 'icon-room'\n\t\t\tcase this.SHARE_TYPES.SHARE_TYPE_DECK:\n\t\t\t\treturn 'icon-deck'\n\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Format shares for the multiselect options\n\t\t *\n\t\t * @param {object} result select entry item\n\t\t * @return {object}\n\t\t */\n\t\tformatForMultiselect(result) {\n\t\t\tlet subtitle\n\t\t\tif (result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_USER && this.config.shouldAlwaysShowUnique) {\n\t\t\t\tsubtitle = result.shareWithDisplayNameUnique ?? ''\n\t\t\t} else if ((result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_REMOTE\n\t\t\t\t\t|| result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP\n\t\t\t) && result.value.server) {\n\t\t\t\tsubtitle = t('files_sharing', 'on {server}', { server: result.value.server })\n\t\t\t} else if (result.value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tsubtitle = result.value.shareWith\n\t\t\t} else {\n\t\t\t\tsubtitle = result.shareWithDescription ?? ''\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: `${result.value.shareType}-${result.value.shareWith}`,\n\t\t\t\tshareWith: result.value.shareWith,\n\t\t\t\tshareType: result.value.shareType,\n\t\t\t\tuser: result.uuid || result.value.shareWith,\n\t\t\t\tisNoUser: result.value.shareType !== this.SHARE_TYPES.SHARE_TYPE_USER,\n\t\t\t\tdisplayName: result.name || result.label,\n\t\t\t\tsubtitle,\n\t\t\t\tshareWithDisplayNameUnique: result.shareWithDisplayNameUnique || '',\n\t\t\t\ticon: this.shareTypeToIcon(result.value.shareType),\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the new share request\n\t\t *\n\t\t * @param {object} value the multiselect option\n\t\t */\n\t\tasync addShare(value) {\n\t\t\tif (value.lookup) {\n\t\t\t\tawait this.getSuggestions(this.query, true)\n\n\t\t\t\t// focus the input again\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.$refs.multiselect.$el.querySelector('.multiselect__input').focus()\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\t// handle externalResults from OCA.Sharing.ShareSearch\n\t\t\tif (value.handler) {\n\t\t\t\tconst share = await value.handler(this)\n\t\t\t\tthis.$emit('add:share', new Share(share))\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tthis.loading = true\n\t\t\tconsole.debug('Adding a new share from the input for', value)\n\t\t\ttry {\n\t\t\t\tlet password = null\n\n\t\t\t\tif (this.config.enforcePasswordForPublicLink\n\t\t\t\t\t&& value.shareType === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\t\tpassword = await GeneratePassword()\n\t\t\t\t}\n\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\t\t\t\tconst share = await this.createShare({\n\t\t\t\t\tpath,\n\t\t\t\t\tshareType: value.shareType,\n\t\t\t\t\tshareWith: value.shareWith,\n\t\t\t\t\tpassword,\n\t\t\t\t\tpermissions: this.fileInfo.sharePermissions & OC.getCapabilities().files_sharing.default_permissions,\n\t\t\t\t})\n\n\t\t\t\t// If we had a password, we need to show it to the user as it was generated\n\t\t\t\tif (password) {\n\t\t\t\t\tshare.newPassword = password\n\t\t\t\t\t// Wait for the newly added share\n\t\t\t\t\tconst component = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('add:share', share, resolve)\n\t\t\t\t\t})\n\n\t\t\t\t\t// open the menu on the\n\t\t\t\t\t// freshly created share component\n\t\t\t\t\tcomponent.open = true\n\t\t\t\t} else {\n\t\t\t\t\t// Else we just add it normally\n\t\t\t\t\tthis.$emit('add:share', share)\n\t\t\t\t}\n\n\t\t\t\t// reset the search string when done\n\t\t\t\t// FIXME: https://github.com/shentao/vue-multiselect/issues/633\n\t\t\t\tif (this.$refs.multiselect?.$refs?.VueMultiselect?.search) {\n\t\t\t\t\tthis.$refs.multiselect.$refs.VueMultiselect.search = ''\n\t\t\t\t}\n\n\t\t\t\tawait this.getRecommendations()\n\t\t\t} catch (error) {\n\t\t\t\t// focus back if any error\n\t\t\t\tconst input = this.$refs.multiselect.$el.querySelector('input')\n\t\t\t\tif (input) {\n\t\t\t\t\tinput.focus()\n\t\t\t\t}\n\t\t\t\tthis.query = value.shareWith\n\t\t\t\tconsole.error('Error while adding new share', error)\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\">\n.sharing-input {\n\twidth: 100%;\n\tmargin: 10px 0;\n\n\t// properly style the lookup entry\n\t.multiselect__option {\n\t\tspan[lookup] {\n\t\t\t.avatardiv {\n\t\t\t\tbackground-image: var(--icon-search-fff);\n\t\t\t\tbackground-repeat: no-repeat;\n\t\t\t\tbackground-position: center;\n\t\t\t\tbackground-color: var(--color-text-maxcontrast) !important;\n\t\t\t\tdiv {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInput.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!./SharingInput.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!./SharingInput.vue?vue&type=style&index=0&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!./SharingInput.vue?vue&type=style&index=0&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInput.vue?vue&type=template&id=6c96bdca&\"\nimport script from \"./SharingInput.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingInput.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Multiselect',{ref:\"multiselect\",staticClass:\"sharing-input\",attrs:{\"clear-on-select\":true,\"disabled\":!_vm.canReshare,\"hide-selected\":true,\"internal-search\":false,\"loading\":_vm.loading,\"options\":_vm.options,\"placeholder\":_vm.inputPlaceholder,\"preselect-first\":true,\"preserve-search\":true,\"searchable\":true,\"user-select\":true,\"open-direction\":\"below\",\"label\":\"displayName\",\"track-by\":\"id\"},on:{\"search-change\":_vm.asyncFind,\"select\":_vm.addShare},scopedSlots:_vm._u([{key:\"noOptions\",fn:function(){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'No recommendations. Start typing.'))+\"\\n\\t\")]},proxy:true},{key:\"noResult\",fn:function(){return [_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.noResultText)+\"\\n\\t\")]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Gary Kim <gary@garykim.dev>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// eslint-disable-next-line import/no-unresolved, node/no-missing-import\nimport PQueue from 'p-queue'\nimport debounce from 'debounce'\n\nimport Share from '../models/Share'\nimport SharesRequests from './ShareRequests'\nimport ShareTypes from './ShareTypes'\nimport Config from '../services/ConfigService'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nexport default {\n\tmixins: [SharesRequests, ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t\tisUnique: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\n\t\t\t// errors helpers\n\t\t\terrors: {},\n\n\t\t\t// component status toggles\n\t\t\tloading: false,\n\t\t\tsaving: false,\n\t\t\topen: false,\n\n\t\t\t// concurrency management queue\n\t\t\t// we want one queue per share\n\t\t\tupdateQueue: new PQueue({ concurrency: 1 }),\n\n\t\t\t/**\n\t\t\t * ! This allow vue to make the Share class state reactive\n\t\t\t * ! do not remove it ot you'll lose all reactivity here\n\t\t\t */\n\t\t\treactiveState: this.share?.state,\n\n\t\t\tSHARE_TYPES: {\n\t\t\t\tSHARE_TYPE_USER: OC.Share.SHARE_TYPE_USER,\n\t\t\t\tSHARE_TYPE_GROUP: OC.Share.SHARE_TYPE_GROUP,\n\t\t\t\tSHARE_TYPE_LINK: OC.Share.SHARE_TYPE_LINK,\n\t\t\t\tSHARE_TYPE_EMAIL: OC.Share.SHARE_TYPE_EMAIL,\n\t\t\t\tSHARE_TYPE_REMOTE: OC.Share.SHARE_TYPE_REMOTE,\n\t\t\t\tSHARE_TYPE_CIRCLE: OC.Share.SHARE_TYPE_CIRCLE,\n\t\t\t\tSHARE_TYPE_GUEST: OC.Share.SHARE_TYPE_GUEST,\n\t\t\t\tSHARE_TYPE_REMOTE_GROUP: OC.Share.SHARE_TYPE_REMOTE_GROUP,\n\t\t\t\tSHARE_TYPE_ROOM: OC.Share.SHARE_TYPE_ROOM,\n\t\t\t},\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Does the current share have a note\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasNote: {\n\t\t\tget() {\n\t\t\t\treturn this.share.note !== ''\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tthis.share.note = enabled\n\t\t\t\t\t? null // enabled but user did not changed the content yet\n\t\t\t\t\t: '' // empty = no note = disabled\n\t\t\t},\n\t\t},\n\n\t\tdateTomorrow() {\n\t\t\treturn moment().add(1, 'days')\n\t\t},\n\n\t\t// Datepicker language\n\t\tlang() {\n\t\t\tconst weekdaysShort = window.dayNamesShort\n\t\t\t\t? window.dayNamesShort // provided by nextcloud\n\t\t\t\t: ['Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.']\n\t\t\tconst monthsShort = window.monthNamesShort\n\t\t\t\t? window.monthNamesShort // provided by nextcloud\n\t\t\t\t: ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.']\n\t\t\tconst firstDayOfWeek = window.firstDay ? window.firstDay : 0\n\n\t\t\treturn {\n\t\t\t\tformatLocale: {\n\t\t\t\t\tfirstDayOfWeek,\n\t\t\t\t\tmonthsShort,\n\t\t\t\t\tweekdaysMin: weekdaysShort,\n\t\t\t\t\tweekdaysShort,\n\t\t\t\t},\n\t\t\t\tmonthFormat: 'MMM',\n\t\t\t}\n\t\t},\n\n\t\tisShareOwner() {\n\t\t\treturn this.share && this.share.owner === getCurrentUser().uid\n\t\t},\n\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Check if a share is valid before\n\t\t * firing the request\n\t\t *\n\t\t * @param {Share} share the share to check\n\t\t * @return {boolean}\n\t\t */\n\t\tcheckShare(share) {\n\t\t\tif (share.password) {\n\t\t\t\tif (typeof share.password !== 'string' || share.password.trim() === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (share.expirationDate) {\n\t\t\t\tconst date = moment(share.expirationDate)\n\t\t\t\tif (!date.isValid()) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * ActionInput can be a little tricky to work with.\n\t\t * Since we expect a string and not a Date,\n\t\t * we need to process the value here\n\t\t *\n\t\t * @param {Date} date js date to be parsed by moment.js\n\t\t */\n\t\tonExpirationChange(date) {\n\t\t\t// format to YYYY-MM-DD\n\t\t\tconst value = moment(date).format('YYYY-MM-DD')\n\t\t\tthis.share.expireDate = value\n\t\t\tthis.queueUpdate('expireDate')\n\t\t},\n\n\t\t/**\n\t\t * Uncheck expire date\n\t\t * We need this method because @update:checked\n\t\t * is ran simultaneously as @uncheck, so\n\t\t * so we cannot ensure data is up-to-date\n\t\t */\n\t\tonExpirationDisable() {\n\t\t\tthis.share.expireDate = ''\n\t\t\tthis.queueUpdate('expireDate')\n\t\t},\n\n\t\t/**\n\t\t * Note changed, let's save it to a different key\n\t\t *\n\t\t * @param {string} note the share note\n\t\t */\n\t\tonNoteChange(note) {\n\t\t\tthis.$set(this.share, 'newNote', note.trim())\n\t\t},\n\n\t\t/**\n\t\t * When the note change, we trim, save and dispatch\n\t\t *\n\t\t */\n\t\tonNoteSubmit() {\n\t\t\tif (this.share.newNote) {\n\t\t\t\tthis.share.note = this.share.newNote\n\t\t\t\tthis.$delete(this.share, 'newNote')\n\t\t\t\tthis.queueUpdate('note')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Delete share button handler\n\t\t */\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.open = false\n\t\t\t\tawait this.deleteShare(this.share.id)\n\t\t\t\tconsole.debug('Share deleted', this.share.id)\n\t\t\t\tthis.$emit('remove:share', this.share)\n\t\t\t} catch (error) {\n\t\t\t\t// re-open menu if error\n\t\t\t\tthis.open = true\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Send an update of the share to the queue\n\t\t *\n\t\t * @param {Array<string>} propertyNames the properties to sync\n\t\t */\n\t\tqueueUpdate(...propertyNames) {\n\t\t\tif (propertyNames.length === 0) {\n\t\t\t\t// Nothing to update\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.share.id) {\n\t\t\t\tconst properties = {}\n\t\t\t\t// force value to string because that is what our\n\t\t\t\t// share api controller accepts\n\t\t\t\tpropertyNames.map(p => (properties[p] = this.share[p].toString()))\n\n\t\t\t\tthis.updateQueue.add(async () => {\n\t\t\t\t\tthis.saving = true\n\t\t\t\t\tthis.errors = {}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.updateShare(this.share.id, properties)\n\n\t\t\t\t\t\tif (propertyNames.indexOf('password') >= 0) {\n\t\t\t\t\t\t\t// reset password state after sync\n\t\t\t\t\t\t\tthis.$delete(this.share, 'newPassword')\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// clear any previous errors\n\t\t\t\t\t\tthis.$delete(this.errors, propertyNames[0])\n\n\t\t\t\t\t} catch ({ message }) {\n\t\t\t\t\t\tif (message && message !== '') {\n\t\t\t\t\t\t\tthis.onSyncError(propertyNames[0], message)\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.saving = false\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tconsole.error('Cannot update share.', this.share, 'No valid id')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Manage sync errors\n\t\t *\n\t\t * @param {string} property the errored property, e.g. 'password'\n\t\t * @param {string} message the error message\n\t\t */\n\t\tonSyncError(property, message) {\n\t\t\t// re-open menu if closed\n\t\t\tthis.open = true\n\t\t\tswitch (property) {\n\t\t\tcase 'password':\n\t\t\tcase 'pending':\n\t\t\tcase 'expireDate':\n\t\t\tcase 'label':\n\t\t\tcase 'note': {\n\t\t\t\t// show error\n\t\t\t\tthis.$set(this.errors, property, message)\n\n\t\t\t\tlet propertyEl = this.$refs[property]\n\t\t\t\tif (propertyEl) {\n\t\t\t\t\tif (propertyEl.$el) {\n\t\t\t\t\t\tpropertyEl = propertyEl.$el\n\t\t\t\t\t}\n\t\t\t\t\t// focus if there is a focusable action element\n\t\t\t\t\tconst focusable = propertyEl.querySelector('.focusable')\n\t\t\t\t\tif (focusable) {\n\t\t\t\t\t\tfocusable.focus()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'sendPasswordByTalk': {\n\t\t\t\t// show error\n\t\t\t\tthis.$set(this.errors, property, message)\n\n\t\t\t\t// Restore previous state\n\t\t\t\tthis.share.sendPasswordByTalk = !this.share.sendPasswordByTalk\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Debounce queueUpdate to avoid requests spamming\n\t\t * more importantly for text data\n\t\t *\n\t\t * @param {string} property the property to sync\n\t\t */\n\t\tdebounceQueueUpdate: debounce(function(property) {\n\t\t\tthis.queueUpdate(property)\n\t\t}, 500),\n\n\t\t/**\n\t\t * Returns which dates are disabled for the datepicker\n\t\t *\n\t\t * @param {Date} date date to check\n\t\t * @return {boolean}\n\t\t */\n\t\tdisabledDate(date) {\n\t\t\tconst dateMoment = moment(date)\n\t\t\treturn (this.dateTomorrow && dateMoment.isBefore(this.dateTomorrow, 'day'))\n\t\t\t\t|| (this.dateMaxEnforced && dateMoment.isSameOrAfter(this.dateMaxEnforced, 'day'))\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.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!./SharingEntryInherited.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 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<SharingEntrySimple\n\t\t:key=\"share.id\"\n\t\tclass=\"sharing-entry__inherited\"\n\t\t:title=\"share.shareWithDisplayName\">\n\t\t<template #avatar>\n\t\t\t<Avatar\n\t\t\t\t:user=\"share.shareWith\"\n\t\t\t\t:display-name=\"share.shareWithDisplayName\"\n\t\t\t\tclass=\"sharing-entry__avatar\"\n\t\t\t\ttooltip-message=\"\" />\n\t\t</template>\n\t\t<ActionText icon=\"icon-user\">\n\t\t\t{{ t('files_sharing', 'Added by {initiator}', { initiator: share.ownerDisplayName }) }}\n\t\t</ActionText>\n\t\t<ActionLink v-if=\"share.viaPath && share.viaFileid\"\n\t\t\ticon=\"icon-folder\"\n\t\t\t:href=\"viaFileTargetUrl\">\n\t\t\t{{ t('files_sharing', 'Via “{folder}”', {folder: viaFolderName} ) }}\n\t\t</ActionLink>\n\t\t<ActionButton v-if=\"share.canDelete\"\n\t\t\ticon=\"icon-close\"\n\t\t\t@click.prevent=\"onDelete\">\n\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t</actionbutton>\n\t</SharingEntrySimple>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { basename } from '@nextcloud/paths'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ActionLink from '@nextcloud/vue/dist/Components/ActionLink'\nimport ActionText from '@nextcloud/vue/dist/Components/ActionText'\n\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport SharesMixin from '../mixins/SharesMixin'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\n\nexport default {\n\tname: 'SharingEntryInherited',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tActionLink,\n\t\tActionText,\n\t\tAvatar,\n\t\tSharingEntrySimple,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tprops: {\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tviaFileTargetUrl() {\n\t\t\treturn generateUrl('/f/{fileid}', {\n\t\t\t\tfileid: this.share.viaFileid,\n\t\t\t})\n\t\t},\n\n\t\tviaFolderName() {\n\t\t\treturn basename(this.share.viaPath)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\n\t}\n}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingEntryInherited.vue?vue&type=style&index=0&id=c58e421a&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!./SharingEntryInherited.vue?vue&type=style&index=0&id=c58e421a&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryInherited.vue?vue&type=template&id=c58e421a&scoped=true&\"\nimport script from \"./SharingEntryInherited.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryInherited.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryInherited.vue?vue&type=style&index=0&id=c58e421a&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 \"c58e421a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SharingEntrySimple',{key:_vm.share.id,staticClass:\"sharing-entry__inherited\",attrs:{\"title\":_vm.share.shareWithDisplayName},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('Avatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"user\":_vm.share.shareWith,\"display-name\":_vm.share.shareWithDisplayName,\"tooltip-message\":\"\"}})]},proxy:true}])},[_vm._v(\" \"),_c('ActionText',{attrs:{\"icon\":\"icon-user\"}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Added by {initiator}', { initiator: _vm.share.ownerDisplayName }))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.share.viaPath && _vm.share.viaFileid)?_c('ActionLink',{attrs:{\"icon\":\"icon-folder\",\"href\":_vm.viaFileTargetUrl}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Via “{folder}”', {folder: _vm.viaFolderName} ))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.share.canDelete)?_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 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<ul id=\"sharing-inherited-shares\">\n\t\t<!-- Main collapsible entry -->\n\t\t<SharingEntrySimple\n\t\t\tclass=\"sharing-entry__inherited\"\n\t\t\t:title=\"mainTitle\"\n\t\t\t:subtitle=\"subTitle\">\n\t\t\t<template #avatar>\n\t\t\t\t<div class=\"avatar-shared icon-more-white\" />\n\t\t\t</template>\n\t\t\t<ActionButton :icon=\"showInheritedSharesIcon\" @click.prevent.stop=\"toggleInheritedShares\">\n\t\t\t\t{{ toggleTooltip }}\n\t\t\t</ActionButton>\n\t\t</SharingEntrySimple>\n\n\t\t<!-- Inherited shares list -->\n\t\t<SharingEntryInherited v-for=\"share in shares\"\n\t\t\t:key=\"share.id\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t:share=\"share\" />\n\t</ul>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport axios from '@nextcloud/axios'\n\nimport Share from '../models/Share'\nimport SharingEntryInherited from '../components/SharingEntryInherited'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\n\nexport default {\n\tname: 'SharingInherited',\n\n\tcomponents: {\n\t\tActionButton,\n\t\tSharingEntryInherited,\n\t\tSharingEntrySimple,\n\t},\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloaded: false,\n\t\t\tloading: false,\n\t\t\tshowInheritedShares: false,\n\t\t\tshares: [],\n\t\t}\n\t},\n\tcomputed: {\n\t\tshowInheritedSharesIcon() {\n\t\t\tif (this.loading) {\n\t\t\t\treturn 'icon-loading-small'\n\t\t\t}\n\t\t\tif (this.showInheritedShares) {\n\t\t\t\treturn 'icon-triangle-n'\n\t\t\t}\n\t\t\treturn 'icon-triangle-s'\n\t\t},\n\t\tmainTitle() {\n\t\t\treturn t('files_sharing', 'Others with access')\n\t\t},\n\t\tsubTitle() {\n\t\t\treturn (this.showInheritedShares && this.shares.length === 0)\n\t\t\t\t? t('files_sharing', 'No other users with access found')\n\t\t\t\t: ''\n\t\t},\n\t\ttoggleTooltip() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t\t\t? t('files_sharing', 'Toggle list of others with access to this directory')\n\t\t\t\t: t('files_sharing', 'Toggle list of others with access to this file')\n\t\t},\n\t\tfullPath() {\n\t\t\tconst path = `${this.fileInfo.path}/${this.fileInfo.name}`\n\t\t\treturn path.replace('//', '/')\n\t\t},\n\t},\n\twatch: {\n\t\tfileInfo() {\n\t\t\tthis.resetState()\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Toggle the list view and fetch/reset the state\n\t\t */\n\t\ttoggleInheritedShares() {\n\t\t\tthis.showInheritedShares = !this.showInheritedShares\n\t\t\tif (this.showInheritedShares) {\n\t\t\t\tthis.fetchInheritedShares()\n\t\t\t} else {\n\t\t\t\tthis.resetState()\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Fetch the Inherited Shares array\n\t\t */\n\t\tasync fetchInheritedShares() {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst url = generateOcsUrl('apps/files_sharing/api/v1/shares/inherited?format=json&path={path}', { path: this.fullPath })\n\t\t\t\tconst shares = await axios.get(url)\n\t\t\t\tthis.shares = shares.data.ocs.data\n\t\t\t\t\t.map(share => new Share(share))\n\t\t\t\t\t.sort((a, b) => b.createdTime - a.createdTime)\n\t\t\t\tconsole.info(this.shares)\n\t\t\t\tthis.loaded = true\n\t\t\t} catch (error) {\n\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Unable to fetch inherited shares'), { type: 'error' })\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Reset current component state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.loaded = false\n\t\t\tthis.loading = false\n\t\t\tthis.showInheritedShares = false\n\t\t\tthis.shares = []\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry__inherited {\n\t.avatar-shared {\n\t\twidth: 32px;\n\t\theight: 32px;\n\t\tline-height: 32px;\n\t\tfont-size: 18px;\n\t\tbackground-color: var(--color-text-maxcontrast);\n\t\tborder-radius: 50%;\n\t\tflex-shrink: 0;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingInherited.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!./SharingInherited.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!./SharingInherited.vue?vue&type=style&index=0&id=1c2059ae&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!./SharingInherited.vue?vue&type=style&index=0&id=1c2059ae&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingInherited.vue?vue&type=template&id=1c2059ae&scoped=true&\"\nimport script from \"./SharingInherited.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingInherited.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingInherited.vue?vue&type=style&index=0&id=1c2059ae&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 \"1c2059ae\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{attrs:{\"id\":\"sharing-inherited-shares\"}},[_c('SharingEntrySimple',{staticClass:\"sharing-entry__inherited\",attrs:{\"title\":_vm.mainTitle,\"subtitle\":_vm.subTitle},scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('div',{staticClass:\"avatar-shared icon-more-white\"})]},proxy:true}])},[_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":_vm.showInheritedSharesIcon},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.toggleInheritedShares.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.toggleTooltip)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),_vm._l((_vm.shares),function(share){return _c('SharingEntryInherited',{key:share.id,attrs:{\"file-info\":_vm.fileInfo,\"share\":share}})})],2)}\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!./ExternalShareAction.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!./ExternalShareAction.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2021 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<Component :is=\"data.is\"\n\t\tv-bind=\"data\"\n\t\tv-on=\"action.handlers\">\n\t\t{{ data.text }}\n\t</Component>\n</template>\n\n<script>\nimport Share from '../models/Share'\n\nexport default {\n\tname: 'ExternalShareAction',\n\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\taction: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshare: {\n\t\t\ttype: Share,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tdata() {\n\t\t\treturn this.action.data(this)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./ExternalShareAction.vue?vue&type=template&id=29f555e7&\"\nimport script from \"./ExternalShareAction.vue?vue&type=script&lang=js&\"\nexport * from \"./ExternalShareAction.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.data.is,_vm._g(_vm._b({tag:\"Component\"},'Component',_vm.data,false),_vm.action.handlers),[_vm._v(\"\\n\\t\"+_vm._s(_vm.data.text)+\"\\n\")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 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=\"{'sharing-entry--share': share}\" class=\"sharing-entry sharing-entry__link\">\n\t\t<Avatar :is-no-user=\"true\"\n\t\t\t:icon-class=\"isEmailShareType ? 'avatar-link-share icon-mail-white' : 'avatar-link-share icon-public-white'\"\n\t\t\tclass=\"sharing-entry__avatar\" />\n\t\t<div class=\"sharing-entry__desc\">\n\t\t\t<h5 :title=\"title\">\n\t\t\t\t{{ title }}\n\t\t\t</h5>\n\t\t\t<p v-if=\"subtitle\">\n\t\t\t\t{{ subtitle }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<!-- clipboard -->\n\t\t<Actions v-if=\"share && !isEmailShareType && share.token\"\n\t\t\tref=\"copyButton\"\n\t\t\tclass=\"sharing-entry__copy\">\n\t\t\t<ActionLink :href=\"shareLink\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\t:icon=\"copied && copySuccess ? 'icon-checkmark-color' : 'icon-clippy'\"\n\t\t\t\t@click.stop.prevent=\"copyLink\">\n\t\t\t\t{{ clipboardTooltip }}\n\t\t\t</ActionLink>\n\t\t</Actions>\n\n\t\t<!-- pending actions -->\n\t\t<Actions v-if=\"!pending && (pendingPassword || pendingExpirationDate)\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:open.sync=\"open\"\n\t\t\t@close=\"onNewLinkShare\">\n\t\t\t<!-- pending data menu -->\n\t\t\t<ActionText v-if=\"errors.pending\"\n\t\t\t\ticon=\"icon-error\"\n\t\t\t\t:class=\"{ error: errors.pending}\">\n\t\t\t\t{{ errors.pending }}\n\t\t\t</ActionText>\n\t\t\t<ActionText v-else icon=\"icon-info\">\n\t\t\t\t{{ t('files_sharing', 'Please enter the following required information before creating the share') }}\n\t\t\t</ActionText>\n\n\t\t\t<!-- password -->\n\t\t\t<ActionText v-if=\"pendingPassword\" icon=\"icon-password\">\n\t\t\t\t{{ t('files_sharing', 'Password protection (enforced)') }}\n\t\t\t</ActionText>\n\t\t\t<ActionCheckbox v-else-if=\"config.enableLinkPasswordByDefault\"\n\t\t\t\t:checked.sync=\"isPasswordProtected\"\n\t\t\t\t:disabled=\"config.enforcePasswordForPublicLink || saving\"\n\t\t\t\tclass=\"share-link-password-checkbox\"\n\t\t\t\t@uncheck=\"onPasswordDisable\">\n\t\t\t\t{{ t('files_sharing', 'Password protection') }}\n\t\t\t</ActionCheckbox>\n\t\t\t<ActionInput v-if=\"pendingPassword || share.password\"\n\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\tcontent: errors.password,\n\t\t\t\t\tshow: errors.password,\n\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t}\"\n\t\t\t\tclass=\"share-link-password\"\n\t\t\t\t:value.sync=\"share.password\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t:required=\"config.enableLinkPasswordByDefault || config.enforcePasswordForPublicLink\"\n\t\t\t\t:minlength=\"isPasswordPolicyEnabled && config.passwordPolicy.minLength\"\n\t\t\t\ticon=\"\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t@submit=\"onNewLinkShare\">\n\t\t\t\t{{ t('files_sharing', 'Enter a password') }}\n\t\t\t</ActionInput>\n\n\t\t\t<!-- expiration date -->\n\t\t\t<ActionText v-if=\"pendingExpirationDate\" icon=\"icon-calendar-dark\">\n\t\t\t\t{{ t('files_sharing', 'Expiration date (enforced)') }}\n\t\t\t</ActionText>\n\t\t\t<ActionInput v-if=\"pendingExpirationDate\"\n\t\t\t\tv-model=\"share.expireDate\"\n\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\tcontent: errors.expireDate,\n\t\t\t\t\tshow: errors.expireDate,\n\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t}\"\n\t\t\t\tclass=\"share-link-expire-date\"\n\t\t\t\t:disabled=\"saving\"\n\n\t\t\t\t:lang=\"lang\"\n\t\t\t\ticon=\"\"\n\t\t\t\ttype=\"date\"\n\t\t\t\tvalue-type=\"format\"\n\t\t\t\t:disabled-date=\"disabledDate\">\n\t\t\t\t<!-- let's not submit when picked, the user\n\t\t\t\t\tmight want to still edit or copy the password -->\n\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t</ActionInput>\n\n\t\t\t<ActionButton icon=\"icon-checkmark\" @click.prevent.stop=\"onNewLinkShare\">\n\t\t\t\t{{ t('files_sharing', 'Create share') }}\n\t\t\t</ActionButton>\n\t\t\t<ActionButton icon=\"icon-close\" @click.prevent.stop=\"onCancel\">\n\t\t\t\t{{ t('files_sharing', 'Cancel') }}\n\t\t\t</ActionButton>\n\t\t</Actions>\n\n\t\t<!-- actions -->\n\t\t<Actions v-else-if=\"!loading\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\tmenu-align=\"right\"\n\t\t\t:open.sync=\"open\"\n\t\t\t@close=\"onMenuClose\">\n\t\t\t<template v-if=\"share\">\n\t\t\t\t<template v-if=\"share.canEdit && canReshare\">\n\t\t\t\t\t<!-- Custom Label -->\n\t\t\t\t\t<ActionInput\n\t\t\t\t\t\tref=\"label\"\n\t\t\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\t\t\tcontent: errors.label,\n\t\t\t\t\t\t\tshow: errors.label,\n\t\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t\tdefaultContainer: '.app-sidebar'\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:class=\"{ error: errors.label }\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:aria-label=\"t('files_sharing', 'Share label')\"\n\t\t\t\t\t\t:value=\"share.newLabel !== undefined ? share.newLabel : share.label\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\tmaxlength=\"255\"\n\t\t\t\t\t\t@update:value=\"onLabelChange\"\n\t\t\t\t\t\t@submit=\"onLabelSubmit\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Share label') }}\n\t\t\t\t\t</ActionInput>\n\t\t\t\t\t<!-- folder -->\n\t\t\t\t\t<template v-if=\"isFolder && fileHasCreatePermission && config.isPublicUploadEnabled\">\n\t\t\t\t\t\t<ActionRadio :checked=\"sharePermissions === publicUploadRValue\"\n\t\t\t\t\t\t\t:value=\"publicUploadRValue\"\n\t\t\t\t\t\t\t:name=\"randomId\"\n\t\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t\t@change=\"togglePermissions\">\n\t\t\t\t\t\t\t{{ t('files_sharing', 'Read only') }}\n\t\t\t\t\t\t</ActionRadio>\n\t\t\t\t\t\t<ActionRadio :checked=\"sharePermissions === publicUploadRWValue\"\n\t\t\t\t\t\t\t:value=\"publicUploadRWValue\"\n\t\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t\t:name=\"randomId\"\n\t\t\t\t\t\t\t@change=\"togglePermissions\">\n\t\t\t\t\t\t\t{{ t('files_sharing', 'Allow upload and editing') }}\n\t\t\t\t\t\t</ActionRadio>\n\t\t\t\t\t\t<ActionRadio :checked=\"sharePermissions === publicUploadWValue\"\n\t\t\t\t\t\t\t:value=\"publicUploadWValue\"\n\t\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t\t:name=\"randomId\"\n\t\t\t\t\t\t\tclass=\"sharing-entry__action--public-upload\"\n\t\t\t\t\t\t\t@change=\"togglePermissions\">\n\t\t\t\t\t\t\t{{ t('files_sharing', 'File drop (upload only)') }}\n\t\t\t\t\t\t</ActionRadio>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- file -->\n\t\t\t\t\t<ActionCheckbox v-if=\"!isFolder\"\n\t\t\t\t\t\t:checked.sync=\"canUpdate\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@change=\"queueUpdate('permissions')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Allow editing') }}\n\t\t\t\t\t</ActionCheckbox>\n\n\t\t\t\t\t<ActionCheckbox\n\t\t\t\t\t\t:checked.sync=\"share.hideDownload\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@change=\"queueUpdate('hideDownload')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Hide download') }}\n\t\t\t\t\t</ActionCheckbox>\n\n\t\t\t\t\t<!-- password -->\n\t\t\t\t\t<ActionCheckbox :checked.sync=\"isPasswordProtected\"\n\t\t\t\t\t\t:disabled=\"config.enforcePasswordForPublicLink || saving\"\n\t\t\t\t\t\tclass=\"share-link-password-checkbox\"\n\t\t\t\t\t\t@uncheck=\"onPasswordDisable\">\n\t\t\t\t\t\t{{ config.enforcePasswordForPublicLink\n\t\t\t\t\t\t\t? t('files_sharing', 'Password protection (enforced)')\n\t\t\t\t\t\t\t: t('files_sharing', 'Password protect') }}\n\t\t\t\t\t</ActionCheckbox>\n\t\t\t\t\t<ActionInput v-if=\"isPasswordProtected\"\n\t\t\t\t\t\tref=\"password\"\n\t\t\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\t\t\tcontent: errors.password,\n\t\t\t\t\t\t\tshow: errors.password,\n\t\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\tclass=\"share-link-password\"\n\t\t\t\t\t\t:class=\"{ error: errors.password}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:required=\"config.enforcePasswordForPublicLink\"\n\t\t\t\t\t\t:value=\"hasUnsavedPassword ? share.newPassword : '***************'\"\n\t\t\t\t\t\ticon=\"icon-password\"\n\t\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\t\t:type=\"hasUnsavedPassword ? 'text': 'password'\"\n\t\t\t\t\t\t@update:value=\"onPasswordChange\"\n\t\t\t\t\t\t@submit=\"onPasswordSubmit\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Enter a password') }}\n\t\t\t\t\t</ActionInput>\n\n\t\t\t\t\t<!-- password protected by Talk -->\n\t\t\t\t\t<ActionCheckbox v-if=\"isPasswordProtectedByTalkAvailable\"\n\t\t\t\t\t\t:checked.sync=\"isPasswordProtectedByTalk\"\n\t\t\t\t\t\t:disabled=\"!canTogglePasswordProtectedByTalkAvailable || saving\"\n\t\t\t\t\t\tclass=\"share-link-password-talk-checkbox\"\n\t\t\t\t\t\t@change=\"onPasswordProtectedByTalkChange\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Video verification') }}\n\t\t\t\t\t</ActionCheckbox>\n\n\t\t\t\t\t<!-- expiration date -->\n\t\t\t\t\t<ActionCheckbox :checked.sync=\"hasExpirationDate\"\n\t\t\t\t\t\t:disabled=\"config.isDefaultExpireDateEnforced || saving\"\n\t\t\t\t\t\tclass=\"share-link-expire-date-checkbox\"\n\t\t\t\t\t\t@uncheck=\"onExpirationDisable\">\n\t\t\t\t\t\t{{ config.isDefaultExpireDateEnforced\n\t\t\t\t\t\t\t? t('files_sharing', 'Expiration date (enforced)')\n\t\t\t\t\t\t\t: t('files_sharing', 'Set expiration date') }}\n\t\t\t\t\t</ActionCheckbox>\n\t\t\t\t\t<ActionInput v-if=\"hasExpirationDate\"\n\t\t\t\t\t\tref=\"expireDate\"\n\t\t\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\t\t\tcontent: errors.expireDate,\n\t\t\t\t\t\t\tshow: errors.expireDate,\n\t\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\tclass=\"share-link-expire-date\"\n\t\t\t\t\t\t:class=\"{ error: errors.expireDate}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:lang=\"lang\"\n\t\t\t\t\t\t:value=\"share.expireDate\"\n\t\t\t\t\t\tvalue-type=\"format\"\n\t\t\t\t\t\ticon=\"icon-calendar-dark\"\n\t\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t\t:disabled-date=\"disabledDate\"\n\t\t\t\t\t\t@update:value=\"onExpirationChange\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t\t\t</ActionInput>\n\n\t\t\t\t\t<!-- note -->\n\t\t\t\t\t<ActionCheckbox :checked.sync=\"hasNote\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@uncheck=\"queueUpdate('note')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Note to recipient') }}\n\t\t\t\t\t</ActionCheckbox>\n\t\t\t\t\t<ActionTextEditable v-if=\"hasNote\"\n\t\t\t\t\t\tref=\"note\"\n\t\t\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\t\t\tcontent: errors.note,\n\t\t\t\t\t\t\tshow: errors.note,\n\t\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:class=\"{ error: errors.note}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:placeholder=\"t('files_sharing', 'Enter a note for the share recipient')\"\n\t\t\t\t\t\t:value=\"share.newNote || share.note\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\t@update:value=\"onNoteChange\"\n\t\t\t\t\t\t@submit=\"onNoteSubmit\" />\n\t\t\t\t</template>\n\n\t\t\t\t<!-- external actions -->\n\t\t\t\t<ExternalShareAction v-for=\"action in externalLinkActions\"\n\t\t\t\t\t:id=\"action.id\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t:action=\"action\"\n\t\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t\t:share=\"share\" />\n\n\t\t\t\t<!-- external legacy sharing via url (social...) -->\n\t\t\t\t<ActionLink v-for=\"({icon, url, name}, index) in externalLegacyLinkActions\"\n\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t:href=\"url(shareLink)\"\n\t\t\t\t\t:icon=\"icon\"\n\t\t\t\t\ttarget=\"_blank\">\n\t\t\t\t\t{{ name }}\n\t\t\t\t</ActionLink>\n\n\t\t\t\t<ActionButton v-if=\"share.canDelete\"\n\t\t\t\t\ticon=\"icon-close\"\n\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t@click.prevent=\"onDelete\">\n\t\t\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t\t\t</ActionButton>\n\t\t\t\t<ActionButton v-if=\"!isEmailShareType && canReshare\"\n\t\t\t\t\tclass=\"new-share-link\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click.prevent.stop=\"onNewLinkShare\">\n\t\t\t\t\t{{ t('files_sharing', 'Add another link') }}\n\t\t\t\t</ActionButton>\n\t\t\t</template>\n\n\t\t\t<!-- Create new share -->\n\t\t\t<ActionButton v-else-if=\"canReshare\"\n\t\t\t\tclass=\"new-share-link\"\n\t\t\t\t:icon=\"loading ? 'icon-loading-small' : 'icon-add'\"\n\t\t\t\t@click.prevent.stop=\"onNewLinkShare\">\n\t\t\t\t{{ t('files_sharing', 'Create a new share link') }}\n\t\t\t</ActionButton>\n\t\t</Actions>\n\n\t\t<!-- loading indicator to replace the menu -->\n\t\t<div v-else class=\"icon-loading-small sharing-entry__loading\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport Vue from 'vue'\n\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ActionCheckbox from '@nextcloud/vue/dist/Components/ActionCheckbox'\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport ActionLink from '@nextcloud/vue/dist/Components/ActionLink'\nimport ActionRadio from '@nextcloud/vue/dist/Components/ActionRadio'\nimport ActionText from '@nextcloud/vue/dist/Components/ActionText'\nimport ActionTextEditable from '@nextcloud/vue/dist/Components/ActionTextEditable'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\n\nimport ExternalShareAction from './ExternalShareAction'\nimport GeneratePassword from '../utils/GeneratePassword'\nimport Share from '../models/Share'\nimport SharesMixin from '../mixins/SharesMixin'\n\nexport default {\n\tname: 'SharingEntryLink',\n\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t\tActionCheckbox,\n\t\tActionRadio,\n\t\tActionInput,\n\t\tActionLink,\n\t\tActionText,\n\t\tActionTextEditable,\n\t\tAvatar,\n\t\tExternalShareAction,\n\t},\n\n\tdirectives: {\n\t\tTooltip,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tprops: {\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcopySuccess: true,\n\t\t\tcopied: false,\n\n\t\t\t// Are we waiting for password/expiration date\n\t\t\tpending: false,\n\n\t\t\tpublicUploadRWValue: OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE,\n\t\t\tpublicUploadRValue: OC.PERMISSION_READ,\n\t\t\tpublicUploadWValue: OC.PERMISSION_CREATE,\n\n\t\t\tExternalLegacyLinkActions: OCA.Sharing.ExternalLinkActions.state,\n\t\t\tExternalShareActions: OCA.Sharing.ExternalShareActions.state,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Return the current share permissions\n\t\t * We always ignore the SHARE permission as this is used for the\n\t\t * federated sharing.\n\t\t *\n\t\t * @return {number}\n\t\t */\n\t\tsharePermissions() {\n\t\t\treturn this.share.permissions & ~OC.PERMISSION_SHARE\n\t\t},\n\t\t/**\n\t\t * Generate a unique random id for this SharingEntryLink only\n\t\t * This allows ActionRadios to have the same name prop\n\t\t * but not to impact others SharingEntryLink\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trandomId() {\n\t\t\treturn Math.random().toString(27).substr(2)\n\t\t},\n\n\t\t/**\n\t\t * Link share label\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\ttitle() {\n\t\t\t// if we have a valid existing share (not pending)\n\t\t\tif (this.share && this.share.id) {\n\t\t\t\tif (!this.isShareOwner && this.share.ownerDisplayName) {\n\t\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\t\treturn t('files_sharing', '{shareWith} by {initiator}', {\n\t\t\t\t\t\t\tshareWith: this.share.shareWith,\n\t\t\t\t\t\t\tinitiator: this.share.ownerDisplayName,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn t('files_sharing', 'Shared via link by {initiator}', {\n\t\t\t\t\t\tinitiator: this.share.ownerDisplayName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.share.label && this.share.label.trim() !== '') {\n\t\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\t\treturn t('files_sharing', 'Mail share ({label})', {\n\t\t\t\t\t\t\tlabel: this.share.label.trim(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn t('files_sharing', 'Share link ({label})', {\n\t\t\t\t\t\tlabel: this.share.label.trim(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (this.isEmailShareType) {\n\t\t\t\t\treturn this.share.shareWith\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Share link')\n\t\t},\n\n\t\t/**\n\t\t * Show the email on a second line if a label is set for mail shares\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsubtitle() {\n\t\t\tif (this.isEmailShareType\n\t\t\t\t&& this.title !== this.share.shareWith) {\n\t\t\t\treturn this.share.shareWith\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Does the current share have an expiration date\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasExpirationDate: {\n\t\t\tget() {\n\t\t\t\treturn this.config.isDefaultExpireDateEnforced\n\t\t\t\t\t|| !!this.share.expireDate\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tlet dateString = moment(this.config.defaultExpirationDateString)\n\t\t\t\tif (!dateString.isValid()) {\n\t\t\t\t\tdateString = moment()\n\t\t\t\t}\n\t\t\t\tthis.share.state.expiration = enabled\n\t\t\t\t\t? dateString.format('YYYY-MM-DD')\n\t\t\t\t\t: ''\n\t\t\t\tconsole.debug('Expiration date status', enabled, this.share.expireDate)\n\t\t\t},\n\t\t},\n\n\t\tdateMaxEnforced() {\n\t\t\treturn this.config.isDefaultExpireDateEnforced\n\t\t\t\t&& moment().add(1 + this.config.defaultExpireDate, 'days')\n\t\t},\n\n\t\t/**\n\t\t * Is the current share password protected ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtected: {\n\t\t\tget() {\n\t\t\t\treturn this.config.enforcePasswordForPublicLink\n\t\t\t\t\t|| !!this.share.password\n\t\t\t},\n\t\t\tasync set(enabled) {\n\t\t\t\t// TODO: directly save after generation to make sure the share is always protected\n\t\t\t\tVue.set(this.share, 'password', enabled ? await GeneratePassword() : '')\n\t\t\t\tVue.set(this.share, 'newPassword', this.share.password)\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is Talk enabled?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisTalkEnabled() {\n\t\t\treturn OC.appswebroots.spreed !== undefined\n\t\t},\n\n\t\t/**\n\t\t * Is it possible to protect the password by Talk?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtectedByTalkAvailable() {\n\t\t\treturn this.isPasswordProtected && this.isTalkEnabled\n\t\t},\n\n\t\t/**\n\t\t * Is the current share password protected by Talk?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisPasswordProtectedByTalk: {\n\t\t\tget() {\n\t\t\t\treturn this.share.sendPasswordByTalk\n\t\t\t},\n\t\t\tasync set(enabled) {\n\t\t\t\tthis.share.sendPasswordByTalk = enabled\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is the current share an email share ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEmailShareType() {\n\t\t\treturn this.share\n\t\t\t\t? this.share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL\n\t\t\t\t: false\n\t\t},\n\n\t\tcanTogglePasswordProtectedByTalkAvailable() {\n\t\t\tif (!this.isPasswordProtected) {\n\t\t\t\t// Makes no sense\n\t\t\t\treturn false\n\t\t\t} else if (this.isEmailShareType && !this.hasUnsavedPassword) {\n\t\t\t\t// For email shares we need a new password in order to enable or\n\t\t\t\t// disable\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Anything else should be fine\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Pending data.\n\t\t * If the share still doesn't have an id, it is not synced\n\t\t * Therefore this is still not valid and requires user input\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tpendingPassword() {\n\t\t\treturn this.config.enforcePasswordForPublicLink && this.share && !this.share.id\n\t\t},\n\t\tpendingExpirationDate() {\n\t\t\treturn this.config.isDefaultExpireDateEnforced && this.share && !this.share.id\n\t\t},\n\n\t\t/**\n\t\t * Can the recipient edit the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanUpdate: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasUpdatePermission\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tthis.share.permissions = enabled\n\t\t\t\t\t? OC.PERMISSION_READ | OC.PERMISSION_UPDATE\n\t\t\t\t\t: OC.PERMISSION_READ\n\t\t\t},\n\t\t},\n\n\t\t// if newPassword exists, but is empty, it means\n\t\t// the user deleted the original password\n\t\thasUnsavedPassword() {\n\t\t\treturn this.share.newPassword !== undefined\n\t\t},\n\n\t\t/**\n\t\t * Is the current share a folder ?\n\t\t * TODO: move to a proper FileInfo model?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFolder() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t},\n\n\t\t/**\n\t\t * Does the current file/folder have create permissions\n\t\t * TODO: move to a proper FileInfo model?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tfileHasCreatePermission() {\n\t\t\treturn !!(this.fileInfo.permissions & OC.PERMISSION_CREATE)\n\t\t},\n\n\t\t/**\n\t\t * Return the public share link\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tshareLink() {\n\t\t\treturn window.location.protocol + '//' + window.location.host + generateUrl('/s/') + this.share.token\n\t\t},\n\n\t\t/**\n\t\t * Clipboard v-tooltip message\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tclipboardTooltip() {\n\t\t\tif (this.copied) {\n\t\t\t\treturn this.copySuccess\n\t\t\t\t\t? t('files_sharing', 'Link copied')\n\t\t\t\t\t: t('files_sharing', 'Cannot copy, please copy the link manually')\n\t\t\t}\n\t\t\treturn t('files_sharing', 'Copy to clipboard')\n\t\t},\n\n\t\t/**\n\t\t * External additionnai actions for the menu\n\t\t *\n\t\t * @deprecated use OCA.Sharing.ExternalShareActions\n\t\t * @return {Array}\n\t\t */\n\t\texternalLegacyLinkActions() {\n\t\t\treturn this.ExternalLegacyLinkActions.actions\n\t\t},\n\n\t\t/**\n\t\t * Additional actions for the menu\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\texternalLinkActions() {\n\t\t\t// filter only the registered actions for said link\n\t\t\treturn this.ExternalShareActions.actions\n\t\t\t\t.filter(action => action.shareType.includes(OC.Share.SHARE_TYPE_LINK)\n\t\t\t\t\t|| action.shareType.includes(OC.Share.SHARE_TYPE_EMAIL))\n\t\t},\n\n\t\tisPasswordPolicyEnabled() {\n\t\t\treturn typeof this.config.passwordPolicy === 'object'\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Create a new share link and append it to the list\n\t\t */\n\t\tasync onNewLinkShare() {\n\t\t\t// do not run again if already loading\n\t\t\tif (this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst shareDefaults = {\n\t\t\t\tshare_type: OC.Share.SHARE_TYPE_LINK,\n\t\t\t}\n\t\t\tif (this.config.isDefaultExpireDateEnforced) {\n\t\t\t\t// default is empty string if not set\n\t\t\t\t// expiration is the share object key, not expireDate\n\t\t\t\tshareDefaults.expiration = this.config.defaultExpirationDateString\n\t\t\t}\n\t\t\tif (this.config.enableLinkPasswordByDefault) {\n\t\t\t\tshareDefaults.password = await GeneratePassword()\n\t\t\t}\n\n\t\t\t// do not push yet if we need a password or an expiration date: show pending menu\n\t\t\tif (this.config.enforcePasswordForPublicLink || this.config.isDefaultExpireDateEnforced) {\n\t\t\t\tthis.pending = true\n\n\t\t\t\t// if a share already exists, pushing it\n\t\t\t\tif (this.share && !this.share.id) {\n\t\t\t\t\t// if the share is valid, create it on the server\n\t\t\t\t\tif (this.checkShare(this.share)) {\n\t\t\t\t\t\tawait this.pushNewLinkShare(this.share, true)\n\t\t\t\t\t\treturn true\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.open = true\n\t\t\t\t\t\tOC.Notification.showTemporary(t('files_sharing', 'Error, please enter proper password and/or expiration date'))\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// ELSE, show the pending popovermenu\n\t\t\t\t// if password enforced, pre-fill with random one\n\t\t\t\tif (this.config.enforcePasswordForPublicLink) {\n\t\t\t\t\tshareDefaults.password = await GeneratePassword()\n\t\t\t\t}\n\n\t\t\t\t// create share & close menu\n\t\t\t\tconst share = new Share(shareDefaults)\n\t\t\t\tconst component = await new Promise(resolve => {\n\t\t\t\t\tthis.$emit('add:share', share, resolve)\n\t\t\t\t})\n\n\t\t\t\t// open the menu on the\n\t\t\t\t// freshly created share component\n\t\t\t\tthis.open = false\n\t\t\t\tthis.pending = false\n\t\t\t\tcomponent.open = true\n\n\t\t\t// Nothing is enforced, creating share directly\n\t\t\t} else {\n\t\t\t\tconst share = new Share(shareDefaults)\n\t\t\t\tawait this.pushNewLinkShare(share)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Push a new link share to the server\n\t\t * And update or append to the list\n\t\t * accordingly\n\t\t *\n\t\t * @param {Share} share the new share\n\t\t * @param {boolean} [update=false] do we update the current share ?\n\t\t */\n\t\tasync pushNewLinkShare(share, update) {\n\t\t\ttry {\n\t\t\t\t// do nothing if we're already pending creation\n\t\t\t\tif (this.loading) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.errors = {}\n\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\t\t\t\tconst newShare = await this.createShare({\n\t\t\t\t\tpath,\n\t\t\t\t\tshareType: OC.Share.SHARE_TYPE_LINK,\n\t\t\t\t\tpassword: share.password,\n\t\t\t\t\texpireDate: share.expireDate,\n\t\t\t\t\t// we do not allow setting the publicUpload\n\t\t\t\t\t// before the share creation.\n\t\t\t\t\t// Todo: We also need to fix the createShare method in\n\t\t\t\t\t// lib/Controller/ShareAPIController.php to allow file drop\n\t\t\t\t\t// (currently not supported on create, only update)\n\t\t\t\t})\n\n\t\t\t\tthis.open = false\n\n\t\t\t\tconsole.debug('Link share created', newShare)\n\n\t\t\t\t// if share already exists, copy link directly on next tick\n\t\t\t\tlet component\n\t\t\t\tif (update) {\n\t\t\t\t\tcomponent = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('update:share', newShare, resolve)\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// adding new share to the array and copying link to clipboard\n\t\t\t\t\t// using promise so that we can copy link in the same click function\n\t\t\t\t\t// and avoid firefox copy permissions issue\n\t\t\t\t\tcomponent = await new Promise(resolve => {\n\t\t\t\t\t\tthis.$emit('add:share', newShare, resolve)\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// Execute the copy link method\n\t\t\t\t// freshly created share component\n\t\t\t\t// ! somehow does not works on firefox !\n\t\t\t\tif (!this.config.enforcePasswordForPublicLink) {\n\t\t\t\t\t// Only copy the link when the password was not forced,\n\t\t\t\t\t// otherwise the user needs to copy/paste the password before finishing the share.\n\t\t\t\t\tcomponent.copyLink()\n\t\t\t\t}\n\n\t\t\t} catch ({ response }) {\n\t\t\t\tconst message = response.data.ocs.meta.message\n\t\t\t\tif (message.match(/password/i)) {\n\t\t\t\t\tthis.onSyncError('password', message)\n\t\t\t\t} else if (message.match(/date/i)) {\n\t\t\t\t\tthis.onSyncError('expireDate', message)\n\t\t\t\t} else {\n\t\t\t\t\tthis.onSyncError('pending', message)\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * On permissions change\n\t\t *\n\t\t * @param {Event} event js event\n\t\t */\n\t\ttogglePermissions(event) {\n\t\t\tconst permissions = parseInt(event.target.value, 10)\n\t\t\tthis.share.permissions = permissions\n\t\t\tthis.queueUpdate('permissions')\n\t\t},\n\n\t\t/**\n\t\t * Label changed, let's save it to a different key\n\t\t *\n\t\t * @param {string} label the share label\n\t\t */\n\t\tonLabelChange(label) {\n\t\t\tthis.$set(this.share, 'newLabel', label.trim())\n\t\t},\n\n\t\t/**\n\t\t * When the note change, we trim, save and dispatch\n\t\t */\n\t\tonLabelSubmit() {\n\t\t\tif (typeof this.share.newLabel === 'string') {\n\t\t\t\tthis.share.label = this.share.newLabel\n\t\t\t\tthis.$delete(this.share, 'newLabel')\n\t\t\t\tthis.queueUpdate('label')\n\t\t\t}\n\t\t},\n\t\tasync copyLink() {\n\t\t\ttry {\n\t\t\t\tawait this.$copyText(this.shareLink)\n\t\t\t\t// focus and show the tooltip\n\t\t\t\tthis.$refs.copyButton.$el.focus()\n\t\t\t\tthis.copySuccess = true\n\t\t\t\tthis.copied = true\n\t\t\t} catch (error) {\n\t\t\t\tthis.copySuccess = false\n\t\t\t\tthis.copied = true\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copySuccess = false\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update newPassword values\n\t\t * of share. If password is set but not newPassword\n\t\t * then the user did not changed the password\n\t\t * If both co-exists, the password have changed and\n\t\t * we show it in plain text.\n\t\t * Then on submit (or menu close), we sync it.\n\t\t *\n\t\t * @param {string} password the changed password\n\t\t */\n\t\tonPasswordChange(password) {\n\t\t\tthis.$set(this.share, 'newPassword', password)\n\t\t},\n\n\t\t/**\n\t\t * Uncheck password protection\n\t\t * We need this method because @update:checked\n\t\t * is ran simultaneously as @uncheck, so\n\t\t * so we cannot ensure data is up-to-date\n\t\t */\n\t\tonPasswordDisable() {\n\t\t\tthis.share.password = ''\n\n\t\t\t// reset password state after sync\n\t\t\tthis.$delete(this.share, 'newPassword')\n\n\t\t\t// only update if valid share.\n\t\t\tif (this.share.id) {\n\t\t\t\tthis.queueUpdate('password')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Menu have been closed or password has been submited.\n\t\t * The only property that does not get\n\t\t * synced automatically is the password\n\t\t * So let's check if we have an unsaved\n\t\t * password.\n\t\t * expireDate is saved on datepicker pick\n\t\t * or close.\n\t\t */\n\t\tonPasswordSubmit() {\n\t\t\tif (this.hasUnsavedPassword) {\n\t\t\t\tthis.share.password = this.share.newPassword.trim()\n\t\t\t\tthis.queueUpdate('password')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Update the password along with \"sendPasswordByTalk\".\n\t\t *\n\t\t * If the password was modified the new password is sent; otherwise\n\t\t * updating a mail share would fail, as in that case it is required that\n\t\t * a new password is set when enabling or disabling\n\t\t * \"sendPasswordByTalk\".\n\t\t */\n\t\tonPasswordProtectedByTalkChange() {\n\t\t\tif (this.hasUnsavedPassword) {\n\t\t\t\tthis.share.password = this.share.newPassword.trim()\n\t\t\t}\n\n\t\t\tthis.queueUpdate('sendPasswordByTalk', 'password')\n\t\t},\n\n\t\t/**\n\t\t * Save potential changed data on menu close\n\t\t */\n\t\tonMenuClose() {\n\t\t\tthis.onPasswordSubmit()\n\t\t\tthis.onNoteSubmit()\n\t\t},\n\n\t\t/**\n\t\t * Cancel the share creation\n\t\t * Used in the pending popover\n\t\t */\n\t\tonCancel() {\n\t\t\t// this.share already exists at this point,\n\t\t\t// but is incomplete as not pushed to server\n\t\t\t// YET. We can safely delete the share :)\n\t\t\tthis.$emit('remove:share', this.share)\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\tmin-height: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\toverflow: hidden;\n\n\t\th5 {\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\n\t&:not(.sharing-entry--share) &__actions {\n\t\t.new-share-link {\n\t\t\tborder-top: 1px solid var(--color-border);\n\t\t}\n\t}\n\n\t::v-deep .avatar-link-share {\n\t\tbackground-color: var(--color-primary);\n\t}\n\n\t.sharing-entry__action--public-upload {\n\t\tborder-bottom: 1px solid var(--color-border);\n\t}\n\n\t&__loading {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\tmargin: 0;\n\t\tpadding: 14px;\n\t\tmargin-left: auto;\n\t}\n\n\t// put menus to the left\n\t// but only the first one\n\t.action-item {\n\t\tmargin-left: auto;\n\t\t~ .action-item,\n\t\t~ .sharing-entry__loading {\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n\n\t.icon-checkmark-color {\n\t\topacity: 1;\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!./SharingEntryLink.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!./SharingEntryLink.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!./SharingEntryLink.vue?vue&type=style&index=0&id=8366155c&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!./SharingEntryLink.vue?vue&type=style&index=0&id=8366155c&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntryLink.vue?vue&type=template&id=8366155c&scoped=true&\"\nimport script from \"./SharingEntryLink.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntryLink.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntryLink.vue?vue&type=style&index=0&id=8366155c&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 \"8366155c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"sharing-entry sharing-entry__link\",class:{'sharing-entry--share': _vm.share}},[_c('Avatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"is-no-user\":true,\"icon-class\":_vm.isEmailShareType ? 'avatar-link-share icon-mail-white' : 'avatar-link-share icon-public-white'}}),_vm._v(\" \"),_c('div',{staticClass:\"sharing-entry__desc\"},[_c('h5',{attrs:{\"title\":_vm.title}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.title)+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subtitle)?_c('p',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subtitle)+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.share && !_vm.isEmailShareType && _vm.share.token)?_c('Actions',{ref:\"copyButton\",staticClass:\"sharing-entry__copy\"},[_c('ActionLink',{attrs:{\"href\":_vm.shareLink,\"target\":\"_blank\",\"icon\":_vm.copied && _vm.copySuccess ? 'icon-checkmark-color' : 'icon-clippy'},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.copyLink.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.clipboardTooltip)+\"\\n\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),(!_vm.pending && (_vm.pendingPassword || _vm.pendingExpirationDate))?_c('Actions',{staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\",\"open\":_vm.open},on:{\"update:open\":function($event){_vm.open=$event},\"close\":_vm.onNewLinkShare}},[(_vm.errors.pending)?_c('ActionText',{class:{ error: _vm.errors.pending},attrs:{\"icon\":\"icon-error\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.errors.pending)+\"\\n\\t\\t\")]):_c('ActionText',{attrs:{\"icon\":\"icon-info\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Please enter the following required information before creating the share'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.pendingPassword)?_c('ActionText',{attrs:{\"icon\":\"icon-password\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password protection (enforced)'))+\"\\n\\t\\t\")]):(_vm.config.enableLinkPasswordByDefault)?_c('ActionCheckbox',{staticClass:\"share-link-password-checkbox\",attrs:{\"checked\":_vm.isPasswordProtected,\"disabled\":_vm.config.enforcePasswordForPublicLink || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtected=$event},\"uncheck\":_vm.onPasswordDisable}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Password protection'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingPassword || _vm.share.password)?_c('ActionInput',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\tcontent: _vm.errors.password,\n\t\t\t\tshow: _vm.errors.password,\n\t\t\t\ttrigger: 'manual',\n\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t}),expression:\"{\\n\\t\\t\\t\\tcontent: errors.password,\\n\\t\\t\\t\\tshow: errors.password,\\n\\t\\t\\t\\ttrigger: 'manual',\\n\\t\\t\\t\\tdefaultContainer: '#app-sidebar'\\n\\t\\t\\t}\",modifiers:{\"auto\":true}}],staticClass:\"share-link-password\",attrs:{\"value\":_vm.share.password,\"disabled\":_vm.saving,\"required\":_vm.config.enableLinkPasswordByDefault || _vm.config.enforcePasswordForPublicLink,\"minlength\":_vm.isPasswordPolicyEnabled && _vm.config.passwordPolicy.minLength,\"icon\":\"\",\"autocomplete\":\"new-password\"},on:{\"update:value\":function($event){return _vm.$set(_vm.share, \"password\", $event)},\"submit\":_vm.onNewLinkShare}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a password'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingExpirationDate)?_c('ActionText',{attrs:{\"icon\":\"icon-calendar-dark\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Expiration date (enforced)'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.pendingExpirationDate)?_c('ActionInput',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\tcontent: _vm.errors.expireDate,\n\t\t\t\tshow: _vm.errors.expireDate,\n\t\t\t\ttrigger: 'manual',\n\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t}),expression:\"{\\n\\t\\t\\t\\tcontent: errors.expireDate,\\n\\t\\t\\t\\tshow: errors.expireDate,\\n\\t\\t\\t\\ttrigger: 'manual',\\n\\t\\t\\t\\tdefaultContainer: '#app-sidebar'\\n\\t\\t\\t}\",modifiers:{\"auto\":true}}],staticClass:\"share-link-expire-date\",attrs:{\"disabled\":_vm.saving,\"lang\":_vm.lang,\"icon\":\"\",\"type\":\"date\",\"value-type\":\"format\",\"disabled-date\":_vm.disabledDate},model:{value:(_vm.share.expireDate),callback:function ($$v) {_vm.$set(_vm.share, \"expireDate\", $$v)},expression:\"share.expireDate\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Create share'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onCancel.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Cancel'))+\"\\n\\t\\t\")])],1):(!_vm.loading)?_c('Actions',{staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\",\"open\":_vm.open},on:{\"update:open\":function($event){_vm.open=$event},\"close\":_vm.onMenuClose}},[(_vm.share)?[(_vm.share.canEdit && _vm.canReshare)?[_c('ActionInput',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\t\t\tcontent: _vm.errors.label,\n\t\t\t\t\t\tshow: _vm.errors.label,\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\tdefaultContainer: '.app-sidebar'\n\t\t\t\t\t}),expression:\"{\\n\\t\\t\\t\\t\\t\\tcontent: errors.label,\\n\\t\\t\\t\\t\\t\\tshow: errors.label,\\n\\t\\t\\t\\t\\t\\ttrigger: 'manual',\\n\\t\\t\\t\\t\\t\\tdefaultContainer: '.app-sidebar'\\n\\t\\t\\t\\t\\t}\",modifiers:{\"auto\":true}}],ref:\"label\",class:{ error: _vm.errors.label },attrs:{\"disabled\":_vm.saving,\"aria-label\":_vm.t('files_sharing', 'Share label'),\"value\":_vm.share.newLabel !== undefined ? _vm.share.newLabel : _vm.share.label,\"icon\":\"icon-edit\",\"maxlength\":\"255\"},on:{\"update:value\":_vm.onLabelChange,\"submit\":_vm.onLabelSubmit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Share label'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.isFolder && _vm.fileHasCreatePermission && _vm.config.isPublicUploadEnabled)?[_c('ActionRadio',{attrs:{\"checked\":_vm.sharePermissions === _vm.publicUploadRValue,\"value\":_vm.publicUploadRValue,\"name\":_vm.randomId,\"disabled\":_vm.saving},on:{\"change\":_vm.togglePermissions}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Read only'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('ActionRadio',{attrs:{\"checked\":_vm.sharePermissions === _vm.publicUploadRWValue,\"value\":_vm.publicUploadRWValue,\"disabled\":_vm.saving,\"name\":_vm.randomId},on:{\"change\":_vm.togglePermissions}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow upload and editing'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('ActionRadio',{staticClass:\"sharing-entry__action--public-upload\",attrs:{\"checked\":_vm.sharePermissions === _vm.publicUploadWValue,\"value\":_vm.publicUploadWValue,\"disabled\":_vm.saving,\"name\":_vm.randomId},on:{\"change\":_vm.togglePermissions}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'File drop (upload only)'))+\"\\n\\t\\t\\t\\t\\t\")])]:_vm._e(),_vm._v(\" \"),(!_vm.isFolder)?_c('ActionCheckbox',{attrs:{\"checked\":_vm.canUpdate,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){_vm.canUpdate=$event},\"change\":function($event){return _vm.queueUpdate('permissions')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow editing'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('ActionCheckbox',{attrs:{\"checked\":_vm.share.hideDownload,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){return _vm.$set(_vm.share, \"hideDownload\", $event)},\"change\":function($event){return _vm.queueUpdate('hideDownload')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Hide download'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('ActionCheckbox',{staticClass:\"share-link-password-checkbox\",attrs:{\"checked\":_vm.isPasswordProtected,\"disabled\":_vm.config.enforcePasswordForPublicLink || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtected=$event},\"uncheck\":_vm.onPasswordDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.config.enforcePasswordForPublicLink\n\t\t\t\t\t\t? _vm.t('files_sharing', 'Password protection (enforced)')\n\t\t\t\t\t\t: _vm.t('files_sharing', 'Password protect'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.isPasswordProtected)?_c('ActionInput',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\t\t\tcontent: _vm.errors.password,\n\t\t\t\t\t\tshow: _vm.errors.password,\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t\t}),expression:\"{\\n\\t\\t\\t\\t\\t\\tcontent: errors.password,\\n\\t\\t\\t\\t\\t\\tshow: errors.password,\\n\\t\\t\\t\\t\\t\\ttrigger: 'manual',\\n\\t\\t\\t\\t\\t\\tdefaultContainer: '#app-sidebar'\\n\\t\\t\\t\\t\\t}\",modifiers:{\"auto\":true}}],ref:\"password\",staticClass:\"share-link-password\",class:{ error: _vm.errors.password},attrs:{\"disabled\":_vm.saving,\"required\":_vm.config.enforcePasswordForPublicLink,\"value\":_vm.hasUnsavedPassword ? _vm.share.newPassword : '***************',\"icon\":\"icon-password\",\"autocomplete\":\"new-password\",\"type\":_vm.hasUnsavedPassword ? 'text': 'password'},on:{\"update:value\":_vm.onPasswordChange,\"submit\":_vm.onPasswordSubmit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a password'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isPasswordProtectedByTalkAvailable)?_c('ActionCheckbox',{staticClass:\"share-link-password-talk-checkbox\",attrs:{\"checked\":_vm.isPasswordProtectedByTalk,\"disabled\":!_vm.canTogglePasswordProtectedByTalkAvailable || _vm.saving},on:{\"update:checked\":function($event){_vm.isPasswordProtectedByTalk=$event},\"change\":_vm.onPasswordProtectedByTalkChange}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Video verification'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('ActionCheckbox',{staticClass:\"share-link-expire-date-checkbox\",attrs:{\"checked\":_vm.hasExpirationDate,\"disabled\":_vm.config.isDefaultExpireDateEnforced || _vm.saving},on:{\"update:checked\":function($event){_vm.hasExpirationDate=$event},\"uncheck\":_vm.onExpirationDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.config.isDefaultExpireDateEnforced\n\t\t\t\t\t\t? _vm.t('files_sharing', 'Expiration date (enforced)')\n\t\t\t\t\t\t: _vm.t('files_sharing', 'Set expiration date'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasExpirationDate)?_c('ActionInput',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\t\t\tcontent: _vm.errors.expireDate,\n\t\t\t\t\t\tshow: _vm.errors.expireDate,\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t\t}),expression:\"{\\n\\t\\t\\t\\t\\t\\tcontent: errors.expireDate,\\n\\t\\t\\t\\t\\t\\tshow: errors.expireDate,\\n\\t\\t\\t\\t\\t\\ttrigger: 'manual',\\n\\t\\t\\t\\t\\t\\tdefaultContainer: '#app-sidebar'\\n\\t\\t\\t\\t\\t}\",modifiers:{\"auto\":true}}],ref:\"expireDate\",staticClass:\"share-link-expire-date\",class:{ error: _vm.errors.expireDate},attrs:{\"disabled\":_vm.saving,\"lang\":_vm.lang,\"value\":_vm.share.expireDate,\"value-type\":\"format\",\"icon\":\"icon-calendar-dark\",\"type\":\"date\",\"disabled-date\":_vm.disabledDate},on:{\"update:value\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('ActionCheckbox',{attrs:{\"checked\":_vm.hasNote,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){_vm.hasNote=$event},\"uncheck\":function($event){return _vm.queueUpdate('note')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Note to recipient'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasNote)?_c('ActionTextEditable',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\t\t\tcontent: _vm.errors.note,\n\t\t\t\t\t\tshow: _vm.errors.note,\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\tdefaultContainer: '#app-sidebar'\n\t\t\t\t\t}),expression:\"{\\n\\t\\t\\t\\t\\t\\tcontent: errors.note,\\n\\t\\t\\t\\t\\t\\tshow: errors.note,\\n\\t\\t\\t\\t\\t\\ttrigger: 'manual',\\n\\t\\t\\t\\t\\t\\tdefaultContainer: '#app-sidebar'\\n\\t\\t\\t\\t\\t}\",modifiers:{\"auto\":true}}],ref:\"note\",class:{ error: _vm.errors.note},attrs:{\"disabled\":_vm.saving,\"placeholder\":_vm.t('files_sharing', 'Enter a note for the share recipient'),\"value\":_vm.share.newNote || _vm.share.note,\"icon\":\"icon-edit\"},on:{\"update:value\":_vm.onNoteChange,\"submit\":_vm.onNoteSubmit}}):_vm._e()]:_vm._e(),_vm._v(\" \"),_vm._l((_vm.externalLinkActions),function(action){return _c('ExternalShareAction',{key:action.id,attrs:{\"id\":action.id,\"action\":action,\"file-info\":_vm.fileInfo,\"share\":_vm.share}})}),_vm._v(\" \"),_vm._l((_vm.externalLegacyLinkActions),function(ref,index){\n\t\t\t\t\tvar icon = ref.icon;\n\t\t\t\t\tvar url = ref.url;\n\t\t\t\t\tvar name = ref.name;\nreturn _c('ActionLink',{key:index,attrs:{\"href\":url(_vm.shareLink),\"icon\":icon,\"target\":\"_blank\"}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(name)+\"\\n\\t\\t\\t\")])}),_vm._v(\" \"),(_vm.share.canDelete)?_c('ActionButton',{attrs:{\"icon\":\"icon-close\",\"disabled\":_vm.saving},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.isEmailShareType && _vm.canReshare)?_c('ActionButton',{staticClass:\"new-share-link\",attrs:{\"icon\":\"icon-add\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Add another link'))+\"\\n\\t\\t\\t\")]):_vm._e()]:(_vm.canReshare)?_c('ActionButton',{staticClass:\"new-share-link\",attrs:{\"icon\":_vm.loading ? 'icon-loading-small' : 'icon-add'},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.onNewLinkShare.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Create a new share link'))+\"\\n\\t\\t\")]):_vm._e()],2):_c('div',{staticClass:\"icon-loading-small sharing-entry__loading\"})],1)}\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!./SharingLinkList.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!./SharingLinkList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2019 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<ul v-if=\"canLinkShare\" class=\"sharing-link-list\">\n\t\t<!-- If no link shares, show the add link default entry -->\n\t\t<SharingEntryLink v-if=\"!hasLinkShares && canReshare\"\n\t\t\t:can-reshare=\"canReshare\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t@add:share=\"addShare\" />\n\n\t\t<!-- Else we display the list -->\n\t\t<template v-if=\"hasShares\">\n\t\t\t<!-- using shares[index] to work with .sync -->\n\t\t\t<SharingEntryLink v-for=\"(share, index) in shares\"\n\t\t\t\t:key=\"share.id\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:share.sync=\"shares[index]\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t@add:share=\"addShare(...arguments)\"\n\t\t\t\t@update:share=\"awaitForShare(...arguments)\"\n\t\t\t\t@remove:share=\"removeShare\" />\n\t\t</template>\n\t</ul>\n</template>\n\n<script>\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport ShareTypes from '../mixins/ShareTypes'\nimport SharingEntryLink from '../components/SharingEntryLink'\n\nexport default {\n\tname: 'SharingLinkList',\n\n\tcomponents: {\n\t\tSharingEntryLink,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t\tcanReshare: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tcanLinkShare: OC.getCapabilities().files_sharing.public.enabled,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Do we have link shares?\n\t\t * Using this to still show the `new link share`\n\t\t * button regardless of mail shares\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\thasLinkShares() {\n\t\t\treturn this.shares.filter(share => share.type === this.SHARE_TYPES.SHARE_TYPE_LINK).length > 0\n\t\t},\n\n\t\t/**\n\t\t * Do we have any link or email shares?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasShares() {\n\t\t\treturn this.shares.length > 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Add a new share into the link shares list\n\t\t * and return the newly created share component\n\t\t *\n\t\t * @param {Share} share the share to add to the array\n\t\t * @param {Function} resolve a function to run after the share is added and its component initialized\n\t\t */\n\t\taddShare(share, resolve) {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.unshift(share)\n\t\t\tthis.awaitForShare(share, resolve)\n\t\t},\n\n\t\t/**\n\t\t * Await for next tick and render after the list updated\n\t\t * Then resolve with the matched vue component of the\n\t\t * provided share object\n\t\t *\n\t\t * @param {Share} share newly created share\n\t\t * @param {Function} resolve a function to execute after\n\t\t */\n\t\tawaitForShare(share, resolve) {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst newShare = this.$children.find(component => component.share === share)\n\t\t\t\tif (newShare) {\n\t\t\t\t\tresolve(newShare)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./SharingLinkList.vue?vue&type=template&id=8be1a6a2&\"\nimport script from \"./SharingLinkList.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingLinkList.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canLinkShare)?_c('ul',{staticClass:\"sharing-link-list\"},[(!_vm.hasLinkShares && _vm.canReshare)?_c('SharingEntryLink',{attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo},on:{\"add:share\":_vm.addShare}}):_vm._e(),_vm._v(\" \"),(_vm.hasShares)?_vm._l((_vm.shares),function(share,index){return _c('SharingEntryLink',{key:share.id,attrs:{\"can-reshare\":_vm.canReshare,\"share\":_vm.shares[index],\"file-info\":_vm.fileInfo},on:{\"update:share\":[function($event){return _vm.$set(_vm.shares, index, $event)},function($event){return _vm.awaitForShare.apply(void 0, arguments)}],\"add:share\":function($event){return _vm.addShare.apply(void 0, arguments)},\"remove:share\":_vm.removeShare}})}):_vm._e()],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 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=\"sharing-entry\">\n\t\t<Avatar class=\"sharing-entry__avatar\"\n\t\t\t:is-no-user=\"share.type !== SHARE_TYPES.SHARE_TYPE_USER\"\n\t\t\t:user=\"share.shareWith\"\n\t\t\t:display-name=\"share.shareWithDisplayName\"\n\t\t\t:tooltip-message=\"share.type === SHARE_TYPES.SHARE_TYPE_USER ? share.shareWith : ''\"\n\t\t\t:menu-position=\"'left'\"\n\t\t\t:url=\"share.shareWithAvatar\" />\n\t\t<component :is=\"share.shareWithLink ? 'a' : 'div'\"\n\t\t\tv-tooltip.auto=\"tooltip\"\n\t\t\t:href=\"share.shareWithLink\"\n\t\t\tclass=\"sharing-entry__desc\">\n\t\t\t<h5>{{ title }}<span v-if=\"!isUnique\" class=\"sharing-entry__desc-unique\"> ({{ share.shareWithDisplayNameUnique }})</span></h5>\n\t\t\t<p v-if=\"hasStatus\">\n\t\t\t\t<span>{{ share.status.icon || '' }}</span>\n\t\t\t\t<span>{{ share.status.message || '' }}</span>\n\t\t\t</p>\n\t\t</component>\n\t\t<Actions\n\t\t\tmenu-align=\"right\"\n\t\t\tclass=\"sharing-entry__actions\"\n\t\t\t@close=\"onMenuClose\">\n\t\t\t<template v-if=\"share.canEdit\">\n\t\t\t\t<!-- edit permission -->\n\t\t\t\t<ActionCheckbox\n\t\t\t\t\tref=\"canEdit\"\n\t\t\t\t\t:checked.sync=\"canEdit\"\n\t\t\t\t\t:value=\"permissionsEdit\"\n\t\t\t\t\t:disabled=\"saving || !canSetEdit\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow editing') }}\n\t\t\t\t</ActionCheckbox>\n\n\t\t\t\t<!-- create permission -->\n\t\t\t\t<ActionCheckbox\n\t\t\t\t\tv-if=\"isFolder\"\n\t\t\t\t\tref=\"canCreate\"\n\t\t\t\t\t:checked.sync=\"canCreate\"\n\t\t\t\t\t:value=\"permissionsCreate\"\n\t\t\t\t\t:disabled=\"saving || !canSetCreate\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow creating') }}\n\t\t\t\t</ActionCheckbox>\n\n\t\t\t\t<!-- delete permission -->\n\t\t\t\t<ActionCheckbox\n\t\t\t\t\tv-if=\"isFolder\"\n\t\t\t\t\tref=\"canDelete\"\n\t\t\t\t\t:checked.sync=\"canDelete\"\n\t\t\t\t\t:value=\"permissionsDelete\"\n\t\t\t\t\t:disabled=\"saving || !canSetDelete\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow deleting') }}\n\t\t\t\t</ActionCheckbox>\n\n\t\t\t\t<!-- reshare permission -->\n\t\t\t\t<ActionCheckbox\n\t\t\t\t\tv-if=\"config.isResharingAllowed\"\n\t\t\t\t\tref=\"canReshare\"\n\t\t\t\t\t:checked.sync=\"canReshare\"\n\t\t\t\t\t:value=\"permissionsShare\"\n\t\t\t\t\t:disabled=\"saving || !canSetReshare\">\n\t\t\t\t\t{{ t('files_sharing', 'Allow resharing') }}\n\t\t\t\t</ActionCheckbox>\n\n\t\t\t\t<!-- expiration date -->\n\t\t\t\t<ActionCheckbox :checked.sync=\"hasExpirationDate\"\n\t\t\t\t\t:disabled=\"config.isDefaultInternalExpireDateEnforced || saving\"\n\t\t\t\t\t@uncheck=\"onExpirationDisable\">\n\t\t\t\t\t{{ config.isDefaultInternalExpireDateEnforced\n\t\t\t\t\t\t? t('files_sharing', 'Expiration date enforced')\n\t\t\t\t\t\t: t('files_sharing', 'Set expiration date') }}\n\t\t\t\t</ActionCheckbox>\n\t\t\t\t<ActionInput v-if=\"hasExpirationDate\"\n\t\t\t\t\tref=\"expireDate\"\n\t\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\t\tcontent: errors.expireDate,\n\t\t\t\t\t\tshow: errors.expireDate,\n\t\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t\t}\"\n\t\t\t\t\t:class=\"{ error: errors.expireDate}\"\n\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t:lang=\"lang\"\n\t\t\t\t\t:value=\"share.expireDate\"\n\t\t\t\t\tvalue-type=\"format\"\n\t\t\t\t\ticon=\"icon-calendar-dark\"\n\t\t\t\t\ttype=\"date\"\n\t\t\t\t\t:disabled-date=\"disabledDate\"\n\t\t\t\t\t@update:value=\"onExpirationChange\">\n\t\t\t\t\t{{ t('files_sharing', 'Enter a date') }}\n\t\t\t\t</ActionInput>\n\n\t\t\t\t<!-- note -->\n\t\t\t\t<template v-if=\"canHaveNote\">\n\t\t\t\t\t<ActionCheckbox\n\t\t\t\t\t\t:checked.sync=\"hasNote\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t@uncheck=\"queueUpdate('note')\">\n\t\t\t\t\t\t{{ t('files_sharing', 'Note to recipient') }}\n\t\t\t\t\t</ActionCheckbox>\n\t\t\t\t\t<ActionTextEditable v-if=\"hasNote\"\n\t\t\t\t\t\tref=\"note\"\n\t\t\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\t\t\tcontent: errors.note,\n\t\t\t\t\t\t\tshow: errors.note,\n\t\t\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:class=\"{ error: errors.note}\"\n\t\t\t\t\t\t:disabled=\"saving\"\n\t\t\t\t\t\t:value=\"share.newNote || share.note\"\n\t\t\t\t\t\ticon=\"icon-edit\"\n\t\t\t\t\t\t@update:value=\"onNoteChange\"\n\t\t\t\t\t\t@submit=\"onNoteSubmit\" />\n\t\t\t\t</template>\n\t\t\t</template>\n\n\t\t\t<ActionButton v-if=\"share.canDelete\"\n\t\t\t\ticon=\"icon-close\"\n\t\t\t\t:disabled=\"saving\"\n\t\t\t\t@click.prevent=\"onDelete\">\n\t\t\t\t{{ t('files_sharing', 'Unshare') }}\n\t\t\t</ActionButton>\n\t\t</Actions>\n\t</li>\n</template>\n\n<script>\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ActionCheckbox from '@nextcloud/vue/dist/Components/ActionCheckbox'\nimport ActionInput from '@nextcloud/vue/dist/Components/ActionInput'\nimport ActionTextEditable from '@nextcloud/vue/dist/Components/ActionTextEditable'\nimport Tooltip from '@nextcloud/vue/dist/Directives/Tooltip'\n\nimport SharesMixin from '../mixins/SharesMixin'\n\nexport default {\n\tname: 'SharingEntry',\n\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t\tActionCheckbox,\n\t\tActionInput,\n\t\tActionTextEditable,\n\t\tAvatar,\n\t},\n\n\tdirectives: {\n\t\tTooltip,\n\t},\n\n\tmixins: [SharesMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tpermissionsEdit: OC.PERMISSION_UPDATE,\n\t\t\tpermissionsCreate: OC.PERMISSION_CREATE,\n\t\t\tpermissionsDelete: OC.PERMISSION_DELETE,\n\t\t\tpermissionsRead: OC.PERMISSION_READ,\n\t\t\tpermissionsShare: OC.PERMISSION_SHARE,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttitle() {\n\t\t\tlet title = this.share.shareWithDisplayName\n\t\t\tif (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GROUP) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'group')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_ROOM) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'conversation')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'remote')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'remote group')})`\n\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GUEST) {\n\t\t\t\ttitle += ` (${t('files_sharing', 'guest')})`\n\t\t\t}\n\t\t\treturn title\n\t\t},\n\n\t\ttooltip() {\n\t\t\tif (this.share.owner !== this.share.uidFileOwner) {\n\t\t\t\tconst data = {\n\t\t\t\t\t// todo: strong or italic?\n\t\t\t\t\t// but the t function escape any html from the data :/\n\t\t\t\t\tuser: this.share.shareWithDisplayName,\n\t\t\t\t\towner: this.share.ownerDisplayName,\n\t\t\t\t}\n\n\t\t\t\tif (this.share.type === this.SHARE_TYPES.SHARE_TYPE_GROUP) {\n\t\t\t\t\treturn t('files_sharing', 'Shared with the group {user} by {owner}', data)\n\t\t\t\t} else if (this.share.type === this.SHARE_TYPES.SHARE_TYPE_ROOM) {\n\t\t\t\t\treturn t('files_sharing', 'Shared with the conversation {user} by {owner}', data)\n\t\t\t\t}\n\n\t\t\t\treturn t('files_sharing', 'Shared with {user} by {owner}', data)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tcanHaveNote() {\n\t\t\treturn !this.isRemote\n\t\t},\n\n\t\tisRemote() {\n\t\t\treturn this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE\n\t\t\t\t|| this.share.type === this.SHARE_TYPES.SHARE_TYPE_REMOTE_GROUP\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can edit the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetEdit() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_UPDATE) || this.canEdit\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can create the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetCreate() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_CREATE) || this.canCreate\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can delete the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetDelete() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_DELETE) || this.canDelete\n\t\t},\n\n\t\t/**\n\t\t * Can the sharer set whether the sharee can reshare the file ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tcanSetReshare() {\n\t\t\t// If the owner revoked the permission after the resharer granted it\n\t\t\t// the share still has the permission, and the resharer is still\n\t\t\t// allowed to revoke it too (but not to grant it again).\n\t\t\treturn (this.fileInfo.sharePermissions & OC.PERMISSION_SHARE) || this.canReshare\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee edit the shared file ?\n\t\t */\n\t\tcanEdit: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasUpdatePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isEditChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee create the shared file ?\n\t\t */\n\t\tcanCreate: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasCreatePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isCreateChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee delete the shared file ?\n\t\t */\n\t\tcanDelete: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasDeletePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isDeleteChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Can the sharee reshare the file ?\n\t\t */\n\t\tcanReshare: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasSharePermission\n\t\t\t},\n\t\t\tset(checked) {\n\t\t\t\tthis.updatePermissions({ isReshareChecked: checked })\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is this share readable\n\t\t * Needed for some federated shares that might have been added from file drop links\n\t\t */\n\t\thasRead: {\n\t\t\tget() {\n\t\t\t\treturn this.share.hasReadPermission\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Is the current share a folder ?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisFolder() {\n\t\t\treturn this.fileInfo.type === 'dir'\n\t\t},\n\n\t\t/**\n\t\t * Does the current share have an expiration date\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasExpirationDate: {\n\t\t\tget() {\n\t\t\t\treturn this.config.isDefaultInternalExpireDateEnforced || !!this.share.expireDate\n\t\t\t},\n\t\t\tset(enabled) {\n\t\t\t\tthis.share.expireDate = enabled\n\t\t\t\t\t? this.config.defaultInternalExpirationDateString !== ''\n\t\t\t\t\t\t? this.config.defaultInternalExpirationDateString\n\t\t\t\t\t\t: moment().format('YYYY-MM-DD')\n\t\t\t\t\t: ''\n\t\t\t},\n\t\t},\n\n\t\tdateMaxEnforced() {\n\t\t\tif (!this.isRemote) {\n\t\t\t\treturn this.config.isDefaultInternalExpireDateEnforced\n\t\t\t\t\t&& moment().add(1 + this.config.defaultInternalExpireDate, 'days')\n\t\t\t} else {\n\t\t\t\treturn this.config.isDefaultRemoteExpireDateEnforced\n\t\t\t\t\t&& moment().add(1 + this.config.defaultRemoteExpireDate, 'days')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @return {boolean}\n\t\t */\n\t\thasStatus() {\n\t\t\tif (this.share.type !== this.SHARE_TYPES.SHARE_TYPE_USER) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn (typeof this.share.status === 'object' && !Array.isArray(this.share.status))\n\t\t},\n\n\t},\n\n\tmethods: {\n\t\tupdatePermissions({ isEditChecked = this.canEdit, isCreateChecked = this.canCreate, isDeleteChecked = this.canDelete, isReshareChecked = this.canReshare } = {}) {\n\t\t\t// calc permissions if checked\n\t\t\tconst permissions = 0\n\t\t\t\t| (this.hasRead ? this.permissionsRead : 0)\n\t\t\t\t| (isCreateChecked ? this.permissionsCreate : 0)\n\t\t\t\t| (isDeleteChecked ? this.permissionsDelete : 0)\n\t\t\t\t| (isEditChecked ? this.permissionsEdit : 0)\n\t\t\t\t| (isReshareChecked ? this.permissionsShare : 0)\n\n\t\t\tthis.share.permissions = permissions\n\t\t\tthis.queueUpdate('permissions')\n\t\t},\n\n\t\t/**\n\t\t * Save potential changed data on menu close\n\t\t */\n\t\tonMenuClose() {\n\t\t\tthis.onNoteSubmit()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.sharing-entry {\n\tdisplay: flex;\n\talign-items: center;\n\theight: 44px;\n\t&__desc {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tjustify-content: space-between;\n\t\tpadding: 8px;\n\t\tline-height: 1.2em;\n\t\tp {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t\t&-unique {\n\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t}\n\t}\n\t&__actions {\n\t\tmargin-left: auto;\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!./SharingEntry.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!./SharingEntry.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!./SharingEntry.vue?vue&type=style&index=0&id=7bdfd3f8&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!./SharingEntry.vue?vue&type=style&index=0&id=7bdfd3f8&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./SharingEntry.vue?vue&type=template&id=7bdfd3f8&scoped=true&\"\nimport script from \"./SharingEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SharingEntry.vue?vue&type=style&index=0&id=7bdfd3f8&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 \"7bdfd3f8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{staticClass:\"sharing-entry\"},[_c('Avatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"is-no-user\":_vm.share.type !== _vm.SHARE_TYPES.SHARE_TYPE_USER,\"user\":_vm.share.shareWith,\"display-name\":_vm.share.shareWithDisplayName,\"tooltip-message\":_vm.share.type === _vm.SHARE_TYPES.SHARE_TYPE_USER ? _vm.share.shareWith : '',\"menu-position\":'left',\"url\":_vm.share.shareWithAvatar}}),_vm._v(\" \"),_c(_vm.share.shareWithLink ? 'a' : 'div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.tooltip),expression:\"tooltip\",modifiers:{\"auto\":true}}],tag:\"component\",staticClass:\"sharing-entry__desc\",attrs:{\"href\":_vm.share.shareWithLink}},[_c('h5',[_vm._v(_vm._s(_vm.title)),(!_vm.isUnique)?_c('span',{staticClass:\"sharing-entry__desc-unique\"},[_vm._v(\" (\"+_vm._s(_vm.share.shareWithDisplayNameUnique)+\")\")]):_vm._e()]),_vm._v(\" \"),(_vm.hasStatus)?_c('p',[_c('span',[_vm._v(_vm._s(_vm.share.status.icon || ''))]),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.share.status.message || ''))])]):_vm._e()]),_vm._v(\" \"),_c('Actions',{staticClass:\"sharing-entry__actions\",attrs:{\"menu-align\":\"right\"},on:{\"close\":_vm.onMenuClose}},[(_vm.share.canEdit)?[_c('ActionCheckbox',{ref:\"canEdit\",attrs:{\"checked\":_vm.canEdit,\"value\":_vm.permissionsEdit,\"disabled\":_vm.saving || !_vm.canSetEdit},on:{\"update:checked\":function($event){_vm.canEdit=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow editing'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.isFolder)?_c('ActionCheckbox',{ref:\"canCreate\",attrs:{\"checked\":_vm.canCreate,\"value\":_vm.permissionsCreate,\"disabled\":_vm.saving || !_vm.canSetCreate},on:{\"update:checked\":function($event){_vm.canCreate=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow creating'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isFolder)?_c('ActionCheckbox',{ref:\"canDelete\",attrs:{\"checked\":_vm.canDelete,\"value\":_vm.permissionsDelete,\"disabled\":_vm.saving || !_vm.canSetDelete},on:{\"update:checked\":function($event){_vm.canDelete=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow deleting'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.config.isResharingAllowed)?_c('ActionCheckbox',{ref:\"canReshare\",attrs:{\"checked\":_vm.canReshare,\"value\":_vm.permissionsShare,\"disabled\":_vm.saving || !_vm.canSetReshare},on:{\"update:checked\":function($event){_vm.canReshare=$event}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Allow resharing'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('ActionCheckbox',{attrs:{\"checked\":_vm.hasExpirationDate,\"disabled\":_vm.config.isDefaultInternalExpireDateEnforced || _vm.saving},on:{\"update:checked\":function($event){_vm.hasExpirationDate=$event},\"uncheck\":_vm.onExpirationDisable}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.config.isDefaultInternalExpireDateEnforced\n\t\t\t\t\t? _vm.t('files_sharing', 'Expiration date enforced')\n\t\t\t\t\t: _vm.t('files_sharing', 'Set expiration date'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasExpirationDate)?_c('ActionInput',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\t\tcontent: _vm.errors.expireDate,\n\t\t\t\t\tshow: _vm.errors.expireDate,\n\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t}),expression:\"{\\n\\t\\t\\t\\t\\tcontent: errors.expireDate,\\n\\t\\t\\t\\t\\tshow: errors.expireDate,\\n\\t\\t\\t\\t\\ttrigger: 'manual'\\n\\t\\t\\t\\t}\",modifiers:{\"auto\":true}}],ref:\"expireDate\",class:{ error: _vm.errors.expireDate},attrs:{\"disabled\":_vm.saving,\"lang\":_vm.lang,\"value\":_vm.share.expireDate,\"value-type\":\"format\",\"icon\":\"icon-calendar-dark\",\"type\":\"date\",\"disabled-date\":_vm.disabledDate},on:{\"update:value\":_vm.onExpirationChange}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Enter a date'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.canHaveNote)?[_c('ActionCheckbox',{attrs:{\"checked\":_vm.hasNote,\"disabled\":_vm.saving},on:{\"update:checked\":function($event){_vm.hasNote=$event},\"uncheck\":function($event){return _vm.queueUpdate('note')}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Note to recipient'))+\"\\n\\t\\t\\t\\t\")]),_vm._v(\" \"),(_vm.hasNote)?_c('ActionTextEditable',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\t\t\tcontent: _vm.errors.note,\n\t\t\t\t\t\tshow: _vm.errors.note,\n\t\t\t\t\t\ttrigger: 'manual'\n\t\t\t\t\t}),expression:\"{\\n\\t\\t\\t\\t\\t\\tcontent: errors.note,\\n\\t\\t\\t\\t\\t\\tshow: errors.note,\\n\\t\\t\\t\\t\\t\\ttrigger: 'manual'\\n\\t\\t\\t\\t\\t}\",modifiers:{\"auto\":true}}],ref:\"note\",class:{ error: _vm.errors.note},attrs:{\"disabled\":_vm.saving,\"value\":_vm.share.newNote || _vm.share.note,\"icon\":\"icon-edit\"},on:{\"update:value\":_vm.onNoteChange,\"submit\":_vm.onNoteSubmit}}):_vm._e()]:_vm._e()]:_vm._e(),_vm._v(\" \"),(_vm.share.canDelete)?_c('ActionButton',{attrs:{\"icon\":\"icon-close\",\"disabled\":_vm.saving},on:{\"click\":function($event){$event.preventDefault();return _vm.onDelete.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('files_sharing', 'Unshare'))+\"\\n\\t\\t\")]):_vm._e()],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 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<ul class=\"sharing-sharee-list\">\n\t\t<SharingEntry v-for=\"share in shares\"\n\t\t\t:key=\"share.id\"\n\t\t\t:file-info=\"fileInfo\"\n\t\t\t:share=\"share\"\n\t\t\t:is-unique=\"isUnique(share)\"\n\t\t\t@remove:share=\"removeShare\" />\n\t</ul>\n</template>\n\n<script>\n// eslint-disable-next-line no-unused-vars\nimport Share from '../models/Share'\nimport SharingEntry from '../components/SharingEntry'\nimport ShareTypes from '../mixins/ShareTypes'\n\nexport default {\n\tname: 'SharingList',\n\n\tcomponents: {\n\t\tSharingEntry,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t\tshares: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\thasShares() {\n\t\t\treturn this.shares.length === 0\n\t\t},\n\t\tisUnique() {\n\t\t\treturn (share) => {\n\t\t\t\treturn [...this.shares].filter((item) => {\n\t\t\t\t\treturn share.type === this.SHARE_TYPES.SHARE_TYPE_USER && share.shareWithDisplayName === item.shareWithDisplayName\n\t\t\t\t}).length <= 1\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Remove a share from the shares list\n\t\t *\n\t\t * @param {Share} share the share to remove\n\t\t */\n\t\tremoveShare(share) {\n\t\t\tconst index = this.shares.findIndex(item => item === share)\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.shares.splice(index, 1)\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingList.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!./SharingList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SharingList.vue?vue&type=template&id=0b29d4c0&\"\nimport script from \"./SharingList.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingList.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{staticClass:\"sharing-sharee-list\"},_vm._l((_vm.shares),function(share){return _c('SharingEntry',{key:share.id,attrs:{\"file-info\":_vm.fileInfo,\"share\":share,\"is-unique\":_vm.isUnique(share)},on:{\"remove:share\":_vm.removeShare}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2019 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<div :class=\"{ 'icon-loading': loading }\">\n\t\t<!-- error message -->\n\t\t<div v-if=\"error\" class=\"emptycontent\">\n\t\t\t<div class=\"icon icon-error\" />\n\t\t\t<h2>{{ error }}</h2>\n\t\t</div>\n\n\t\t<!-- shares content -->\n\t\t<template v-else>\n\t\t\t<!-- shared with me information -->\n\t\t\t<SharingEntrySimple v-if=\"isSharedWithMe\" v-bind=\"sharedWithMe\" class=\"sharing-entry__reshare\">\n\t\t\t\t<template #avatar>\n\t\t\t\t\t<Avatar\n\t\t\t\t\t\t:user=\"sharedWithMe.user\"\n\t\t\t\t\t\t:display-name=\"sharedWithMe.displayName\"\n\t\t\t\t\t\tclass=\"sharing-entry__avatar\"\n\t\t\t\t\t\ttooltip-message=\"\" />\n\t\t\t\t</template>\n\t\t\t</SharingEntrySimple>\n\n\t\t\t<!-- add new share input -->\n\t\t\t<SharingInput v-if=\"!loading\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t:link-shares=\"linkShares\"\n\t\t\t\t:reshare=\"reshare\"\n\t\t\t\t:shares=\"shares\"\n\t\t\t\t@add:share=\"addShare\" />\n\n\t\t\t<!-- link shares list -->\n\t\t\t<SharingLinkList v-if=\"!loading\"\n\t\t\t\tref=\"linkShareList\"\n\t\t\t\t:can-reshare=\"canReshare\"\n\t\t\t\t:file-info=\"fileInfo\"\n\t\t\t\t:shares=\"linkShares\" />\n\n\t\t\t<!-- other shares list -->\n\t\t\t<SharingList v-if=\"!loading\"\n\t\t\t\tref=\"shareList\"\n\t\t\t\t:shares=\"shares\"\n\t\t\t\t:file-info=\"fileInfo\" />\n\n\t\t\t<!-- inherited shares -->\n\t\t\t<SharingInherited v-if=\"canReshare && !loading\" :file-info=\"fileInfo\" />\n\n\t\t\t<!-- internal link copy -->\n\t\t\t<SharingEntryInternal :file-info=\"fileInfo\" />\n\n\t\t\t<!-- projects -->\n\t\t\t<CollectionList v-if=\"fileInfo\"\n\t\t\t\t:id=\"`${fileInfo.id}`\"\n\t\t\t\ttype=\"file\"\n\t\t\t\t:name=\"fileInfo.name\" />\n\n\t\t\t<!-- additionnal entries, use it with cautious -->\n\t\t\t<div v-for=\"(section, index) in sections\"\n\t\t\t\t:ref=\"'section-' + index\"\n\t\t\t\t:key=\"index\"\n\t\t\t\tclass=\"sharingTab__additionalContent\">\n\t\t\t\t<component :is=\"section($refs['section-'+index], fileInfo)\" :file-info=\"fileInfo\" />\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { CollectionList } from 'nextcloud-vue-collections'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\nimport axios from '@nextcloud/axios'\n\nimport Config from '../services/ConfigService'\nimport { shareWithTitle } from '../utils/SharedWithMe'\nimport Share from '../models/Share'\nimport ShareTypes from '../mixins/ShareTypes'\nimport SharingEntryInternal from '../components/SharingEntryInternal'\nimport SharingEntrySimple from '../components/SharingEntrySimple'\nimport SharingInput from '../components/SharingInput'\n\nimport SharingInherited from './SharingInherited'\nimport SharingLinkList from './SharingLinkList'\nimport SharingList from './SharingList'\n\nexport default {\n\tname: 'SharingTab',\n\n\tcomponents: {\n\t\tAvatar,\n\t\tCollectionList,\n\t\tSharingEntryInternal,\n\t\tSharingEntrySimple,\n\t\tSharingInherited,\n\t\tSharingInput,\n\t\tSharingLinkList,\n\t\tSharingList,\n\t},\n\n\tmixins: [ShareTypes],\n\n\tdata() {\n\t\treturn {\n\t\t\tconfig: new Config(),\n\n\t\t\terror: '',\n\t\t\texpirationInterval: null,\n\t\t\tloading: true,\n\n\t\t\tfileInfo: null,\n\n\t\t\t// reshare Share object\n\t\t\treshare: null,\n\t\t\tsharedWithMe: {},\n\t\t\tshares: [],\n\t\t\tlinkShares: [],\n\n\t\t\tsections: OCA.Sharing.ShareTabSections.getSections(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Is this share shared with me?\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisSharedWithMe() {\n\t\t\treturn Object.keys(this.sharedWithMe).length > 0\n\t\t},\n\n\t\tcanReshare() {\n\t\t\treturn !!(this.fileInfo.permissions & OC.PERMISSION_SHARE)\n\t\t\t\t|| !!(this.reshare && this.reshare.hasSharePermission && this.config.isResharingAllowed)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Update current fileInfo and fetch new data\n\t\t *\n\t\t * @param {object} fileInfo the current file FileInfo\n\t\t */\n\t\tasync update(fileInfo) {\n\t\t\tthis.fileInfo = fileInfo\n\t\t\tthis.resetState()\n\t\t\tthis.getShares()\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getShares() {\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\n\t\t\t\t// init params\n\t\t\t\tconst shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares')\n\t\t\t\tconst format = 'json'\n\t\t\t\t// TODO: replace with proper getFUllpath implementation of our own FileInfo model\n\t\t\t\tconst path = (this.fileInfo.path + '/' + this.fileInfo.name).replace('//', '/')\n\n\t\t\t\t// fetch shares\n\t\t\t\tconst fetchShares = axios.get(shareUrl, {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\treshares: true,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst fetchSharedWithMe = axios.get(shareUrl, {\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tformat,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tshared_with_me: true,\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\t// wait for data\n\t\t\t\tconst [shares, sharedWithMe] = await Promise.all([fetchShares, fetchSharedWithMe])\n\t\t\t\tthis.loading = false\n\n\t\t\t\t// process results\n\t\t\t\tthis.processSharedWithMe(sharedWithMe)\n\t\t\t\tthis.processShares(shares)\n\t\t\t} catch (error) {\n\t\t\t\tthis.error = t('files_sharing', 'Unable to load the shares list')\n\t\t\t\tthis.loading = false\n\t\t\t\tconsole.error('Error loading the shares list', error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tclearInterval(this.expirationInterval)\n\t\t\tthis.loading = true\n\t\t\tthis.error = ''\n\t\t\tthis.sharedWithMe = {}\n\t\t\tthis.shares = []\n\t\t\tthis.linkShares = []\n\t\t},\n\n\t\t/**\n\t\t * Update sharedWithMe.subtitle with the appropriate\n\t\t * expiration time left\n\t\t *\n\t\t * @param {Share} share the sharedWith Share object\n\t\t */\n\t\tupdateExpirationSubtitle(share) {\n\t\t\tconst expiration = moment(share.expireDate).unix()\n\t\t\tthis.$set(this.sharedWithMe, 'subtitle', t('files_sharing', 'Expires {relativetime}', {\n\t\t\t\trelativetime: OC.Util.relativeModifiedDate(expiration * 1000),\n\t\t\t}))\n\n\t\t\t// share have expired\n\t\t\tif (moment().unix() > expiration) {\n\t\t\t\tclearInterval(this.expirationInterval)\n\t\t\t\t// TODO: clear ui if share is expired\n\t\t\t\tthis.$set(this.sharedWithMe, 'subtitle', t('files_sharing', 'this share just expired.'))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the current shares data\n\t\t * and init shares[]\n\t\t *\n\t\t * @param {object} share the share ocs api request data\n\t\t * @param {object} share.data the request data\n\t\t */\n\t\tprocessShares({ data }) {\n\t\t\tif (data.ocs && data.ocs.data && data.ocs.data.length > 0) {\n\t\t\t\t// create Share objects and sort by newest\n\t\t\t\tconst shares = data.ocs.data\n\t\t\t\t\t.map(share => new Share(share))\n\t\t\t\t\t.sort((a, b) => b.createdTime - a.createdTime)\n\n\t\t\t\tthis.linkShares = shares.filter(share => share.type === this.SHARE_TYPES.SHARE_TYPE_LINK || share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\t\t\t\tthis.shares = shares.filter(share => share.type !== this.SHARE_TYPES.SHARE_TYPE_LINK && share.type !== this.SHARE_TYPES.SHARE_TYPE_EMAIL)\n\n\t\t\t\tconsole.debug('Processed', this.linkShares.length, 'link share(s)')\n\t\t\t\tconsole.debug('Processed', this.shares.length, 'share(s)')\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Process the sharedWithMe share data\n\t\t * and init sharedWithMe\n\t\t *\n\t\t * @param {object} share the share ocs api request data\n\t\t * @param {object} share.data the request data\n\t\t */\n\t\tprocessSharedWithMe({ data }) {\n\t\t\tif (data.ocs && data.ocs.data && data.ocs.data[0]) {\n\t\t\t\tconst share = new Share(data)\n\t\t\t\tconst title = shareWithTitle(share)\n\t\t\t\tconst displayName = share.ownerDisplayName\n\t\t\t\tconst user = share.owner\n\n\t\t\t\tthis.sharedWithMe = {\n\t\t\t\t\tdisplayName,\n\t\t\t\t\ttitle,\n\t\t\t\t\tuser,\n\t\t\t\t}\n\t\t\t\tthis.reshare = share\n\n\t\t\t\t// If we have an expiration date, use it as subtitle\n\t\t\t\t// Refresh the status every 10s and clear if expired\n\t\t\t\tif (share.expireDate && moment(share.expireDate).unix() > moment().unix()) {\n\t\t\t\t\t// first update\n\t\t\t\t\tthis.updateExpirationSubtitle(share)\n\t\t\t\t\t// interval update\n\t\t\t\t\tthis.expirationInterval = setInterval(this.updateExpirationSubtitle, 10000, share)\n\t\t\t\t}\n\t\t\t} else if (this.fileInfo && this.fileInfo.shareOwnerId !== undefined ? this.fileInfo.shareOwnerId !== OC.currentUser : false) {\n\t\t\t\t// Fallback to compare owner and current user.\n\t\t\t\tthis.sharedWithMe = {\n\t\t\t\t\tdisplayName: this.fileInfo.shareOwner,\n\t\t\t\t\ttitle: t(\n\t\t\t\t\t\t'files_sharing',\n\t\t\t\t\t\t'Shared with you by {owner}',\n\t\t\t\t\t\t{ owner: this.fileInfo.shareOwner },\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t{ escape: false }\n\t\t\t\t\t),\n\t\t\t\t\tuser: this.fileInfo.shareOwnerId,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add a new share into the shares list\n\t\t * and return the newly created share component\n\t\t *\n\t\t * @param {Share} share the share to add to the array\n\t\t * @param {Function} [resolve] a function to run after the share is added and its component initialized\n\t\t */\n\t\taddShare(share, resolve = () => {}) {\n\t\t\t// only catching share type MAIL as link shares are added differently\n\t\t\t// meaning: not from the ShareInput\n\t\t\tif (share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tthis.linkShares.unshift(share)\n\t\t\t} else {\n\t\t\t\tthis.shares.unshift(share)\n\t\t\t}\n\t\t\tthis.awaitForShare(share, resolve)\n\t\t},\n\n\t\t/**\n\t\t * Await for next tick and render after the list updated\n\t\t * Then resolve with the matched vue component of the\n\t\t * provided share object\n\t\t *\n\t\t * @param {Share} share newly created share\n\t\t * @param {Function} resolve a function to execute after\n\t\t */\n\t\tawaitForShare(share, resolve) {\n\t\t\tlet listComponent = this.$refs.shareList\n\t\t\t// Only mail shares comes from the input, link shares\n\t\t\t// are managed internally in the SharingLinkList component\n\t\t\tif (share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL) {\n\t\t\t\tlistComponent = this.$refs.linkShareList\n\t\t\t}\n\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst newShare = listComponent.$children.find(component => component.share === share)\n\t\t\t\tif (newShare) {\n\t\t\t\t\tresolve(newShare)\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst shareWithTitle = function(share) {\n\tif (share.type === OC.Share.SHARE_TYPE_GROUP) {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you and the group {group} by {owner}',\n\t\t\t{\n\t\t\t\tgroup: share.shareWithDisplayName,\n\t\t\t\towner: share.ownerDisplayName,\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t} else if (share.type === OC.Share.SHARE_TYPE_CIRCLE) {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you and {circle} by {owner}',\n\t\t\t{\n\t\t\t\tcircle: share.shareWithDisplayName,\n\t\t\t\towner: share.ownerDisplayName,\n\t\t\t},\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t} else if (share.type === OC.Share.SHARE_TYPE_ROOM) {\n\t\tif (share.shareWithDisplayName) {\n\t\t\treturn t(\n\t\t\t\t'files_sharing',\n\t\t\t\t'Shared with you and the conversation {conversation} by {owner}',\n\t\t\t\t{\n\t\t\t\t\tconversation: share.shareWithDisplayName,\n\t\t\t\t\towner: share.ownerDisplayName,\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\t{ escape: false }\n\t\t\t)\n\t\t} else {\n\t\t\treturn t(\n\t\t\t\t'files_sharing',\n\t\t\t\t'Shared with you in a conversation by {owner}',\n\t\t\t\t{\n\t\t\t\t\towner: share.ownerDisplayName,\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\t{ escape: false }\n\t\t\t)\n\t\t}\n\t} else {\n\t\treturn t(\n\t\t\t'files_sharing',\n\t\t\t'Shared with you by {owner}',\n\t\t\t{ owner: share.ownerDisplayName },\n\t\t\tundefined,\n\t\t\t{ escape: false }\n\t\t)\n\t}\n}\n\nexport { shareWithTitle }\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SharingTab.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!./SharingTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SharingTab.vue?vue&type=template&id=bc869798&\"\nimport script from \"./SharingTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SharingTab.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ 'icon-loading': _vm.loading }},[(_vm.error)?_c('div',{staticClass:\"emptycontent\"},[_c('div',{staticClass:\"icon icon-error\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.error))])]):[(_vm.isSharedWithMe)?_c('SharingEntrySimple',_vm._b({staticClass:\"sharing-entry__reshare\",scopedSlots:_vm._u([{key:\"avatar\",fn:function(){return [_c('Avatar',{staticClass:\"sharing-entry__avatar\",attrs:{\"user\":_vm.sharedWithMe.user,\"display-name\":_vm.sharedWithMe.displayName,\"tooltip-message\":\"\"}})]},proxy:true}],null,false,1643724538)},'SharingEntrySimple',_vm.sharedWithMe,false)):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingInput',{attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo,\"link-shares\":_vm.linkShares,\"reshare\":_vm.reshare,\"shares\":_vm.shares},on:{\"add:share\":_vm.addShare}}):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingLinkList',{ref:\"linkShareList\",attrs:{\"can-reshare\":_vm.canReshare,\"file-info\":_vm.fileInfo,\"shares\":_vm.linkShares}}):_vm._e(),_vm._v(\" \"),(!_vm.loading)?_c('SharingList',{ref:\"shareList\",attrs:{\"shares\":_vm.shares,\"file-info\":_vm.fileInfo}}):_vm._e(),_vm._v(\" \"),(_vm.canReshare && !_vm.loading)?_c('SharingInherited',{attrs:{\"file-info\":_vm.fileInfo}}):_vm._e(),_vm._v(\" \"),_c('SharingEntryInternal',{attrs:{\"file-info\":_vm.fileInfo}}),_vm._v(\" \"),(_vm.fileInfo)?_c('CollectionList',{attrs:{\"id\":(\"\" + (_vm.fileInfo.id)),\"type\":\"file\",\"name\":_vm.fileInfo.name}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.sections),function(section,index){return _c('div',{key:index,ref:'section-' + index,refInFor:true,staticClass:\"sharingTab__additionalContent\"},[_c(section(_vm.$refs['section-'+index], _vm.fileInfo),{tag:\"component\",attrs:{\"file-info\":_vm.fileInfo}})],1)})]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\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\nexport default class ShareSearch {\n\n\t_state;\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.results = []\n\t\tconsole.debug('OCA.Sharing.ShareSearch initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ShareSearch\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new result\n\t * Mostly used by the guests app.\n\t * We should consider deprecation and add results via php ?\n\t *\n\t * @param {object} result entry to append\n\t * @param {string} [result.user] entry user\n\t * @param {string} result.displayName entry first line\n\t * @param {string} [result.desc] entry second line\n\t * @param {string} [result.icon] entry icon\n\t * @param {Function} result.handler function to run on entry selection\n\t * @param {Function} [result.condition] condition to add entry or not\n\t * @return {boolean}\n\t */\n\taddNewResult(result) {\n\t\tif (result.displayName.trim() !== ''\n\t\t\t&& typeof result.handler === 'function') {\n\t\t\tthis._state.results.push(result)\n\t\t\treturn true\n\t\t}\n\t\tconsole.error('Invalid search result provided', result)\n\t\treturn false\n\t}\n\n}\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\nexport default class ExternalLinkActions {\n\n\t_state;\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.actions = []\n\t\tconsole.debug('OCA.Sharing.ExternalLinkActions initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ExternalLinkActions\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new action for the link share\n\t * Mostly used by the social sharing app.\n\t *\n\t * @param {object} action new action component to register\n\t * @return {boolean}\n\t */\n\tregisterAction(action) {\n\t\tconsole.warn('OCA.Sharing.ExternalLinkActions is deprecated, use OCA.Sharing.ExternalShareAction instead')\n\n\t\tif (typeof action === 'object' && action.icon && action.name && action.url) {\n\t\t\tthis._state.actions.push(action)\n\t\t\treturn true\n\t\t}\n\t\tconsole.error('Invalid action provided', action)\n\t\treturn false\n\t}\n\n}\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\nexport default class ExternalShareActions {\n\n\t_state;\n\n\tconstructor() {\n\t\t// init empty state\n\t\tthis._state = {}\n\n\t\t// init default values\n\t\tthis._state.actions = []\n\t\tconsole.debug('OCA.Sharing.ExternalShareActions initialized')\n\t}\n\n\t/**\n\t * Get the state\n\t *\n\t * @readonly\n\t * @memberof ExternalLinkActions\n\t * @return {object} the data state\n\t */\n\tget state() {\n\t\treturn this._state\n\t}\n\n\t/**\n\t * Register a new option/entry for the a given share type\n\t *\n\t * @param {object} action new action component to register\n\t * @param {string} action.id unique action id\n\t * @param {Function} action.data data to bind the component to\n\t * @param {Array} action.shareType list of OC.Share.SHARE_XXX to be mounted on\n\t * @param {object} action.handlers list of listeners\n\t * @return {boolean}\n\t */\n\tregisterAction(action) {\n\t\t// Validate action\n\t\tif (typeof action !== 'object'\n\t\t\t|| typeof action.id !== 'string'\n\t\t\t|| typeof action.data !== 'function' // () => {disabled: true}\n\t\t\t|| !Array.isArray(action.shareType) // [OC.Share.SHARE_TYPE_LINK, ...]\n\t\t\t|| typeof action.handlers !== 'object' // {click: () => {}, ...}\n\t\t\t|| !Object.values(action.handlers).every(handler => typeof handler === 'function')) {\n\t\t\tconsole.error('Invalid action provided', action)\n\t\t\treturn false\n\t\t}\n\n\t\t// Check duplicates\n\t\tconst hasDuplicate = this._state.actions.findIndex(check => check.id === action.id) > -1\n\t\tif (hasDuplicate) {\n\t\t\tconsole.error(`An action with the same id ${action.id} already exists`, action)\n\t\t\treturn false\n\t\t}\n\n\t\tthis._state.actions.push(action)\n\t\treturn true\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 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\nexport default class TabSections {\n\n\t_sections;\n\n\tconstructor() {\n\t\tthis._sections = []\n\t}\n\n\t/**\n\t * @param {registerSectionCallback} section To be called to mount the section to the sharing sidebar\n\t */\n\tregisterSection(section) {\n\t\tthis._sections.push(section)\n\t}\n\n\tgetSections() {\n\t\treturn this._sections\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport VueClipboard from 'vue-clipboard2'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\n\nimport SharingTab from './views/SharingTab'\nimport ShareSearch from './services/ShareSearch'\nimport ExternalLinkActions from './services/ExternalLinkActions'\nimport ExternalShareActions from './services/ExternalShareActions'\nimport TabSections from './services/TabSections'\n\n// Init Sharing Tab Service\nif (!window.OCA.Sharing) {\n\twindow.OCA.Sharing = {}\n}\nObject.assign(window.OCA.Sharing, { ShareSearch: new ShareSearch() })\nObject.assign(window.OCA.Sharing, { ExternalLinkActions: new ExternalLinkActions() })\nObject.assign(window.OCA.Sharing, { ExternalShareActions: new ExternalShareActions() })\nObject.assign(window.OCA.Sharing, { ShareTabSections: new TabSections() })\n\nVue.prototype.t = t\nVue.prototype.n = n\nVue.use(VueClipboard)\n\n// Init Sharing tab component\nconst View = Vue.extend(SharingTab)\nlet TabInstance = null\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tif (OCA.Files && OCA.Files.Sidebar) {\n\t\tOCA.Files.Sidebar.registerTab(new OCA.Files.Sidebar.Tab({\n\t\t\tid: 'sharing',\n\t\t\tname: t('files_sharing', 'Sharing'),\n\t\t\ticon: 'icon-share',\n\n\t\t\tasync mount(el, fileInfo, context) {\n\t\t\t\tif (TabInstance) {\n\t\t\t\t\tTabInstance.$destroy()\n\t\t\t\t}\n\t\t\t\tTabInstance = new View({\n\t\t\t\t\t// Better integration with vue parent component\n\t\t\t\t\tparent: context,\n\t\t\t\t})\n\t\t\t\t// Only mount after we have all the info we need\n\t\t\t\tawait TabInstance.update(fileInfo)\n\t\t\t\tTabInstance.$mount(el)\n\t\t\t},\n\t\t\tupdate(fileInfo) {\n\t\t\t\tTabInstance.update(fileInfo)\n\t\t\t},\n\t\t\tdestroy() {\n\t\t\t\tTabInstance.$destroy()\n\t\t\t\tTabInstance = null\n\t\t\t},\n\t\t}))\n\t}\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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, \".sharing-entry[data-v-7bdfd3f8]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-7bdfd3f8]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-7bdfd3f8]{color:var(--color-text-maxcontrast)}.sharing-entry__desc-unique[data-v-7bdfd3f8]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-7bdfd3f8]{margin-left:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntry.vue\"],\"names\":[],\"mappings\":\"AA4ZA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAED,6CACC,mCAAA,CAGF,yCACC,gBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\theight: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t\\t&-unique {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto;\\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/cssWithMappingToString.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, \".sharing-entry[data-v-c58e421a]{display:flex;align-items:center;height:44px}.sharing-entry__desc[data-v-c58e421a]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em}.sharing-entry__desc p[data-v-c58e421a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-c58e421a]{margin-left:auto}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryInherited.vue\"],\"names\":[],\"mappings\":\"AAkGA,gCACC,YAAA,CACA,kBAAA,CACA,WAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,wCACC,mCAAA,CAGF,yCACC,gBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\theight: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto;\\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/cssWithMappingToString.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, \".sharing-entry__internal .avatar-external[data-v-456815d3]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}.sharing-entry__internal .icon-checkmark-color[data-v-456815d3]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryInternal.vue\"],\"names\":[],\"mappings\":\"AAyGC,2DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA,CAED,gEACC,SAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.sharing-entry__internal {\\n\\t.avatar-external {\\n\\t\\twidth: 32px;\\n\\t\\theight: 32px;\\n\\t\\tline-height: 32px;\\n\\t\\tfont-size: 18px;\\n\\t\\tbackground-color: var(--color-text-maxcontrast);\\n\\t\\tborder-radius: 50%;\\n\\t\\tflex-shrink: 0;\\n\\t}\\n\\t.icon-checkmark-color {\\n\\t\\topacity: 1;\\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/cssWithMappingToString.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, \".sharing-entry[data-v-8366155c]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-8366155c]{display:flex;flex-direction:column;justify-content:space-between;padding:8px;line-height:1.2em;overflow:hidden}.sharing-entry__desc h5[data-v-8366155c]{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.sharing-entry__desc p[data-v-8366155c]{color:var(--color-text-maxcontrast)}.sharing-entry:not(.sharing-entry--share) .sharing-entry__actions .new-share-link[data-v-8366155c]{border-top:1px solid var(--color-border)}.sharing-entry[data-v-8366155c] .avatar-link-share{background-color:var(--color-primary)}.sharing-entry .sharing-entry__action--public-upload[data-v-8366155c]{border-bottom:1px solid var(--color-border)}.sharing-entry__loading[data-v-8366155c]{width:44px;height:44px;margin:0;padding:14px;margin-left:auto}.sharing-entry .action-item[data-v-8366155c]{margin-left:auto}.sharing-entry .action-item~.action-item[data-v-8366155c],.sharing-entry .action-item~.sharing-entry__loading[data-v-8366155c]{margin-left:0}.sharing-entry .icon-checkmark-color[data-v-8366155c]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntryLink.vue\"],\"names\":[],\"mappings\":\"AAq7BA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,WAAA,CACA,iBAAA,CACA,eAAA,CAEA,yCACC,sBAAA,CACA,eAAA,CACA,kBAAA,CAED,wCACC,mCAAA,CAKD,mGACC,wCAAA,CAIF,oDACC,qCAAA,CAGD,sEACC,2CAAA,CAGD,yCACC,UAAA,CACA,WAAA,CACA,QAAA,CACA,YAAA,CACA,gBAAA,CAKD,6CACC,gBAAA,CACA,+HAEC,aAAA,CAIF,sDACC,SAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\t&__desc {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tjustify-content: space-between;\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\toverflow: hidden;\\n\\n\\t\\th5 {\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\n\\t&:not(.sharing-entry--share) &__actions {\\n\\t\\t.new-share-link {\\n\\t\\t\\tborder-top: 1px solid var(--color-border);\\n\\t\\t}\\n\\t}\\n\\n\\t::v-deep .avatar-link-share {\\n\\t\\tbackground-color: var(--color-primary);\\n\\t}\\n\\n\\t.sharing-entry__action--public-upload {\\n\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t}\\n\\n\\t&__loading {\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\tmargin: 0;\\n\\t\\tpadding: 14px;\\n\\t\\tmargin-left: auto;\\n\\t}\\n\\n\\t// put menus to the left\\n\\t// but only the first one\\n\\t.action-item {\\n\\t\\tmargin-left: auto;\\n\\t\\t~ .action-item,\\n\\t\\t~ .sharing-entry__loading {\\n\\t\\t\\tmargin-left: 0;\\n\\t\\t}\\n\\t}\\n\\n\\t.icon-checkmark-color {\\n\\t\\topacity: 1;\\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/cssWithMappingToString.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, \".sharing-entry[data-v-1436bf4a]{display:flex;align-items:center;min-height:44px}.sharing-entry__desc[data-v-1436bf4a]{padding:8px;line-height:1.2em;position:relative;flex:1 1;min-width:0}.sharing-entry__desc h5[data-v-1436bf4a]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:inherit}.sharing-entry__desc p[data-v-1436bf4a]{color:var(--color-text-maxcontrast)}.sharing-entry__actions[data-v-1436bf4a]{margin-left:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingEntrySimple.vue\"],\"names\":[],\"mappings\":\"AA4EA,gCACC,YAAA,CACA,kBAAA,CACA,eAAA,CACA,sCACC,WAAA,CACA,iBAAA,CACA,iBAAA,CACA,QAAA,CACA,WAAA,CACA,yCACC,kBAAA,CACA,sBAAA,CACA,eAAA,CACA,iBAAA,CAED,wCACC,mCAAA,CAGF,yCACC,2BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.sharing-entry {\\n\\tdisplay: flex;\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\t&__desc {\\n\\t\\tpadding: 8px;\\n\\t\\tline-height: 1.2em;\\n\\t\\tposition: relative;\\n\\t\\tflex: 1 1;\\n\\t\\tmin-width: 0;\\n\\t\\th5 {\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\toverflow: hidden;\\n\\t\\t\\tmax-width: inherit;\\n\\t\\t}\\n\\t\\tp {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\t}\\n\\t}\\n\\t&__actions {\\n\\t\\tmargin-left: auto !important;\\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/cssWithMappingToString.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, \".sharing-input{width:100%;margin:10px 0}.sharing-input .multiselect__option span[lookup] .avatardiv{background-image:var(--icon-search-fff);background-repeat:no-repeat;background-position:center;background-color:var(--color-text-maxcontrast) !important}.sharing-input .multiselect__option span[lookup] .avatardiv div{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/components/SharingInput.vue\"],\"names\":[],\"mappings\":\"AA0gBA,eACC,UAAA,CACA,aAAA,CAKE,4DACC,uCAAA,CACA,2BAAA,CACA,0BAAA,CACA,yDAAA,CACA,gEACC,YAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.sharing-input {\\n\\twidth: 100%;\\n\\tmargin: 10px 0;\\n\\n\\t// properly style the lookup entry\\n\\t.multiselect__option {\\n\\t\\tspan[lookup] {\\n\\t\\t\\t.avatardiv {\\n\\t\\t\\t\\tbackground-image: var(--icon-search-fff);\\n\\t\\t\\t\\tbackground-repeat: no-repeat;\\n\\t\\t\\t\\tbackground-position: center;\\n\\t\\t\\t\\tbackground-color: var(--color-text-maxcontrast) !important;\\n\\t\\t\\t\\tdiv {\\n\\t\\t\\t\\t\\tdisplay: none;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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, \".sharing-entry__inherited .avatar-shared[data-v-1c2059ae]{width:32px;height:32px;line-height:32px;font-size:18px;background-color:var(--color-text-maxcontrast);border-radius:50%;flex-shrink:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/files_sharing/src/views/SharingInherited.vue\"],\"names\":[],\"mappings\":\"AA8JC,0DACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,cAAA,CACA,8CAAA,CACA,iBAAA,CACA,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.sharing-entry__inherited {\\n\\t.avatar-shared {\\n\\t\\twidth: 32px;\\n\\t\\theight: 32px;\\n\\t\\tline-height: 32px;\\n\\t\\tfont-size: 18px;\\n\\t\\tbackground-color: var(--color-text-maxcontrast);\\n\\t\\tborder-radius: 50%;\\n\\t\\tflex-shrink: 0;\\n\\t}\\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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// 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 = 870;","// no baseURI\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\t870: 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));","// 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, [874], function() { return __webpack_require__(75184); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Config","document","getElementById","dataset","allowPublicUpload","value","OC","appConfig","core","federatedCloudShareDoc","expireDateString","this","isDefaultExpireDateEnabled","date","window","moment","utc","expireAfterDays","defaultExpireDate","add","format","isDefaultInternalExpireDateEnabled","defaultInternalExpireDate","isDefaultRemoteExpireDateEnabled","defaultRemoteExpireDate","enforcePasswordForPublicLink","enableLinkPasswordByDefault","defaultExpireDateEnforced","defaultExpireDateEnabled","defaultInternalExpireDateEnforced","defaultRemoteExpireDateEnforced","defaultInternalExpireDateEnabled","remoteShareAllowed","capabilities","getCapabilities","undefined","files_sharing","sharebymail","public","enabled","resharingAllowed","password","enforced","sharee","always_show_unique","allowGroupSharing","parseInt","config","password_policy","Share","ocsData","ocs","data","hide_download","mail_send","_share","id","share_type","permissions","uid_owner","displayname_owner","share_with","share_with_displayname","share_with_displayname_unique","share_with_link","share_with_avatar","uid_file_owner","displayname_file_owner","stime","expiration","token","note","label","state","send_password_by_talk","sendPasswordByTalk","path","item_type","mimetype","file_source","file_target","file_parent","PERMISSION_READ","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_UPDATE","PERMISSION_SHARE","can_edit","can_delete","via_fileid","via_path","parent","storage_id","storage","item_source","status","SHARE_TYPES","SHARE_TYPE_USER","SHARE_TYPE_GROUP","SHARE_TYPE_LINK","SHARE_TYPE_EMAIL","SHARE_TYPE_REMOTE","SHARE_TYPE_CIRCLE","SHARE_TYPE_GUEST","SHARE_TYPE_DECK","SHARE_TYPE_REMOTE_GROUP","SHARE_TYPE_ROOM","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","_h","$createElement","_c","_self","staticClass","_t","_v","directives","name","rawName","expression","_s","title","subtitle","_e","$slots","attrs","t","internalLinkSubtitle","scopedSlots","_u","key","fn","proxy","ref","internalLink","copied","copySuccess","on","$event","preventDefault","copyLink","apply","arguments","clipboardTooltip","passwordSet","passwordPolicy","api","generate","axios","request","console","info","Array","fill","reduce","prev","curr","charAt","Math","floor","random","length","shareUrl","generateOcsUrl","headers","methods","createShare","shareType","shareWith","publicUpload","expireDate","error","errorMessage","response","meta","message","Notification","showTemporary","type","deleteShare","updateShare","properties","Error","canReshare","loading","inputPlaceholder","asyncFind","addShare","noResultText","mixins","SharesRequests","ShareTypes","props","fileInfo","Object","default","required","share","isUnique","Boolean","errors","saving","open","updateQueue","PQueue","concurrency","reactiveState","computed","hasNote","get","set","dateTomorrow","lang","weekdaysShort","dayNamesShort","monthsShort","monthNamesShort","formatLocale","firstDayOfWeek","firstDay","weekdaysMin","monthFormat","isShareOwner","owner","getCurrentUser","uid","checkShare","trim","expirationDate","isValid","onExpirationChange","queueUpdate","onExpirationDisable","onNoteChange","$set","onNoteSubmit","newNote","$delete","onDelete","debug","$emit","propertyNames","map","p","toString","indexOf","onSyncError","property","propertyEl","$refs","$el","focusable","querySelector","focus","debounceQueueUpdate","debounce","disabledDate","dateMoment","isBefore","dateMaxEnforced","isSameOrAfter","shareWithDisplayName","initiator","ownerDisplayName","viaPath","viaFileid","viaFileTargetUrl","folder","viaFolderName","mainTitle","subTitle","showInheritedSharesIcon","stopPropagation","toggleInheritedShares","toggleTooltip","_l","is","_g","_b","tag","action","handlers","text","class","isEmailShareType","shareLink","pending","pendingPassword","pendingExpirationDate","onMenuClose","canEdit","content","show","trigger","defaultContainer","modifiers","newLabel","onLabelChange","onLabelSubmit","isFolder","fileHasCreatePermission","isPublicUploadEnabled","sharePermissions","publicUploadRValue","randomId","togglePermissions","publicUploadRWValue","publicUploadWValue","canUpdate","hideDownload","isPasswordProtected","onPasswordDisable","hasUnsavedPassword","newPassword","onPasswordChange","onPasswordSubmit","isPasswordProtectedByTalk","canTogglePasswordProtectedByTalkAvailable","onPasswordProtectedByTalkChange","hasExpirationDate","isDefaultExpireDateEnforced","index","icon","url","onNewLinkShare","isPasswordPolicyEnabled","minLength","model","callback","$$v","onCancel","hasLinkShares","shares","awaitForShare","removeShare","shareWithAvatar","shareWithLink","shareWithDisplayNameUnique","permissionsEdit","canSetEdit","canCreate","permissionsCreate","canSetCreate","canDelete","permissionsDelete","canSetDelete","permissionsShare","canSetReshare","isDefaultInternalExpireDateEnforced","group","escape","circle","conversation","sharedWithMe","user","displayName","linkShares","reshare","section","refInFor","ShareSearch","_state","results","result","handler","push","ExternalLinkActions","actions","warn","ExternalShareActions","isArray","values","every","findIndex","check","TabSections","_sections","OCA","Sharing","assign","ShareTabSections","Vue","n","VueClipboard","View","SharingTab","TabInstance","addEventListener","Files","Sidebar","registerTab","Tab","mount","el","context","$destroy","update","$mount","destroy","___CSS_LOADER_EXPORT___","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","amdD","amdO","O","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","keys","splice","r","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
|