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

1 line
123 KiB
XML
Raw 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":""}