photos/js/photos-node_modules_vue-mat...

1 line
123 KiB
XML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"photos-node_modules_vue-material-design-icons_ArrowLeft_vue-src_views_Timeline_vue.js?v=f37190bc193488e85bbc","mappings":"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","sources":["webpack:///photos/src/mixins/FetchCollectionsMixin.js","webpack:///photos/src/mixins/FetchFilesMixin.js","webpack:///photos/src/services/PhotoSearch.js","webpack:///photos/src/mixins/FilesByMonthMixin.js","webpack:///photos/src/components/Albums/AlbumPicker.vue?vue&type=style&index=0&id=20d6fa8c&prod&lang=scss&scoped=true","webpack:///photos/src/components/Settings/PhotosFolder.vue?vue&type=style&index=0&id=a871c74a&prod&lang=scss&scoped=true","webpack:///photos/src/components/Settings/PhotosSourceLocationsSettings.vue?vue&type=style&index=0&id=05ae8e6c&prod&lang=scss&scoped=true","webpack:///photos/src/views/Timeline.vue?vue&type=style&index=0&id=2068ca0a&prod&lang=scss&scoped=true","webpack:///photos/node_modules/vue-material-design-icons/ArrowLeft.vue","webpack:///photos/node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=script&lang=js","webpack://photos/./node_modules/vue-material-design-icons/ArrowLeft.vue?f857","webpack:///photos/node_modules/vue-material-design-icons/ArrowLeft.vue?vue&type=template&id=187c55d7","webpack:///photos/node_modules/vue-material-design-icons/Download.vue","webpack:///photos/node_modules/vue-material-design-icons/Download.vue?vue&type=script&lang=js","webpack://photos/./node_modules/vue-material-design-icons/Download.vue?b226","webpack:///photos/node_modules/vue-material-design-icons/Download.vue?vue&type=template&id=67aea606","webpack:///photos/node_modules/vue-material-design-icons/Folder.vue","webpack:///photos/node_modules/vue-material-design-icons/Folder.vue?vue&type=script&lang=js","webpack://photos/./node_modules/vue-material-design-icons/Folder.vue?b60e","webpack:///photos/node_modules/vue-material-design-icons/Folder.vue?vue&type=template&id=5c04f969","webpack:///photos/node_modules/vue-material-design-icons/ImageMultiple.vue","webpack:///photos/node_modules/vue-material-design-icons/ImageMultiple.vue?vue&type=script&lang=js","webpack://photos/./node_modules/vue-material-design-icons/ImageMultiple.vue?126d","webpack:///photos/node_modules/vue-material-design-icons/ImageMultiple.vue?vue&type=template&id=21a95e74","webpack://photos/./src/components/Actions/ActionFavorite.vue?537d","webpack:///photos/src/components/Actions/ActionFavorite.vue","webpack:///photos/src/components/Actions/ActionFavorite.vue?vue&type=script&lang=js","webpack://photos/./src/components/Actions/ActionFavorite.vue?4be4","webpack://photos/./src/components/Settings/PhotosFolder.vue?2e9c","webpack:///photos/src/components/Settings/PhotosFolder.vue","webpack:///photos/src/components/Settings/PhotosFolder.vue?vue&type=script&lang=js","webpack://photos/./src/components/Settings/PhotosFolder.vue?3e32","webpack://photos/./src/components/Settings/PhotosFolder.vue?220c","webpack://photos/./src/components/Settings/PhotosSourceLocationsSettings.vue?331c","webpack:///photos/node_modules/vue-material-design-icons/FolderMultiple.vue","webpack:///photos/node_modules/vue-material-design-icons/FolderMultiple.vue?vue&type=script&lang=js","webpack://photos/./node_modules/vue-material-design-icons/FolderMultiple.vue?101d","webpack:///photos/node_modules/vue-material-design-icons/FolderMultiple.vue?vue&type=template&id=ee49e6fe","webpack:///photos/src/components/Settings/PhotosSourceLocationsSettings.vue","webpack:///photos/src/components/Settings/PhotosSourceLocationsSettings.vue?vue&type=script&lang=js","webpack://photos/./src/components/Settings/PhotosSourceLocationsSettings.vue?0fb6","webpack://photos/./src/components/Settings/PhotosSourceLocationsSettings.vue?29a8","webpack://photos/./src/views/Timeline.vue?f67a","webpack:///photos/node_modules/vue-material-design-icons/FolderAlertOutline.vue","webpack:///photos/node_modules/vue-material-design-icons/FolderAlertOutline.vue?vue&type=script&lang=js","webpack://photos/./node_modules/vue-material-design-icons/FolderAlertOutline.vue?41a0","webpack:///photos/node_modules/vue-material-design-icons/FolderAlertOutline.vue?vue&type=template&id=0780345b","webpack:///photos/node_modules/vue-material-design-icons/PlusBoxMultiple.vue","webpack:///photos/node_modules/vue-material-design-icons/PlusBoxMultiple.vue?vue&type=script&lang=js","webpack://photos/./node_modules/vue-material-design-icons/PlusBoxMultiple.vue?d86c","webpack:///photos/node_modules/vue-material-design-icons/PlusBoxMultiple.vue?vue&type=template&id=5764b316","webpack:///photos/src/components/Albums/AlbumPicker.vue","webpack:///photos/src/components/Albums/AlbumPicker.vue?vue&type=script&lang=js","webpack://photos/./src/components/Albums/AlbumPicker.vue?cd3e","webpack://photos/./src/components/Albums/AlbumPicker.vue?0644","webpack://photos/./src/components/Albums/AlbumPicker.vue?156d","webpack:///photos/src/components/Actions/ActionDownload.vue","webpack:///photos/src/components/Actions/ActionDownload.vue?vue&type=script&lang=js","webpack://photos/./src/components/Actions/ActionDownload.vue?3d40","webpack://photos/./src/components/Actions/ActionDownload.vue?5329","webpack:///photos/src/views/Timeline.vue","webpack:///photos/src/views/Timeline.vue?vue&type=script&lang=js","webpack://photos/./src/views/Timeline.vue?2d72","webpack://photos/./src/views/Timeline.vue?2f21"],"sourcesContent":["/**\n * @copyright Copyright (c) 2022 Louis Chemineau <louis@chmn.me>\n *\n * @author Louis Chemineau <louis@chmn.me>\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 { mapActions } from 'vuex'\n\nimport AbortControllerMixin from './AbortControllerMixin.js'\nimport { fetchCollections } from '../services/collectionFetcher.js'\n\nexport default {\n\tname: 'FetchCollectionsMixin',\n\n\tdata() {\n\t\treturn {\n\t\t\terrorFetchingCollections: null,\n\t\t\tloadingCollections: false,\n\t\t}\n\t},\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t],\n\n\tmethods: {\n\t\t...mapActions([\n\t\t\t'addCollections',\n\t\t]),\n\n\t\t/**\n\t\t * @param {string} collectionHome\n\t\t * @param {string[]} [extraProps] - Extra properties to add to the DAV request.\n\t\t * @param {import('webdav').WebDAVClient} [client] - The DAV client to use.\n\t\t * @return {Promise<import('../services/collectionFetcher.js').Collection[]>}\n\t\t */\n\t\tasync fetchCollections(collectionHome, extraProps, client) {\n\t\t\tif (this.loadingCollections) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingCollections = true\n\t\t\t\tthis.errorFetchingCollections = null\n\n\t\t\t\tconst collections = await fetchCollections(collectionHome, { signal: this.abortController.signal }, extraProps, client)\n\n\t\t\t\tthis.addCollections({ collections })\n\n\t\t\t\treturn collections\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tthis.errorFetchingCollections = 404\n\t\t\t\t} else {\n\t\t\t\t\tthis.errorFetchingCollections = error\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tthis.loadingCollections = false\n\t\t\t}\n\n\t\t\treturn []\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2022 Louis Chemineau <louis@chmn.me>\n *\n * @author Louis Chemineau <louis@chmn.me>\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 { davGetClient, davRootPath } from '@nextcloud/files'\nimport { joinPaths } from '@nextcloud/paths'\nimport logger from '../services/logger.js'\nimport getPhotos from '../services/PhotoSearch.js'\nimport SemaphoreWithPriority from '../utils/semaphoreWithPriority.js'\nimport AbortControllerMixin from './AbortControllerMixin.js'\nimport store from '../store/index.js'\n\nexport default {\n\tname: 'FetchFilesMixin',\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\terrorFetchingFiles: null,\n\t\t\tloadingFiles: false,\n\t\t\tdoneFetchingFiles: false,\n\t\t\tfetchSemaphore: new SemaphoreWithPriority(1),\n\t\t\tfetchedFileIds: [],\n\t\t}\n\t},\n\n\twatch: {\n\t\t'$route.path'() {\n\t\t\tthis.resetFetchFilesState()\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {object} options - Options to pass to getPhotos.\n\t\t * @param {string[]} [blacklist=[]] - Array of ids to filter out.\n\t\t * @param {boolean} [force=false] - Force fetching even if doneFetchingFiles is true\n\t\t * @return {Promise<string[]>} - The next batch of data depending on global offset.\n\t\t */\n\t\tasync fetchFiles(options = {}, blacklist = [], force = false) {\n\t\t\tif ((this.doneFetchingFiles && !force) || this.loadingFiles) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst fetchSemaphoreSymbol = await this.fetchSemaphore.acquire()\n\n\t\t\ttry {\n\t\t\t\tthis.errorFetchingFiles = null\n\t\t\t\tthis.loadingFiles = true\n\n\t\t\t\tconst numberOfImagesPerBatch = 200\n\n\t\t\t\t// Load next batch of images\n\t\t\t\tconst fetchedFiles = await getPhotos({\n\t\t\t\t\tfirstResult: this.fetchedFileIds.length,\n\t\t\t\t\tnbResults: numberOfImagesPerBatch,\n\t\t\t\t\t...options,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\n\t\t\t\t// If we get less files than requested that means we got to the end\n\t\t\t\tif (fetchedFiles.length !== numberOfImagesPerBatch) {\n\t\t\t\t\tthis.doneFetchingFiles = true\n\t\t\t\t}\n\n\t\t\t\tconst fileIds = fetchedFiles\n\t\t\t\t\t.map(file => file.fileid)\n\t\t\t\t\t.filter(fileId => !this.fetchedFileIds.includes(fileId.toString())) // Filter to prevent duplicate fileIds.\n\n\t\t\t\tthis.fetchedFileIds.push(\n\t\t\t\t\t...fileIds\n\t\t\t\t\t\t.map((fileId) => fileId.toString())\n\t\t\t\t\t\t.filter((fileId) => !blacklist.includes(fileId))\n\t\t\t\t)\n\n\t\t\t\tthis.$store.dispatch('appendFiles', fetchedFiles)\n\n\t\t\t\tlogger.debug(`[FetchFilesMixin] Fetched ${fileIds.length} new files: `, fileIds)\n\n\t\t\t\treturn fileIds\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tconst sources = store.state.userConfig.photosSourceFolders\n\t\t\t\t\tfor (const source of sources) {\n\t\t\t\t\t\tif (error.response?.data?.match(`File with name /${source} could not be located`) === null) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlogger.debug(`The ${source} folder does not exist, creating it.`)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait davGetClient().createDirectory(joinPaths(davRootPath, source))\n\t\t\t\t\t\t\tthis.resetFetchFilesState()\n\t\t\t\t\t\t\treturn []\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tthis.errorFetchingFiles = 404\n\t\t\t\t\t\t\tlogger.error('Fail to create source directory', { error })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (error.code === 'ERR_CANCELED') {\n\t\t\t\t\treturn []\n\t\t\t\t} else {\n\t\t\t\t\tthis.errorFetchingFiles = error\n\t\t\t\t}\n\n\t\t\t\t// cancelled request, moving on...\n\t\t\t\tlogger.error('Error fetching files', { error })\n\t\t\t} finally {\n\t\t\t\tthis.loadingFiles = false\n\t\t\t\tthis.fetchSemaphore.release(fetchSemaphoreSymbol)\n\t\t\t}\n\n\t\t\treturn []\n\t\t},\n\n\t\tresetFetchFilesState() {\n\t\t\tthis.doneFetchingFiles = false\n\t\t\tthis.errorFetchingFiles = null\n\t\t\tthis.loadingFiles = false\n\t\t\tthis.fetchedFileIds = []\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 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 { genFileInfo } from '../utils/fileUtils.js'\nimport { allMimes } from './AllowedMimes.js'\nimport client from './DavClient.js'\nimport { props } from './DavRequest.js'\nimport moment from '@nextcloud/moment'\nimport store from '../store/index.js'\nimport { davRootPath } from '@nextcloud/files'\nimport { joinPaths } from '@nextcloud/paths'\n\n/**\n * List files from a folder and filter out unwanted mimes\n *\n * @param {object} [options] used for the cancellable requests\n * @param {number} [options.firstResult=0] Index of the first result that we want (starts at 0)\n * @param {number} [options.nbResults=200] The number of file to fetch\n * @param {string[]} [options.mimesType=allMimes] Mime type of the files\n * @param {boolean} [options.full=false] get full data of the files\n * @param {boolean} [options.onThisDay=false] get only items from this day of year\n * @param {boolean} [options.onlyFavorites=false] get only favorite items\n * @return {Promise<object[]>} the file list\n */\nexport default async function(options = {}) {\n\t// default function options\n\toptions = {\n\t\tfirstResult: 0,\n\t\tnbResults: 200,\n\t\tmimesType: allMimes,\n\t\tonThisDay: false,\n\t\tonlyFavorites: false,\n\t\t...options,\n\t}\n\n\t// generating the search or condition\n\t// based on the allowed mimetypes\n\tconst orMime = options.mimesType.reduce((str, mime) => `${str}\n\t\t<d:eq>\n\t\t\t<d:prop>\n\t\t\t\t<d:getcontenttype/>\n\t\t\t</d:prop>\n\t\t\t<d:literal>${mime}</d:literal>\n\t\t</d:eq>\n\t`, '')\n\n\tconst eqFavorites = options.onlyFavorites\n\t\t? `<d:eq>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:favorite/>\n\t\t\t\t</d:prop>\n\t\t\t\t<d:literal>1</d:literal>\n\t\t\t</d:eq>`\n\t\t: ''\n\n\tconst onThisDay = options.onThisDay\n\t\t? `<d:or>${Array(20).fill(1)\n\t\t\t.map((_, years) => {\n\t\t\t\tconst start = moment(Date.now()).startOf('day').subtract(3, 'd').subtract(years + 1, 'y')\n\t\t\t\tconst end = moment(Date.now()).endOf('day').add(3, 'd').subtract(years + 1, 'y')\n\t\t\t\treturn `<d:and>\n\t\t\t\t<d:gt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified />\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${start.format(moment.defaultFormatUtc)}</d:literal>\n\t\t\t\t</d:gt>\n\t\t\t\t<d:lt>\n\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t<d:getlastmodified />\n\t\t\t\t\t</d:prop>\n\t\t\t\t\t<d:literal>${end.format(moment.defaultFormatUtc)}</d:literal>\n\t\t\t\t</d:lt>\n\t\t\t</d:and>`\n\t\t\t}).join('\\n')}</d:or>`\n\t\t: ''\n\n\tconst sourceFolders = store.state.userConfig.photosSourceFolders\n\t\t.map(folder => `\n\t\t\t<d:scope>\n\t\t\t\t<d:href>${joinPaths(davRootPath, folder)}</d:href>\n\t\t\t\t<d:depth>infinity</d:depth>\n\t\t\t</d:scope>`\n\t\t)\n\t\t.join('\\n')\n\n\toptions = Object.assign({\n\t\tmethod: 'SEARCH',\n\t\theaders: {\n\t\t\t'content-Type': 'text/xml',\n\t\t},\n\t\tdata: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\t\t\t<d:searchrequest xmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ns=\"https://github.com/icewind1991/SearchDAV/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<d:basicsearch>\n\t\t\t\t\t<d:select>\n\t\t\t\t\t\t<d:prop>\n\t\t\t\t\t\t\t${props}\n\t\t\t\t\t\t</d:prop>\n\t\t\t\t\t</d:select>\n\t\t\t\t\t<d:from>\n\t\t\t\t\t\t${sourceFolders}\n\t\t\t\t\t</d:from>\n\t\t\t\t\t<d:where>\n\t\t\t\t\t\t<d:and>\n\t\t\t\t\t\t\t<d:or>\n\t\t\t\t\t\t\t\t${orMime}\n\t\t\t\t\t\t\t</d:or>\n\t\t\t\t\t\t\t${eqFavorites}\n\t\t\t\t\t\t\t${onThisDay}\n\t\t\t\t\t\t</d:and>\n\t\t\t\t\t</d:where>\n\t\t\t\t\t<d:orderby>\n\t\t\t\t\t\t<d:order>\n\t\t\t\t\t\t\t<d:prop><nc:metadata-photos-original_date_time/></d:prop>\n\t\t\t\t\t\t\t<d:descending/>\n\t\t\t\t\t\t</d:order>\n\t\t\t\t\t\t<d:order>\n\t\t\t\t\t\t\t<d:prop><d:getlastmodified/></d:prop>\n\t\t\t\t\t\t\t<d:descending/>\n\t\t\t\t\t\t</d:order>\n\t\t\t\t\t</d:orderby>\n\t\t\t\t\t<d:limit>\n\t\t\t\t\t\t<d:nresults>${options.nbResults}</d:nresults>\n\t\t\t\t\t\t<ns:firstresult>${options.firstResult}</ns:firstresult>\n\t\t\t\t\t</d:limit>\n\t\t\t\t</d:basicsearch>\n\t\t\t</d:searchrequest>`,\n\t\tdeep: true,\n\t\tdetails: true,\n\t}, options)\n\n\tconst response = await client.getDirectoryContents('', options)\n\n\treturn response.data.map(data => genFileInfo(data))\n}\n","/**\n * @copyright Copyright (c) 2022 Louis Chemineau <louis@chmn.me>\n *\n * @author Louis Chemineau <louis@chmn.me>\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\tname: 'FilesByMonthMixin',\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {Object<string, []>}\n\t\t */\n\t\tfileIdsByMonth() {\n\t\t\tconst filesByMonth = {}\n\t\t\tfor (const fileId of this.fetchedFileIds) {\n\t\t\t\tconst file = this.files[fileId]\n\t\t\t\tif (file) {\n\t\t\t\t\tfilesByMonth[file.month] = filesByMonth[file.month] ?? []\n\t\t\t\t\tfilesByMonth[file.month].push(file.fileid)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Sort files in sections.\n\t\t\tObject.keys(filesByMonth)\n\t\t\t\t.forEach(month => filesByMonth[month].sort(this.sortFilesByTimestamp))\n\n\t\t\treturn filesByMonth\n\t\t},\n\n\t\t/**\n\t\t * @return {string[]}\n\t\t */\n\t\tmonthsList() {\n\t\t\treturn Object\n\t\t\t\t.keys(this.fileIdsByMonth)\n\t\t\t\t.sort((month1, month2) => month1 > month2 ? -1 : 1)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {string} fileId1 The first file ID\n\t\t * @param {string} fileId2 The second file ID\n\t\t * @return {-1 | 1}\n\t\t */\n\t\tsortFilesByTimestamp(fileId1, fileId2) {\n\t\t\treturn this.files[fileId1].timestamp > this.files[fileId2].timestamp ? -1 : 1\n\t\t},\n\t},\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".album-picker[data-v-20d6fa8c]{padding:32px;padding-top:16px}.album-picker h2[data-v-20d6fa8c]{display:flex;align-items:center;height:60px}.album-picker h2 .loading-icon[data-v-20d6fa8c]{margin-left:32px}.album-picker .albums-container[data-v-20d6fa8c]{min-height:150px;max-height:350px;overflow-x:scroll;padding:2px}.album-picker .albums-container .album[data-v-20d6fa8c] .list-item{padding:8px 16px;box-sizing:border-box}.album-picker .albums-container .album[data-v-20d6fa8c]:not(:last-child){margin-bottom:16px}.album-picker .albums-container .album__image[data-v-20d6fa8c]{width:40px;height:40px;object-fit:none;border-radius:var(--border-radius)}.album-picker .albums-container .album__image--placeholder[data-v-20d6fa8c]{background:var(--color-primary-element-light)}.album-picker .albums-container .album__image--placeholder[data-v-20d6fa8c] .material-design-icon{width:100%;height:100%}.album-picker .albums-container .album__image--placeholder[data-v-20d6fa8c] .material-design-icon .material-design-icon__svg{fill:var(--color-primary-element)}.album-picker .new-album-button[data-v-20d6fa8c]{margin-top:32px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Albums/AlbumPicker.vue\"],\"names\":[],\"mappings\":\"AAEA,+BACC,YAAA,CACA,gBAAA,CAEA,kCACC,YAAA,CACA,kBAAA,CACA,WAAA,CAEA,gDACC,gBAAA,CAIF,iDACC,gBAAA,CACA,gBAAA,CACA,iBAAA,CACA,WAAA,CAIC,mEACC,gBAAA,CACA,qBAAA,CAGD,yEACC,kBAAA,CAGD,+DACC,UAAA,CACA,WAAA,CACA,eAAA,CACA,kCAAA,CAEA,4EACC,6CAAA,CAEA,kGACC,UAAA,CACA,WAAA,CAEA,6HACC,iCAAA,CAQN,iDACC,eAAA\",\"sourcesContent\":[\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n.album-picker {\\n\\tpadding: 32px;\\n\\tpadding-top: 16px;\\n\\n\\th2 {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\theight: 60px;\\n\\n\\t\\t.loading-icon {\\n\\t\\t\\tmargin-left: 32px;\\n\\t\\t}\\n\\t}\\n\\n\\t.albums-container {\\n\\t\\tmin-height: 150px;\\n\\t\\tmax-height: 350px;\\n\\t\\toverflow-x: scroll;\\n\\t\\tpadding: 2px;\\n\\n\\t\\t.album {\\n\\n\\t\\t\\t:deep .list-item {\\n\\t\\t\\t\\tpadding: 8px 16px;\\n\\t\\t\\t\\tbox-sizing: border-box;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:not(:last-child) {\\n\\t\\t\\t\\tmargin-bottom: 16px;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&__image {\\n\\t\\t\\t\\twidth: 40px;\\n\\t\\t\\t\\theight: 40px;\\n\\t\\t\\t\\tobject-fit: none;\\n\\t\\t\\t\\tborder-radius: var(--border-radius);\\n\\n\\t\\t\\t\\t&--placeholder {\\n\\t\\t\\t\\t\\tbackground: var(--color-primary-element-light);\\n\\n\\t\\t\\t\\t\\t:deep .material-design-icon {\\n\\t\\t\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\t\\t\\theight: 100%;\\n\\n\\t\\t\\t\\t\\t\\t.material-design-icon__svg {\\n\\t\\t\\t\\t\\t\\t\\tfill: var(--color-primary-element);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.new-album-button {\\n\\t\\tmargin-top: 32px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".folder[data-v-a871c74a]{display:flex;gap:16px;min-width:300px}.folder__info[data-v-a871c74a]{display:flex;flex-direction:column;flex-grow:1;justify-content:center}.folder__path[data-v-a871c74a]{font-weight:bold}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Settings/PhotosFolder.vue\"],\"names\":[],\"mappings\":\"AAEA,yBACC,YAAA,CACA,QAAA,CACA,eAAA,CAEA,+BACC,YAAA,CACA,qBAAA,CACA,WAAA,CACA,sBAAA,CAGD,+BACC,gBAAA\",\"sourcesContent\":[\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n.folder {\\n\\tdisplay: flex;\\n\\tgap: 16px;\\n\\tmin-width: 300px;\\n\\n\\t&__info {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tflex-grow: 1;\\n\\t\\tjustify-content: center;\\n\\t}\\n\\n\\t&__path {\\n\\t\\tfont-weight: bold;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".photos-locations-container[data-v-05ae8e6c]{display:flex;flex-direction:column;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.photos-locations-container .photos-locations[data-v-05ae8e6c]{margin-bottom:16px}.photos-locations-container .photos-locations li[data-v-05ae8e6c]{list-style:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Settings/PhotosSourceLocationsSettings.vue\"],\"names\":[],\"mappings\":\"AAEA,6CACC,YAAA,CACA,qBAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CAEA,+DACC,kBAAA,CAEA,kEACC,eAAA\",\"sourcesContent\":[\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n.photos-locations-container {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\twidth: fit-content;\\n\\n\\t.photos-locations {\\n\\t\\tmargin-bottom: 16px;\\n\\n\\t\\tli {\\n\\t\\t\\tlist-style: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".timeline[data-v-2068ca0a]{display:flex;flex-direction:column}.timeline__empty-content[data-v-2068ca0a]{height:100%}.timeline__empty-content .empty-content[data-v-2068ca0a]{height:100%}.timeline__empty-content .timeline__update_source_directory[data-v-2068ca0a]{align-items:center}.timeline__empty-content .timeline__update_source_directory[data-v-2068ca0a] .folder{min-width:unset}.timeline__header__left[data-v-2068ca0a]{display:flex;gap:4px}.timeline__heading[data-v-2068ca0a]{padding:calc(var(--default-grid-baseline)*4);margin-bottom:0px;padding-bottom:0px}.timeline__file-list[data-v-2068ca0a]{padding:0 64px}@media only screen and (max-width: 1200px){.timeline__file-list[data-v-2068ca0a]{padding:0 4px}}.timeline__file-list[data-v-2068ca0a] .files-list-viewer__section-header{top:var(--photos-navigation-height)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/views/Timeline.vue\"],\"names\":[],\"mappings\":\"AAEA,2BACC,YAAA,CACA,qBAAA,CAEA,0CACC,WAAA,CAEA,yDACC,WAAA,CAGD,6EACC,kBAAA,CAEA,qFACC,eAAA,CAMF,yCACC,YAAA,CACA,OAAA,CAIF,oCACC,4CAAA,CACA,iBAAA,CACA,kBAAA,CAGD,sCACC,cAAA,CAEA,2CAHD,sCAIE,aAAA,CAAA,CAGD,yEACC,mCAAA\",\"sourcesContent\":[\"$sizes: (\\\"400\\\": (\\\"count\\\": 3, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"700\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 8), \\\"1024\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1280\\\": (\\\"count\\\": 4, \\\"marginTop\\\": 66, \\\"marginW\\\": 44), \\\"1440\\\": (\\\"count\\\": 5, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"1600\\\": (\\\"count\\\": 6, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2048\\\": (\\\"count\\\": 7, \\\"marginTop\\\": 88, \\\"marginW\\\": 66), \\\"2560\\\": (\\\"count\\\": 8, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"3440\\\": (\\\"count\\\": 9, \\\"marginTop\\\": 88, \\\"marginW\\\": 88), \\\"max\\\": (\\\"count\\\": 10, \\\"marginTop\\\": 88, \\\"marginW\\\": 88));\\n\\n.timeline {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\n\\t&__empty-content {\\n\\t\\theight: 100%;\\n\\n\\t\\t.empty-content {\\n\\t\\t\\theight: 100%;\\n\\t\\t}\\n\\n\\t\\t.timeline__update_source_directory {\\n\\t\\t\\talign-items: center;\\n\\n\\t\\t\\t:deep(.folder) {\\n\\t\\t\\t\\tmin-width: unset;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__header {\\n\\t\\t&__left {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tgap: 4px;\\n\\t\\t}\\n\\t}\\n\\n\\t&__heading {\\n\\t\\tpadding: calc(var(--default-grid-baseline) * 4);\\n\\t\\tmargin-bottom: 0px;\\n\\t\\tpadding-bottom: 0px;\\n\\t}\\n\\n\\t&__file-list {\\n\\t\\tpadding: 0 64px;\\n\\n\\t\\t@media only screen and (max-width: 1200px) {\\n\\t\\t\\tpadding: 0 4px;\\n\\t\\t}\\n\\n\\t\\t:deep .files-list-viewer__section-header {\\n\\t\\t\\ttop: var(--photos-navigation-height);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon arrow-left-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ArrowLeftIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./ArrowLeft.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./ArrowLeft.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ArrowLeft.vue?vue&type=template&id=187c55d7\"\nimport script from \"./ArrowLeft.vue?vue&type=script&lang=js\"\nexport * from \"./ArrowLeft.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon arrow-left-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon download-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"DownloadIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Download.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Download.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Download.vue?vue&type=template&id=67aea606\"\nimport script from \"./Download.vue?vue&type=script&lang=js\"\nexport * from \"./Download.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon download-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon folder-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FolderIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Folder.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Folder.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Folder.vue?vue&type=template&id=5c04f969\"\nimport script from \"./Folder.vue?vue&type=script&lang=js\"\nexport * from \"./Folder.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon folder-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon image-multiple-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M22,16V4A2,2 0 0,0 20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16M11,12L13.03,14.71L16,11L20,16H8M2,6V20A2,2 0 0,0 4,22H18V20H4V6\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ImageMultipleIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./ImageMultiple.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./ImageMultiple.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ImageMultiple.vue?vue&type=template&id=21a95e74\"\nimport script from \"./ImageMultiple.vue?vue&type=script&lang=js\"\nexport * from \"./ImageMultiple.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon image-multiple-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M22,16V4A2,2 0 0,0 20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16M11,12L13.03,14.71L16,11L20,16H8M2,6V20A2,2 0 0,0 4,22H18V20H4V6\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.shouldFavoriteSelection)?_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Mark selection as favorite')},on:{\"click\":_vm.favoriteSelection}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'Add selection to favorites'))+\"\\n\\t\"),_c('Star',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1):_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Remove selection from favorites')},on:{\"click\":_vm.unFavoriteSelection}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('photos', 'Remove selection from favorites'))+\"\\n\\t\"),_c('Star',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2022 Louis Chemineau <louis@chmn.me>\n -\n - @author Louis Chemineau <louis@chmn.me>\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<template>\n\t<NcActionButton v-if=\"shouldFavoriteSelection\"\n\t\t:close-after-click=\"true\"\n\t\t:aria-label=\"t('photos', 'Mark selection as favorite')\"\n\t\t@click=\"favoriteSelection\">\n\t\t{{ t('photos', 'Add selection to favorites') }}\n\t\t<Star slot=\"icon\" />\n\t</NcActionButton>\n\t<NcActionButton v-else\n\t\t:close-after-click=\"true\"\n\t\t:aria-label=\"t('photos', 'Remove selection from favorites')\"\n\t\t@click=\"unFavoriteSelection\">\n\t\t{{ t('photos', 'Remove selection from favorites') }}\n\t\t<Star slot=\"icon\" />\n\t</NcActionButton>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex'\nimport Star from 'vue-material-design-icons/Star.vue'\n\nimport { NcActionButton } from '@nextcloud/vue'\n\nexport default {\n\tname: 'ActionFavorite',\n\tcomponents: {\n\t\tStar,\n\t\tNcActionButton,\n\t},\n\n\tprops: {\n\t\tselectedFileIds: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\n\t\t/** @return {boolean} */\n\t\tshouldFavoriteSelection() {\n\t\t\t// Favorite all selection if at least one file is not in the favorites.\n\t\t\treturn this.selectedFileIds.some((fileId) => this.files[fileId].favorite === 0)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t...mapActions([\n\t\t\t'toggleFavoriteForFiles',\n\t\t]),\n\n\t\tasync favoriteSelection() {\n\t\t\tawait this.toggleFavoriteForFiles({ fileIds: this.selectedFileIds, favoriteState: 1 })\n\t\t},\n\n\t\tasync unFavoriteSelection() {\n\t\t\tawait this.toggleFavoriteForFiles({ fileIds: this.selectedFileIds, favoriteState: 0 })\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!./ActionFavorite.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!./ActionFavorite.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ActionFavorite.vue?vue&type=template&id=dacc71da\"\nimport script from \"./ActionFavorite.vue?vue&type=script&lang=js\"\nexport * from \"./ActionFavorite.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"folder\"},[(_vm.path === '/')?_c(_vm.rootFolderIcon,{tag:\"component\"}):_c('Folder'),_vm._v(\" \"),_c('span',{staticClass:\"folder__info\"},[_c('div',{staticClass:\"folder__path\"},[_vm._v(_vm._s(_vm.folderName))]),_vm._v(\" \"),(_vm.subname !== '')?_c('div',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.subname)+\"\\n\\t\\t\")]):_vm._e()]),_vm._v(\" \"),(_vm.canDelete)?_c('NcButton',{attrs:{\"type\":\"tertiary\",\"aria-label\":_vm.t('photos', 'Delete source directory')},on:{\"click\":_vm.emitRemoveSourceFolder},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Close',{attrs:{\"size\":20}})]},proxy:true}],null,false,2121748766)}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div class=\"folder\">\n\t\t<component :is=\"rootFolderIcon\" v-if=\"path === '/'\" />\n\t\t<Folder v-else />\n\t\t<span class=\"folder__info\">\n\t\t\t<div class=\"folder__path\">{{ folderName }}</div>\n\t\t\t<div v-if=\"subname !== ''\">\n\t\t\t\t{{ subname }}\n\t\t\t</div>\n\t\t</span>\n\t\t<NcButton v-if=\"canDelete\"\n\t\t\ttype=\"tertiary\"\n\t\t\t:aria-label=\"t('photos', 'Delete source directory')\"\n\t\t\t@click=\"emitRemoveSourceFolder\">\n\t\t\t<template #icon>\n\t\t\t\t<Close :size=\"20\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport { defineComponent } from 'vue'\n\nimport Folder from 'vue-material-design-icons/Folder.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\n\nimport { NcButton } from '@nextcloud/vue'\nimport { translate as t } from '@nextcloud/l10n'\n\nexport default defineComponent({\n\tname: 'PhotosFolder',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tFolder,\n\t\tClose,\n\t},\n\n\tprops: {\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcanDelete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trootFolderLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\trootFolderIcon: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\temits: ['remove-folder'],\n\n\tcomputed: {\n\t\tfolderName() {\n\t\t\tif (this.path === '/') {\n\t\t\t\treturn this.rootFolderLabel\n\t\t\t} else {\n\t\t\t\treturn this.path.split('/').pop()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Return the summary path of the folder\n\t\t * Examples:\n\t\t * - / ==> Home\n\t\t * - /a ==> nothing\n\t\t * - /a/b ==> /a\n\t\t * - /a/b/c ==> /a/b\n\t\t * - /a/b/c/d ==> /a/b\n\t\t */\n\t\tsubname() {\n\t\t\tconst slashesCount = (this.path.match(/\\//g) ?? []).length\n\n\t\t\tswitch (slashesCount) {\n\t\t\tcase 1:\n\t\t\t\treturn ''\n\t\t\tcase 2:\n\t\t\t\treturn this.path.split('/').splice(0, 2).join('/')\n\t\t\tdefault:\n\t\t\t\treturn this.path.split('/').splice(0, 3).join('/')\n\t\t\t}\n\t\t},\n\t},\n\n\tmethods: {\n\t\temitRemoveSourceFolder() {\n\t\t\tthis.$emit('remove-folder')\n\t\t},\n\n\t\tt,\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.folder {\n\tdisplay: flex;\n\tgap: 16px;\n\tmin-width: 300px;\n\n\t&__info {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tflex-grow: 1;\n\t\tjustify-content: center;\n\t}\n\n\t&__path {\n\t\tfont-weight: bold;\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!./PhotosFolder.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!./PhotosFolder.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/postcss-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhotosFolder.vue?vue&type=style&index=0&id=a871c74a&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhotosFolder.vue?vue&type=style&index=0&id=a871c74a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PhotosFolder.vue?vue&type=template&id=a871c74a&scoped=true\"\nimport script from \"./PhotosFolder.vue?vue&type=script&lang=js\"\nexport * from \"./PhotosFolder.vue?vue&type=script&lang=js\"\nimport style0 from \"./PhotosFolder.vue?vue&type=style&index=0&id=a871c74a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a871c74a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"photos-locations-container\"},[_c('div',{staticClass:\"photos-locations\"},_vm._l((_vm.photosSourceFolders),function(source,index){return _c('li',{key:index},[_c('PhotosFolder',{attrs:{\"path\":source,\"can-delete\":_vm.photosSourceFolders.length !== 1,\"root-folder-label\":_vm.t('photos', 'All folders'),\"root-folder-icon\":_vm.FolderMultiple},on:{\"remove-folder\":function($event){return _vm.removeSourceFolder(index)}}})],1)}),0),_vm._v(\" \"),_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Add a Photos source for the timelines')},on:{\"click\":_vm.debounceAddSourceFolder},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus',{attrs:{\"size\":20}})]},proxy:true}])},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'Add folder'))+\"\\n\\t\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon folder-multiple-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M22,4H14L12,2H6A2,2 0 0,0 4,4V16A2,2 0 0,0 6,18H22A2,2 0 0,0 24,16V6A2,2 0 0,0 22,4M2,6H0V11H0V20A2,2 0 0,0 2,22H20V20H2V6Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FolderMultipleIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./FolderMultiple.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./FolderMultiple.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FolderMultiple.vue?vue&type=template&id=ee49e6fe\"\nimport script from \"./FolderMultiple.vue?vue&type=script&lang=js\"\nexport * from \"./FolderMultiple.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon folder-multiple-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M22,4H14L12,2H6A2,2 0 0,0 4,4V16A2,2 0 0,0 6,18H22A2,2 0 0,0 24,16V6A2,2 0 0,0 22,4M2,6H0V11H0V20A2,2 0 0,0 2,22H20V20H2V6Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\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 AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"photos-locations-container\">\n\t\t<div class=\"photos-locations\">\n\t\t\t<li v-for=\"(source, index) in photosSourceFolders\"\n\t\t\t\t:key=\"index\">\n\t\t\t\t<PhotosFolder :path=\"source\"\n\t\t\t\t\t:can-delete=\"photosSourceFolders.length !== 1\"\n\t\t\t\t\t:root-folder-label=\"t('photos', 'All folders')\"\n\t\t\t\t\t:root-folder-icon=\"FolderMultiple\"\n\t\t\t\t\t@remove-folder=\"removeSourceFolder(index)\" />\n\t\t\t</li>\n\t\t</div>\n\n\t\t<NcButton :aria-label=\"t('photos', 'Add a Photos source for the timelines')\"\n\t\t\t@click=\"debounceAddSourceFolder\">\n\t\t\t<template #icon>\n\t\t\t\t<Plus :size=\"20\" />\n\t\t\t</template>\n\t\t\t{{ t('photos', 'Add folder') }}\n\t\t</NcButton>\n\t</div>\n</template>\n\n<script>\nimport debounce from 'debounce'\nimport { defineComponent } from 'vue'\n\nimport FolderMultiple from 'vue-material-design-icons/FolderMultiple.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\n\nimport { NcButton } from '@nextcloud/vue'\nimport { getFilePickerBuilder } from '@nextcloud/dialogs'\nimport { translate as t } from '@nextcloud/l10n'\n\nimport PhotosFolder from './PhotosFolder.vue'\n\nexport default defineComponent({\n\tname: 'PhotosSourceLocationsSettings',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tPhotosFolder,\n\t\tPlus,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tFolderMultiple,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {string[]} */\n\t\tphotosSourceFolders() {\n\t\t\treturn this.$store.state.userConfig.photosSourceFolders\n\t\t},\n\t},\n\n\tmethods: {\n\t\tdebounceAddSourceFolder: debounce(function(...args) {\n\t\t\tthis.addSourceFolder(...args)\n\t\t}, 200, false),\n\n\t\tasync openFilePicker(title) {\n\t\t\tconst picker = getFilePickerBuilder(title)\n\t\t\t\t.setMultiSelect(false)\n\t\t\t\t.setModal(true)\n\t\t\t\t.setType(1)\n\t\t\t\t.addMimeTypeFilter('httpd/unix-directory')\n\t\t\t\t.allowDirectories()\n\t\t\t\t.build()\n\n\t\t\treturn picker.pick()\n\t\t},\n\n\t\tasync addSourceFolder() {\n\t\t\tconst pickedFolder = await this.openFilePicker(t('photos', 'Select a source folder for your media'))\n\t\t\tif (this.photosSourceFolders.includes(pickedFolder)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$store.dispatch('updateUserConfig', { key: 'photosSourceFolders', value: [...this.photosSourceFolders, pickedFolder] })\n\t\t},\n\n\t\tremoveSourceFolder(index) {\n\t\t\tconst folders = [...this.photosSourceFolders]\n\t\t\tfolders.splice(index, 1)\n\t\t\tthis.$store.dispatch('updateUserConfig', { key: 'photosSourceFolders', value: folders })\n\t\t},\n\n\t\tt,\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.photos-locations-container {\n\tdisplay: flex;\n\tflex-direction: column;\n\twidth: fit-content;\n\n\t.photos-locations {\n\t\tmargin-bottom: 16px;\n\n\t\tli {\n\t\t\tlist-style: none;\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!./PhotosSourceLocationsSettings.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!./PhotosSourceLocationsSettings.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/postcss-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhotosSourceLocationsSettings.vue?vue&type=style&index=0&id=05ae8e6c&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PhotosSourceLocationsSettings.vue?vue&type=style&index=0&id=05ae8e6c&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./PhotosSourceLocationsSettings.vue?vue&type=template&id=05ae8e6c&scoped=true\"\nimport script from \"./PhotosSourceLocationsSettings.vue?vue&type=script&lang=js\"\nexport * from \"./PhotosSourceLocationsSettings.vue?vue&type=script&lang=js\"\nimport style0 from \"./PhotosSourceLocationsSettings.vue?vue&type=style&index=0&id=05ae8e6c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05ae8e6c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.errorFetchingFiles)?_c('div',{staticClass:\"timeline__empty-content\"},[(_vm.errorFetchingFiles === 404)?_c('NcEmptyContent',{attrs:{\"name\":_vm.t('photos', 'One of the source folders does not exists')}},[_c('FolderAlertOutline',{attrs:{\"slot\":\"icon\"},slot:\"icon\"}),_vm._v(\" \"),_c('PhotosSourceLocationsSettings',{staticClass:\"timeline__update_source_directory\",attrs:{\"slot\":\"action\"},slot:\"action\"})],1):_c('NcEmptyContent',{attrs:{\"name\":_vm.t('photos', 'An error occurred')}},[_c('AlertCircle',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1)],1):_c('div',{staticClass:\"timeline\"},[_c('HeaderNavigation',{key:\"navigation\",attrs:{\"loading\":_vm.loadingCount > 0,\"path\":'/',\"title\":_vm.rootTitle,\"root-title\":_vm.rootTitle},on:{\"refresh\":_vm.resetFetchFilesState}},[_c('div',{staticClass:\"timeline__header__left\"},[(_vm.selectedFileIds.length === 0)?_c('NcActions',{ref:\"addActions\",attrs:{\"force-menu\":true,\"menu-name\":_vm.t('photos', 'Add')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus')]},proxy:true}],null,false,1489515321)},[_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Create new album')},on:{\"click\":function($event){_vm.showAlbumCreationForm = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('PlusBoxMultiple')]},proxy:true}],null,false,2640725948)},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Create new album'))+\"\\n\\t\\t\\t\\t\\t\")])],1):[_c('NcButton',{attrs:{\"close-after-click\":true,\"type\":\"primary\",\"aria-label\":_vm.t('photos', 'Add to album')},on:{\"click\":function($event){_vm.showAlbumPicker = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus')]},proxy:true},(!_vm.isMobile)?{key:\"default\",fn:function(){return [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Add to album'))+\"\\n\\t\\t\\t\\t\\t\")]},proxy:true}:null],null,true)}),_vm._v(\" \"),(_vm.selectedFileIds.length > 0)?_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Unselect all')},on:{\"click\":_vm.resetSelection},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Close')]},proxy:true},(!_vm.isMobile)?{key:\"default\",fn:function(){return [_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Unselect all'))+\"\\n\\t\\t\\t\\t\\t\")]},proxy:true}:null],null,true)}):_vm._e(),_vm._v(\" \"),_c('NcActions',{attrs:{\"aria-label\":_vm.t('photos', 'Open actions menu')}},[_c('ActionDownload',{attrs:{\"selected-file-ids\":_vm.selectedFileIds,\"title\":_vm.t('photos', 'Download selected files')}},[_c('Download',{attrs:{\"slot\":\"icon\"},slot:\"icon\"})],1),_vm._v(\" \"),_c('ActionFavorite',{attrs:{\"selected-file-ids\":_vm.selectedFileIds}}),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true,\"aria-label\":_vm.t('photos', 'Delete selection')},on:{\"click\":_vm.deleteSelection},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Delete')]},proxy:true}])},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Delete selection'))+\"\\n\\t\\t\\t\\t\\t\\t\")])],1)]],2)]),_vm._v(\" \"),_c('FilesListViewer',{ref:\"filesListViewer\",staticClass:\"timeline__file-list\",attrs:{\"container-element\":_vm.appContent,\"file-ids-by-section\":_vm.fileIdsByMonth,\"sections\":_vm.monthsList,\"loading\":_vm.loadingFiles,\"base-height\":_vm.isMobile ? 120 : 200,\"empty-message\":_vm.t('photos', 'No photos or videos in here')},on:{\"need-content\":_vm.getContent},scopedSlots:_vm._u([{key:\"default\",fn:function({file, isHeader, distance}){return [(isHeader)?_c('h2',{staticClass:\"section-header\",attrs:{\"id\":`file-picker-section-header-${file.id}`}},[_c('b',[_vm._v(_vm._s(_vm._f(\"dateMonth\")(file.id)))]),_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm._f(\"dateYear\")(file.id))+\"\\n\\t\\t\\t\")]):_c('File',{attrs:{\"file\":_vm.files[file.id],\"allow-selection\":true,\"selected\":_vm.selection[file.id] === true,\"distance\":distance},on:{\"click\":_vm.openViewer,\"select-toggled\":_vm.onFileSelectToggle}})]}}])}),_vm._v(\" \"),(_vm.showAlbumCreationForm)?_c('NcModal',{key:\"albumCreationForm\",attrs:{\"set-return-focus\":_vm.$refs.addActions?.$refs.menuButton?.$el},on:{\"close\":function($event){_vm.showAlbumCreationForm = false}}},[_c('h2',{staticClass:\"timeline__heading\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('photos', 'New album'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('AlbumForm',{on:{\"done\":function($event){_vm.showAlbumCreationForm = false}}})],1):_vm._e(),_vm._v(\" \"),(_vm.showAlbumPicker)?_c('NcModal',{key:\"albumPicker\",on:{\"close\":function($event){_vm.showAlbumPicker = false}}},[_c('AlbumPicker',{on:{\"album-picked\":_vm.addSelectionToAlbum}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon folder-alert-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M15,12H17V17H15V12M15,18H17V20H15V18M16,9C17.07,9 18.09,9.24 19,9.67V8H3V18H9.29C9.1,17.36 9,16.69 9,16A7,7 0 0,1 16,9M23,16A7,7 0 0,1 16,23C13.62,23 11.5,21.81 10.25,20H3C1.89,20 1,19.1 1,18V6C1,4.89 1.89,4 3,4H9L11,6H19A2,2 0 0,1 21,8V11.1C22.24,12.36 23,14.09 23,16M16,11A5,5 0 0,0 11,16A5,5 0 0,0 16,21A5,5 0 0,0 21,16A5,5 0 0,0 16,11Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FolderAlertOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./FolderAlertOutline.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./FolderAlertOutline.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FolderAlertOutline.vue?vue&type=template&id=0780345b\"\nimport script from \"./FolderAlertOutline.vue?vue&type=script&lang=js\"\nexport * from \"./FolderAlertOutline.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon folder-alert-outline-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M15,12H17V17H15V12M15,18H17V20H15V18M16,9C17.07,9 18.09,9.24 19,9.67V8H3V18H9.29C9.1,17.36 9,16.69 9,16A7,7 0 0,1 16,9M23,16A7,7 0 0,1 16,23C13.62,23 11.5,21.81 10.25,20H3C1.89,20 1,19.1 1,18V6C1,4.89 1.89,4 3,4H9L11,6H19A2,2 0 0,1 21,8V11.1C22.24,12.36 23,14.09 23,16M16,11A5,5 0 0,0 11,16A5,5 0 0,0 16,21A5,5 0 0,0 21,16A5,5 0 0,0 16,11Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"!title\"\n :aria-label=\"title\"\n class=\"material-design-icon plus-box-multiple-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19,11H15V15H13V11H9V9H13V5H15V9H19M20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16V4A2,2 0 0,0 20,2M4,6H2V20A2,2 0 0,0 4,22H18V20H4V6Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"PlusBoxMultipleIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./PlusBoxMultiple.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./PlusBoxMultiple.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PlusBoxMultiple.vue?vue&type=template&id=5764b316\"\nimport script from \"./PlusBoxMultiple.vue?vue&type=script&lang=js\"\nexport * from \"./PlusBoxMultiple.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',_vm._b({staticClass:\"material-design-icon plus-box-multiple-icon\",attrs:{\"aria-hidden\":!_vm.title,\"aria-label\":_vm.title,\"role\":\"img\"},on:{\"click\":function($event){return _vm.$emit('click', $event)}}},'span',_vm.$attrs,false),[_c('svg',{staticClass:\"material-design-icon__svg\",attrs:{\"fill\":_vm.fillColor,\"width\":_vm.size,\"height\":_vm.size,\"viewBox\":\"0 0 24 24\"}},[_c('path',{attrs:{\"d\":\"M19,11H15V15H13V11H9V9H13V5H15V9H19M20,2H8A2,2 0 0,0 6,4V16A2,2 0 0,0 8,18H20A2,2 0 0,0 22,16V4A2,2 0 0,0 20,2M4,6H2V20A2,2 0 0,0 4,22H18V20H4V6Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2022 Louis Chemineau <louis@chmn.me>\n -\n - @author Louis Chemineau <louis@chmn.me>\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<template>\n\t<div v-if=\"!showAlbumCreationForm\" class=\"album-picker\">\n\t\t<h2>\n\t\t\t{{ t('photos', 'Add to Album') }}\n\t\t\t<NcLoadingIcon v-if=\"loadingCollections\" class=\"loading-icon\" />\n\t\t</h2>\n\n\t\t<ul class=\"albums-container\">\n\t\t\t<NcListItem v-for=\"album in allAlbums\"\n\t\t\t\t:key=\"album.filename\"\n\t\t\t\tclass=\"album\"\n\t\t\t\t:name=\"originalName(album)\"\n\t\t\t\t:aria-label=\"t('photos', 'Add selection to album {albumName}', {albumName: album.basename})\"\n\t\t\t\t@click=\"pickAlbum(album)\">\n\t\t\t\t<template slot=\"icon\">\n\t\t\t\t\t<img v-if=\"album.lastPhoto !== -1\" class=\"album__image\" :src=\"album.lastPhoto | toCoverUrl\">\n\t\t\t\t\t<div v-else class=\"album__image album__image--placeholder\">\n\t\t\t\t\t\t<ImageMultiple :size=\"32\" />\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<template #subname>\n\t\t\t\t\t{{ n('photos', '%n item', '%n photos and videos', album.nbItems) }}\n\t\t\t\t\t<template v-if=\"isSharedAlbum(album)\">\n\t\t\t\t\t\t⸱ {{ t('photos', 'Shared by') }}&nbsp;<NcUserBubble :display-name=\"album.collaborators[0].label\" :user=\"album.collaborators[0].id\" />\n\t\t\t\t\t</template>\n\t\t\t\t</template>\n\t\t\t</NcListItem>\n\t\t</ul>\n\n\t\t<NcButton :aria-label=\"t('photos', 'Create a new album.')\"\n\t\t\tclass=\"new-album-button\"\n\t\t\ttype=\"tertiary\"\n\t\t\t@click=\"showAlbumCreationForm = true\">\n\t\t\t<template #icon>\n\t\t\t\t<Plus />\n\t\t\t</template>\n\t\t\t{{ t('photos', 'Create new album') }}\n\t\t</NcButton>\n\t</div>\n\n\t<AlbumForm v-else\n\t\t:display-back-button=\"true\"\n\t\t:title=\"t('photos', 'New album')\"\n\t\t@back=\"showAlbumCreationForm = false\"\n\t\t@done=\"albumCreatedHandler\" />\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\nimport Plus from 'vue-material-design-icons/Plus.vue'\nimport ImageMultiple from 'vue-material-design-icons/ImageMultiple.vue'\n\nimport { NcButton, NcListItem, NcLoadingIcon, NcUserBubble } from '@nextcloud/vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { translate, translatePlural } from '@nextcloud/l10n'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nimport FetchCollectionsMixin from '../../mixins/FetchCollectionsMixin.js'\nimport AlbumForm from './AlbumForm.vue'\n\nexport default {\n\tname: 'AlbumPicker',\n\n\tcomponents: {\n\t\tPlus,\n\t\tImageMultiple,\n\t\tNcButton,\n\t\tNcListItem,\n\t\tNcLoadingIcon,\n\t\tNcUserBubble,\n\t\tAlbumForm,\n\t},\n\n\tfilters: {\n\t\t/**\n\t\t * @param {string} fileId - The id of the file.\n\t\t * @return {string}\n\t\t */\n\t\ttoCoverUrl(fileId) {\n\t\t\treturn generateUrl(`/apps/photos/api/v1/preview/${fileId}?x=${64}&y=${64}`)\n\t\t},\n\t},\n\n\tmixins: [\n\t\tFetchCollectionsMixin,\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowAlbumCreationForm: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'albums',\n\t\t\t'sharedAlbums',\n\t\t]),\n\n\t\t/**\n\t\t * @return {import('../../store/albums.js').Album[]}\n\t\t */\n\t\tallAlbums() {\n\t\t\treturn [...Object.values(this.albums), ...Object.values(this.sharedAlbums)]\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.fetchAlbumList()\n\t},\n\n\tmethods: {\n\t\tasync fetchAlbumList() {\n\t\t\tawait this.fetchCollections(`/photos/${getCurrentUser()?.uid}/albums`, ['<nc:location />', '<nc:dateRange />', '<nc:collaborators />'])\n\t\t\tawait this.fetchCollections(`/photos/${getCurrentUser()?.uid}/sharedalbums`, ['<nc:location />', '<nc:dateRange />', '<nc:collaborators />'])\n\t\t},\n\n\t\talbumCreatedHandler() {\n\t\t\tthis.showAlbumCreationForm = false\n\t\t\tthis.fetchAlbumList()\n\t\t},\n\n\t\tpickAlbum(album) {\n\t\t\tthis.$emit('album-picked', album)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} album\n\t\t * @return {boolean}\n\t\t */\n\t\tisSharedAlbum(album) {\n\t\t\treturn album.filename.match(/^\\/photos\\/.+\\/sharedalbums\\//) !== null\n\t\t},\n\n\t\t/**\n\t\t * @param {object} album The album's full name, including the userid.\n\t\t * @return {string} The album name without the userId between parentheses.\n\t\t */\n\t\toriginalName(album) {\n\t\t\tif (this.isSharedAlbum(album)) {\n\t\t\t\treturn album.basename.replace(new RegExp(`\\\\(${album.collaborators[0].id}\\\\)$`), '')\n\t\t\t} else {\n\t\t\t\treturn album.basename\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t\tn: translatePlural,\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.album-picker {\n\tpadding: 32px;\n\tpadding-top: 16px;\n\n\th2 {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\theight: 60px;\n\n\t\t.loading-icon {\n\t\t\tmargin-left: 32px;\n\t\t}\n\t}\n\n\t.albums-container {\n\t\tmin-height: 150px;\n\t\tmax-height: 350px;\n\t\toverflow-x: scroll;\n\t\tpadding: 2px;\n\n\t\t.album {\n\n\t\t\t:deep .list-item {\n\t\t\t\tpadding: 8px 16px;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}\n\n\t\t\t&:not(:last-child) {\n\t\t\t\tmargin-bottom: 16px;\n\t\t\t}\n\n\t\t\t&__image {\n\t\t\t\twidth: 40px;\n\t\t\t\theight: 40px;\n\t\t\t\tobject-fit: none;\n\t\t\t\tborder-radius: var(--border-radius);\n\n\t\t\t\t&--placeholder {\n\t\t\t\t\tbackground: var(--color-primary-element-light);\n\n\t\t\t\t\t:deep .material-design-icon {\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\theight: 100%;\n\n\t\t\t\t\t\t.material-design-icon__svg {\n\t\t\t\t\t\t\tfill: var(--color-primary-element);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.new-album-button {\n\t\tmargin-top: 32px;\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!./AlbumPicker.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!./AlbumPicker.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/postcss-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumPicker.vue?vue&type=style&index=0&id=20d6fa8c&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumPicker.vue?vue&type=style&index=0&id=20d6fa8c&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AlbumPicker.vue?vue&type=template&id=20d6fa8c&scoped=true\"\nimport script from \"./AlbumPicker.vue?vue&type=script&lang=js\"\nexport * from \"./AlbumPicker.vue?vue&type=script&lang=js\"\nimport style0 from \"./AlbumPicker.vue?vue&type=style&index=0&id=20d6fa8c&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20d6fa8c\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (!_vm.showAlbumCreationForm)?_c('div',{staticClass:\"album-picker\"},[_c('h2',[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'Add to Album'))+\"\\n\\t\\t\"),(_vm.loadingCollections)?_c('NcLoadingIcon',{staticClass:\"loading-icon\"}):_vm._e()],1),_vm._v(\" \"),_c('ul',{staticClass:\"albums-container\"},_vm._l((_vm.allAlbums),function(album){return _c('NcListItem',{key:album.filename,staticClass:\"album\",attrs:{\"name\":_vm.originalName(album),\"aria-label\":_vm.t('photos', 'Add selection to album {albumName}', {albumName: album.basename})},on:{\"click\":function($event){return _vm.pickAlbum(album)}},scopedSlots:_vm._u([{key:\"subname\",fn:function(){return [_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('photos', '%n item', '%n photos and videos', album.nbItems))+\"\\n\\t\\t\\t\\t\"),(_vm.isSharedAlbum(album))?[_vm._v(\"\\n\\t\\t\\t\\t\\t⸱ \"+_vm._s(_vm.t('photos', 'Shared by'))+\" \"),_c('NcUserBubble',{attrs:{\"display-name\":album.collaborators[0].label,\"user\":album.collaborators[0].id}})]:_vm._e()]},proxy:true}],null,true)},[_c('template',{slot:\"icon\"},[(album.lastPhoto !== -1)?_c('img',{staticClass:\"album__image\",attrs:{\"src\":_vm._f(\"toCoverUrl\")(album.lastPhoto)}}):_c('div',{staticClass:\"album__image album__image--placeholder\"},[_c('ImageMultiple',{attrs:{\"size\":32}})],1)])],2)}),1),_vm._v(\" \"),_c('NcButton',{staticClass:\"new-album-button\",attrs:{\"aria-label\":_vm.t('photos', 'Create a new album.'),\"type\":\"tertiary\"},on:{\"click\":function($event){_vm.showAlbumCreationForm = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('Plus')]},proxy:true}],null,false,1489515321)},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'Create new album'))+\"\\n\\t\")])],1):_c('AlbumForm',{attrs:{\"display-back-button\":true,\"title\":_vm.t('photos', 'New album')},on:{\"back\":function($event){_vm.showAlbumCreationForm = false},\"done\":_vm.albumCreatedHandler}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2022 Louis Chemineau <louis@chmn.me>\n -\n - @author Louis Chemineau <louis@chmn.me>\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<template>\n\t<NcActionLink :close-after-click=\"true\"\n\t\t:href=\"downloadUrl\"\n\t\t:download=\"downloadUrl\"\n\t\t:aria-label=\"title\">\n\t\t{{ title }}\n\t\t<slot slot=\"icon\" name=\"icon\" />\n\t</NcActionLink>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\n\nimport { generateUrl } from '@nextcloud/router'\nimport { NcActionLink } from '@nextcloud/vue'\n\nexport default {\n\tname: 'ActionDownload',\n\n\tcomponents: {\n\t\tNcActionLink,\n\t},\n\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tselectedFileIds: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\n\t\tdownloadUrl() {\n\t\t\tconst params = new URLSearchParams()\n\t\t\tconst filePaths = this.fileNames.map(fileName => '/' + fileName.split('/').splice(3).join('/'))\n\t\t\tparams.append('files', JSON.stringify(filePaths))\n\n\t\t\treturn generateUrl(`/apps/files/ajax/download.php?${params}`)\n\t\t},\n\n\t\tfileNames() {\n\t\t\treturn this.selectedFileIds.map(fileId => this.files[fileId].filename)\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!./ActionDownload.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!./ActionDownload.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ActionDownload.vue?vue&type=template&id=c26f867a\"\nimport script from \"./ActionDownload.vue?vue&type=script&lang=js\"\nexport * from \"./ActionDownload.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('NcActionLink',{attrs:{\"close-after-click\":true,\"href\":_vm.downloadUrl,\"download\":_vm.downloadUrl,\"aria-label\":_vm.title}},[_vm._v(\"\\n\\t\"+_vm._s(_vm.title)+\"\\n\\t\"),_vm._t(\"icon\",null,{\"slot\":\"icon\"})],2)\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 - @author Corentin Mors <medias@pixelswap.fr>\n - @author Louis Chemineau <louis@chmn.me>\n -\n - @license AGPL-3.0-or-later\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<!-- Errors handlers -->\n\t<div v-if=\"errorFetchingFiles\" class=\"timeline__empty-content\">\n\t\t<NcEmptyContent v-if=\"errorFetchingFiles === 404\" :name=\"t('photos', 'One of the source folders does not exists')\">\n\t\t\t<FolderAlertOutline slot=\"icon\" />\n\t\t\t<PhotosSourceLocationsSettings slot=\"action\" class=\"timeline__update_source_directory\" />\n\t\t</NcEmptyContent>\n\t\t<NcEmptyContent v-else :name=\"t('photos', 'An error occurred')\">\n\t\t\t<AlertCircle slot=\"icon\" />\n\t\t</NcEmptyContent>\n\t</div>\n\n\t<div v-else class=\"timeline\">\n\t\t<!-- Header -->\n\t\t<HeaderNavigation key=\"navigation\"\n\t\t\t:loading=\"loadingCount > 0\"\n\t\t\t:path=\"'/'\"\n\t\t\t:title=\"rootTitle\"\n\t\t\t:root-title=\"rootTitle\"\n\t\t\t@refresh=\"resetFetchFilesState\">\n\t\t\t<div class=\"timeline__header__left\">\n\t\t\t\t<!-- TODO: UploadPicker -->\n\t\t\t\t<NcActions v-if=\"selectedFileIds.length === 0\"\n\t\t\t\t\tref=\"addActions\"\n\t\t\t\t\t:force-menu=\"true\"\n\t\t\t\t\t:menu-name=\"t('photos', 'Add')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Plus />\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Create new album')\"\n\t\t\t\t\t\t@click=\"showAlbumCreationForm = true\">\n\t\t\t\t\t\t{{ t('photos', 'Create new album') }}\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<PlusBoxMultiple />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<template v-else>\n\t\t\t\t\t<NcButton :close-after-click=\"true\"\n\t\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Add to album')\"\n\t\t\t\t\t\t@click=\"showAlbumPicker = true\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Plus />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-if=\"!isMobile\" #default>\n\t\t\t\t\t\t\t{{ t('photos', 'Add to album') }}\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\n\t\t\t\t\t<NcButton v-if=\"selectedFileIds.length > 0\"\n\t\t\t\t\t\t:aria-label=\"t('photos', 'Unselect all')\"\n\t\t\t\t\t\t@click=\"resetSelection\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Close />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template v-if=\"!isMobile\" #default>\n\t\t\t\t\t\t\t{{ t('photos', 'Unselect all') }}\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\n\t\t\t\t\t<NcActions :aria-label=\"t('photos', 'Open actions menu')\">\n\t\t\t\t\t\t<ActionDownload :selected-file-ids=\"selectedFileIds\" :title=\"t('photos', 'Download selected files')\">\n\t\t\t\t\t\t\t<Download slot=\"icon\" />\n\t\t\t\t\t\t</ActionDownload>\n\n\t\t\t\t\t\t<ActionFavorite :selected-file-ids=\"selectedFileIds\" />\n\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('photos', 'Delete selection')\"\n\t\t\t\t\t\t\t@click=\"deleteSelection\">\n\t\t\t\t\t\t\t{{ t('photos', 'Delete selection') }}\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<Delete />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</NcActions>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</HeaderNavigation>\n\n\t\t<FilesListViewer ref=\"filesListViewer\"\n\t\t\t:container-element=\"appContent\"\n\t\t\tclass=\"timeline__file-list\"\n\t\t\t:file-ids-by-section=\"fileIdsByMonth\"\n\t\t\t:sections=\"monthsList\"\n\t\t\t:loading=\"loadingFiles\"\n\t\t\t:base-height=\"isMobile ? 120 : 200\"\n\t\t\t:empty-message=\"t('photos', 'No photos or videos in here')\"\n\t\t\t@need-content=\"getContent\">\n\t\t\t<template slot-scope=\"{file, isHeader, distance}\">\n\t\t\t\t<h2 v-if=\"isHeader\"\n\t\t\t\t\t:id=\"`file-picker-section-header-${file.id}`\"\n\t\t\t\t\tclass=\"section-header\">\n\t\t\t\t\t<b>{{ file.id | dateMonth }}</b>\n\t\t\t\t\t{{ file.id | dateYear }}\n\t\t\t\t</h2>\n\t\t\t\t<File v-else\n\t\t\t\t\t:file=\"files[file.id]\"\n\t\t\t\t\t:allow-selection=\"true\"\n\t\t\t\t\t:selected=\"selection[file.id] === true\"\n\t\t\t\t\t:distance=\"distance\"\n\t\t\t\t\t@click=\"openViewer\"\n\t\t\t\t\t@select-toggled=\"onFileSelectToggle\" />\n\t\t\t</template>\n\t\t</FilesListViewer>\n\n\t\t<NcModal v-if=\"showAlbumCreationForm\"\n\t\t\tkey=\"albumCreationForm\"\n\t\t\t:set-return-focus=\"$refs.addActions?.$refs.menuButton?.$el\"\n\t\t\t@close=\"showAlbumCreationForm = false\">\n\t\t\t<h2 class=\"timeline__heading\">\n\t\t\t\t{{ t('photos', 'New album') }}\n\t\t\t</h2>\n\t\t\t<AlbumForm @done=\"showAlbumCreationForm = false\" />\n\t\t</NcModal>\n\n\t\t<NcModal v-if=\"showAlbumPicker\"\n\t\t\tkey=\"albumPicker\"\n\t\t\t@close=\"showAlbumPicker = false\">\n\t\t\t<AlbumPicker @album-picked=\"addSelectionToAlbum\" />\n\t\t</NcModal>\n\t</div>\n</template>\n\n<script>\nimport { mapActions, mapGetters } from 'vuex'\nimport FolderAlertOutline from 'vue-material-design-icons/FolderAlertOutline.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\nimport Delete from 'vue-material-design-icons/Delete.vue'\nimport PlusBoxMultiple from 'vue-material-design-icons/PlusBoxMultiple.vue'\nimport Download from 'vue-material-design-icons/Download.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\nimport AlertCircle from 'vue-material-design-icons/AlertCircle.vue'\n\nimport { NcModal, NcActions, NcActionButton, NcButton, NcEmptyContent, isMobile } from '@nextcloud/vue'\nimport moment from '@nextcloud/moment'\nimport { translate } from '@nextcloud/l10n'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\n\nimport { allMimes } from '../services/AllowedMimes.js'\nimport FetchFilesMixin from '../mixins/FetchFilesMixin.js'\nimport FilesByMonthMixin from '../mixins/FilesByMonthMixin.js'\nimport FilesSelectionMixin from '../mixins/FilesSelectionMixin.js'\nimport FilesListViewer from '../components/FilesListViewer.vue'\nimport File from '../components/File.vue'\nimport AlbumForm from '../components/Albums/AlbumForm.vue'\nimport AlbumPicker from '../components/Albums/AlbumPicker.vue'\nimport ActionFavorite from '../components/Actions/ActionFavorite.vue'\nimport ActionDownload from '../components/Actions/ActionDownload.vue'\nimport HeaderNavigation from '../components/HeaderNavigation.vue'\nimport PhotosSourceLocationsSettings from '../components/Settings/PhotosSourceLocationsSettings.vue'\nimport { configChangedEvent } from '../store/userConfig.js'\n\nexport default {\n\tname: 'Timeline',\n\tcomponents: {\n\t\tDelete,\n\t\tPlusBoxMultiple,\n\t\tDownload,\n\t\tClose,\n\t\tPlus,\n\t\tFolderAlertOutline,\n\t\tNcEmptyContent,\n\t\tNcModal,\n\t\tNcActions,\n\t\tNcActionButton,\n\t\tNcButton,\n\t\tAlbumForm,\n\t\tAlbumPicker,\n\t\tFilesListViewer,\n\t\tFile,\n\t\tActionFavorite,\n\t\tActionDownload,\n\t\tHeaderNavigation,\n\t\tPhotosSourceLocationsSettings,\n\t\tAlertCircle,\n\t},\n\n\tfilters: {\n\t\t/**\n\t\t * @param {string} date - In the following format: YYYYMM\n\t\t */\n\t\tdateMonth(date) {\n\t\t\treturn moment(date, 'YYYYMM').format('MMMM')\n\t\t},\n\t\t/**\n\t\t * @param {string} date - In the following format: YYYYMM\n\t\t */\n\t\tdateYear(date) {\n\t\t\treturn moment(date, 'YYYYMM').format('YYYY')\n\t\t},\n\t},\n\n\tmixins: [\n\t\tFetchFilesMixin,\n\t\tFilesSelectionMixin,\n\t\tFilesByMonthMixin,\n\t\tisMobile,\n\t],\n\n\tbeforeRouteLeave(to, from, next) {\n\t\twindow.scrollTo(0, 0)\n\t\tnext()\n\t},\n\n\tprops: {\n\t\tonlyFavorites: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tmimesType: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => allMimes,\n\t\t},\n\t\tonThisDay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\trootTitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tloadingCount: 0,\n\t\t\tshowAlbumCreationForm: false,\n\t\t\tshowAlbumPicker: false,\n\t\t\tappContent: document.getElementById('app-content-vue'),\n\t\t}\n\t},\n\n\tmounted() {\n\t\tsubscribe(configChangedEvent, this.handleUserConfigChange)\n\t},\n\n\tdestroyed() {\n\t\tunsubscribe(configChangedEvent, this.handleUserConfigChange)\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'files',\n\t\t]),\n\t},\n\n\tmethods: {\n\t\t...mapActions([\n\t\t\t'deleteFiles',\n\t\t\t'addFilesToCollection',\n\t\t]),\n\n\t\tgetContent() {\n\t\t\tthis.fetchFiles({\n\t\t\t\tmimesType: this.mimesType,\n\t\t\t\tonThisDay: this.onThisDay,\n\t\t\t\tonlyFavorites: this.onlyFavorites,\n\t\t\t})\n\t\t},\n\n\t\topenViewer(fileId) {\n\t\t\tconst file = this.files[fileId]\n\t\t\tOCA.Viewer.open({\n\t\t\t\tfileInfo: file,\n\t\t\t\tlist: Object.values(this.fileIdsByMonth).flat().map(fileId => this.files[fileId]),\n\t\t\t\tloadMore: file.loadMore ? async () => await file.loadMore(true) : () => [],\n\t\t\t\tcanLoop: file.canLoop,\n\t\t\t})\n\t\t},\n\n\t\topenUploader() {\n\t\t\t// TODO: finish when implementing upload\n\t\t},\n\n\t\tasync addSelectionToAlbum(album) {\n\t\t\tthis.showAlbumPicker = false\n\t\t\tawait this.addFilesToCollection({ collectionFileName: album.filename, fileIdsToAdd: this.selectedFileIds })\n\t\t},\n\n\t\tasync deleteSelection() {\n\t\t\t// Need to store the file ids so it is not changed before the deleteFiles call.\n\t\t\tconst fileIds = this.selectedFileIds\n\t\t\tthis.onUncheckFiles(fileIds)\n\t\t\tthis.fetchedFileIds = this.fetchedFileIds.filter(fileid => !fileIds.includes(fileid))\n\t\t\tawait this.deleteFiles(fileIds)\n\t\t},\n\n\t\thandleUserConfigChange({ key }) {\n\t\t\tif (key === 'photosSourceFolders') {\n\t\t\t\tthis.resetFetchFilesState()\n\t\t\t}\n\t\t},\n\n\t\tt: translate,\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.timeline {\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__empty-content {\n\t\theight: 100%;\n\n\t\t.empty-content {\n\t\t\theight: 100%;\n\t\t}\n\n\t\t.timeline__update_source_directory {\n\t\t\talign-items: center;\n\n\t\t\t:deep(.folder) {\n\t\t\t\tmin-width: unset;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__header {\n\t\t&__left {\n\t\t\tdisplay: flex;\n\t\t\tgap: 4px;\n\t\t}\n\t}\n\n\t&__heading {\n\t\tpadding: calc(var(--default-grid-baseline) * 4);\n\t\tmargin-bottom: 0px;\n\t\tpadding-bottom: 0px;\n\t}\n\n\t&__file-list {\n\t\tpadding: 0 64px;\n\n\t\t@media only screen and (max-width: 1200px) {\n\t\t\tpadding: 0 4px;\n\t\t}\n\n\t\t:deep .files-list-viewer__section-header {\n\t\t\ttop: var(--photos-navigation-height);\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!./Timeline.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!./Timeline.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/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=2068ca0a&prod&lang=scss&scoped=true\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2.use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Timeline.vue?vue&type=style&index=0&id=2068ca0a&prod&lang=scss&scoped=true\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Timeline.vue?vue&type=template&id=2068ca0a&scoped=true\"\nimport script from \"./Timeline.vue?vue&type=script&lang=js\"\nexport * from \"./Timeline.vue?vue&type=script&lang=js\"\nimport style0 from \"./Timeline.vue?vue&type=style&index=0&id=2068ca0a&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2068ca0a\",\n null\n \n)\n\nexport default component.exports"],"names":["name","data","errorFetchingCollections","loadingCollections","mixins","AbortControllerMixin","methods","mapActions","async","collectionHome","extraProps","client","this","collections","fetchCollections","signal","abortController","addCollections","error","_error$response","response","status","errorFetchingFiles","loadingFiles","doneFetchingFiles","fetchSemaphore","SemaphoreWithPriority","fetchedFileIds","watch","resetFetchFilesState","options","arguments","length","undefined","blacklist","force","fetchSemaphoreSymbol","acquire","numberOfImagesPerBatch","fetchedFiles","firstResult","nbResults","mimesType","allMimes","onThisDay","onlyFavorites","orMime","reduce","str","mime","concat","eqFavorites","Array","fill","map","_","years","start","moment","Date","now","startOf","subtract","end","endOf","add","format","join","sourceFolders","store","folder","joinPaths","davRootPath","Object","assign","method","headers","props","deep","details","genFileInfo","getPhotos","fileIds","file","fileid","filter","fileId","includes","toString","push","$store","dispatch","logger","sources","source","_error$response2","_error$response2$data","match","davGetClient","createDirectory","code","release","computed","fileIdsByMonth","filesByMonth","files","_filesByMonth$file$mo","month","keys","forEach","sort","sortFilesByTimestamp","monthsList","month1","month2","fileId1","fileId2","timestamp","___CSS_LOADER_EXPORT___","module","id","emits","title","type","String","fillColor","default","size","Number","_vm","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","components","Star","NcActionButton","selectedFileIds","required","mapGetters","shouldFavoriteSelection","some","favorite","toggleFavoriteForFiles","favoriteState","t","favoriteSelection","slot","unFavoriteSelection","defineComponent","NcButton","Folder","Close","path","canDelete","Boolean","rootFolderLabel","rootFolderIcon","folderName","split","pop","subname","_this$path$match","splice","emitRemoveSourceFolder","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_setupProxy","tag","scopedSlots","_u","key","fn","proxy","PhotosFolder","Plus","FolderMultiple","photosSourceFolders","state","userConfig","debounceAddSourceFolder","debounce","addSourceFolder","openFilePicker","getFilePickerBuilder","setMultiSelect","setModal","setType","addMimeTypeFilter","allowDirectories","build","pick","pickedFolder","value","removeSourceFolder","index","folders","_l","ImageMultiple","NcListItem","NcLoadingIcon","NcUserBubble","AlbumForm","filters","toCoverUrl","generateUrl","FetchCollectionsMixin","showAlbumCreationForm","allAlbums","values","albums","sharedAlbums","mounted","fetchAlbumList","_getCurrentUser","_getCurrentUser2","getCurrentUser","uid","albumCreatedHandler","pickAlbum","album","isSharedAlbum","filename","originalName","basename","replace","RegExp","collaborators","translate","n","translatePlural","albumName","nbItems","label","lastPhoto","_f","NcActionLink","downloadUrl","params","URLSearchParams","filePaths","fileNames","fileName","append","JSON","stringify","_t","Delete","PlusBoxMultiple","Download","FolderAlertOutline","NcEmptyContent","NcModal","NcActions","AlbumPicker","FilesListViewer","File","ActionFavorite","ActionDownload","HeaderNavigation","PhotosSourceLocationsSettings","AlertCircle","dateMonth","date","dateYear","FetchFilesMixin","FilesSelectionMixin","FilesByMonthMixin","isMobile","beforeRouteLeave","to","from","next","window","scrollTo","rootTitle","loadingCount","showAlbumPicker","appContent","document","getElementById","subscribe","configChangedEvent","handleUserConfigChange","destroyed","unsubscribe","getContent","fetchFiles","openViewer","OCA","Viewer","open","fileInfo","list","flat","loadMore","canLoop","openUploader","addFilesToCollection","collectionFileName","fileIdsToAdd","onUncheckFiles","deleteFiles","_ref","_vm$$refs$addActions","_vm$$refs$addActions$","ref","resetSelection","deleteSelection","isHeader","distance","selection","onFileSelectToggle","$refs","addActions","menuButton","$el","addSelectionToAlbum"],"sourceRoot":""}