\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', \"There is no album yet!\") }}\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{ t('photos', \"Add\") }}\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t
\n\n\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.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!./Albums.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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=style&index=0&id=3c63727a&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=style&index=0&id=3c63727a&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Albums.vue?vue&type=template&id=3c63727a&scoped=true&\"\nimport script from \"./Albums.vue?vue&type=script&lang=js&\"\nexport * from \"./Albums.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Albums.vue?vue&type=style&index=0&id=3c63727a&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 \"3c63727a\",\n null\n \n)\n\nexport default component.exports"],"names":["name","data","abortController","AbortController","beforeDestroy","this","abort","beforeRouteLeave","from","to","next","___CSS_LOADER_EXPORT___","push","module","id","emits","props","title","type","String","fillColor","default","size","Number","_vm","_h","$createElement","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","baseName","album","lastPhoto","coverUrl","altImg","date","n","nbItems","class","isRoot","folderUp","scopedSlots","_u","key","fn","proxy","refresh","$slots","_t","useWindow","containerElement","ref","style","visibleRows","t","loadingAlbums","onRefresh","showAlbumCreationForm","noAlbums","_l","basename","handleAlbumCreated"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js b/js/photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js
deleted file mode 100644
index 053c4d816..000000000
--- a/js/photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js
+++ /dev/null
@@ -1,583 +0,0 @@
-"use strict";
-(self["webpackChunkphotos"] = self["webpackChunkphotos"] || []).push([["src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue"],{
-
-/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=script&lang=js&":
-/*!**************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=script&lang=js& ***!
- \**************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! debounce */ "./node_modules/debounce/index.js");
-/* harmony import */ var debounce__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(debounce__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _services_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/logger.js */ "./src/services/logger.js");
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-
-
-/**
- * @typedef {object} Row
- * @property {number} height - The height of the row.
- */
-
-/**
- * @typedef {Row} VisibleRow
- * @property {'none'|'near'|'visible'} visibility - The visibility state of the row
- * @property {boolean} shouldRender - Whether the row should be renderer in the DOM
- */
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'VirtualScrolling',
- props: {
- rows: {
- type: Array,
- required: true
- },
- containerElement: {
- type: HTMLElement,
- default: null
- },
- useWindow: {
- type: Boolean,
- default: false
- },
- renderWindowRatio: {
- type: Number,
- default: 4
- },
- willBeVisibleWindowRatio: {
- type: Number,
- default: 4
- },
- visibleWindowRatio: {
- type: Number,
- // A little bit more than the container's height to include items at its edges.
- default: 0
- },
- bottomBufferRatio: {
- type: Number,
- default: 5
- },
- scrollToKey: {
- type: String,
- default: ''
- }
- },
-
- data() {
- return {
- scrollPosition: 0,
- containerHeight: 0,
- rowsContainerHeight: 0,
-
- /** @type {ResizeObserver} */
- resizeObserver: null
- };
- },
-
- computed: {
- /**
- * @return {VisibleRow[]}
- */
- visibleRows() {
- _services_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].debug('[VirtualScrolling] Computing visible rows', this.rows); // Optimisation: get those computed properties once to not go through vue's internal every time we need them.
-
- const scrollPosition = this.scrollPosition;
- const containerHeight = this.containerHeight; // Optimisation: different windows to hint the items how they should render themselves.
- // This will be forwarded with the visibility props.
-
- const shouldRenderedWindow = containerHeight * this.renderWindowRatio;
- const willBeVisibleWindow = containerHeight * this.willBeVisibleWindowRatio;
- const visibleWindow = containerHeight * this.visibleWindowRatio;
- let currentRowTopDistanceFromTop = 0;
- let currentRowBottomDistanceFromTop = 0; // Compute whether a row should be included in the DOM (shouldRender)
- // And how visible the row is.
-
- return this.rows.reduce((visibleRows, row) => {
- currentRowTopDistanceFromTop = currentRowBottomDistanceFromTop;
- currentRowBottomDistanceFromTop += row.height;
-
- if (currentRowTopDistanceFromTop < scrollPosition - shouldRenderedWindow || scrollPosition + containerHeight + shouldRenderedWindow < currentRowTopDistanceFromTop) {
- return visibleRows;
- }
-
- let visibility = 'none';
-
- if (scrollPosition - willBeVisibleWindow < currentRowTopDistanceFromTop && currentRowTopDistanceFromTop < scrollPosition + containerHeight + willBeVisibleWindow) {
- visibility = 'near';
-
- if (scrollPosition - visibleWindow < currentRowTopDistanceFromTop && currentRowTopDistanceFromTop < scrollPosition + containerHeight + visibleWindow) {
- visibility = 'visible';
- }
-
- if (scrollPosition - visibleWindow < currentRowBottomDistanceFromTop && currentRowBottomDistanceFromTop < scrollPosition + containerHeight + visibleWindow) {
- visibility = 'visible';
- }
- }
-
- return [...visibleRows, { ...row,
- visibility
- }];
- }, []);
- },
-
- /**
- * Total height of all the rows + some room for the loader.
- *
- * @return {number}
- */
- rowsHeight() {
- const loaderHeight = 200;
- return this.rows.map(row => row.height).reduce((totalHeight, rowHeight) => totalHeight + rowHeight, 0) + loaderHeight;
- },
-
- /**
- * @return {number}
- */
- paddingTop() {
- if (this.visibleRows.length === 0) {
- return 0;
- }
-
- const firstVisibleRowIndex = this.rows.findIndex(row => row.items === this.visibleRows[0].items);
- return this.rows.map(row => row.height).slice(0, firstVisibleRowIndex).reduce((totalHeight, rowHeight) => totalHeight + rowHeight, 0);
- },
-
- /**
- * padding-top is used to replace not included item in the container.
- *
- * @return {object}
- */
- rowsContainerStyle() {
- return {
- height: `${this.rowsHeight}px`,
- paddingTop: `${this.paddingTop}px`
- };
- },
-
- /**
- * Whether the user is near the bottom.
- * If true, then the need-content event will be emitted.
- *
- * @return {boolean}
- */
- isNearBottom() {
- const buffer = this.containerHeight * this.bottomBufferRatio;
- return this.scrollPosition + this.containerHeight >= this.rowsHeight - buffer;
- },
-
- /**
- * @return {HTMLElement}
- */
- container() {
- _services_logger_js__WEBPACK_IMPORTED_MODULE_1__["default"].debug('[VirtualScrolling] Computing container');
-
- if (this.containerElement !== null) {
- return this.containerElement;
- } else if (this.useWindow) {
- return window;
- } else {
- return this.$refs.container;
- }
- }
-
- },
- watch: {
- isNearBottom(value) {
- if (value) {
- this.$emit('need-content');
- }
- },
-
- rows() {
- // Re-emit need-content when rows is updated and isNearBottom is still true.
- // If the height of added rows is under `bottomBufferRatio`, `isNearBottom` will still be true so we need more content.
- if (this.isNearBottom) {
- this.$emit('need-content');
- }
- },
-
- scrollToKey(key) {
- let currentRowTopDistanceFromTop = 0;
-
- for (const row of this.rows) {
- if (row.key === key) {
- this.$refs.container.scrollTo({
- top: currentRowTopDistanceFromTop,
- behavior: 'smooth'
- });
- return;
- }
-
- currentRowTopDistanceFromTop += row.height;
- }
- }
-
- },
-
- mounted() {
- this.resizeObserver = new ResizeObserver(entries => {
- for (const entry of entries) {
- const cr = entry.contentRect;
-
- if (entry.target === this.container) {
- this.containerHeight = cr.height;
- }
-
- if (entry.target.classList.contains('vs-rows-container')) {
- this.rowsContainerHeight = cr.height;
- }
- }
- });
-
- if (this.useWindow) {
- window.addEventListener('resize', this.updateContainerSize);
- this.containerHeight = window.innerHeight;
- } else {
- this.resizeObserver.observe(this.container);
- }
-
- this.resizeObserver.observe(this.$refs.rowsContainer);
- this.container.addEventListener('scroll', this.updateScrollPosition);
- },
-
- beforeDestroy() {
- if (this.useWindow) {
- window.removeEventListener('resize', this.updateContainerSize);
- }
-
- this.resizeObserver.disconnect();
- this.container.removeEventListener('scroll', this.updateScrollPosition);
- },
-
- methods: {
- updateScrollPosition: (0,debounce__WEBPACK_IMPORTED_MODULE_0__.debounce)(function () {
- if (this.useWindow) {
- this.scrollPosition = this.container.scrollY;
- } else {
- this.scrollPosition = this.container.scrollTop;
- }
- }, 200),
-
- updateContainerSize() {
- this.containerHeight = window.innerHeight;
- }
-
- }
-});
-
-/***/ }),
-
-/***/ "./src/mixins/AbortControllerMixin.js":
-/*!********************************************!*\
- !*** ./src/mixins/AbortControllerMixin.js ***!
- \********************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * @copyright Copyright (c) 2022 Louis Chemineau
- *
- * @author Louis Chemineau
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'AbortControllerMixin',
-
- data() {
- return {
- abortController: new AbortController()
- };
- },
-
- beforeDestroy() {
- this.abortController.abort();
- },
-
- beforeRouteLeave(from, to, next) {
- this.abortController.abort();
- this.abortController = new AbortController();
- next();
- }
-
-});
-
-/***/ }),
-
-/***/ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&":
-/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss& ***!
- \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
-// Imports
-
-
-var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
-// Module
-___CSS_LOADER_EXPORT___.push([module.id, ".vs-container[data-v-3d9f7b4c] {\n overflow-y: scroll;\n height: 100%;\n}\n.vs-rows-container[data-v-3d9f7b4c] {\n box-sizing: border-box;\n}", ""]);
-// Exports
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
-
-
-/***/ }),
-
-/***/ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&":
-/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss& ***!
- \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_style_index_0_id_3d9f7b4c_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss& */ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&");
-
-
-
-
-
-
-
-
-
-
-
-var options = {};
-
-options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
-options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
-
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
-
-options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
-options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
-
-var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_style_index_0_id_3d9f7b4c_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"], options);
-
-
-
-
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_style_index_0_id_3d9f7b4c_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"] && _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_style_index_0_id_3d9f7b4c_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_style_index_0_id_3d9f7b4c_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
-
-
-/***/ }),
-
-/***/ "./src/components/VirtualScrolling.vue":
-/*!*********************************************!*\
- !*** ./src/components/VirtualScrolling.vue ***!
- \*********************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _VirtualScrolling_vue_vue_type_template_id_3d9f7b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true& */ "./src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&");
-/* harmony import */ var _VirtualScrolling_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VirtualScrolling.vue?vue&type=script&lang=js& */ "./src/components/VirtualScrolling.vue?vue&type=script&lang=js&");
-/* harmony import */ var _VirtualScrolling_vue_vue_type_style_index_0_id_3d9f7b4c_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss& */ "./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&");
-/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
-
-
-
-;
-
-
-/* normalize component */
-
-var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
- _VirtualScrolling_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
- _VirtualScrolling_vue_vue_type_template_id_3d9f7b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
- _VirtualScrolling_vue_vue_type_template_id_3d9f7b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
- false,
- null,
- "3d9f7b4c",
- null
-
-)
-
-/* hot reload */
-if (false) { var api; }
-component.options.__file = "src/components/VirtualScrolling.vue"
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
-
-/***/ }),
-
-/***/ "./src/components/VirtualScrolling.vue?vue&type=script&lang=js&":
-/*!**********************************************************************!*\
- !*** ./src/components/VirtualScrolling.vue?vue&type=script&lang=js& ***!
- \**********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=script&lang=js&");
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&":
-/*!*******************************************************************************************************!*\
- !*** ./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss& ***!
- \*******************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _node_modules_style_loader_dist_cjs_js_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_style_index_0_id_3d9f7b4c_scoped_true_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/style-loader/dist/cjs.js!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss& */ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&");
-
-
-/***/ }),
-
-/***/ "./src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&":
-/*!****************************************************************************************!*\
- !*** ./src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true& ***!
- \****************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_template_id_3d9f7b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
-/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_template_id_3d9f7b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
-/* harmony export */ });
-/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_VirtualScrolling_vue_vue_type_template_id_3d9f7b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&");
-
-
-/***/ }),
-
-/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&":
-/*!*******************************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true& ***!
- \*******************************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* binding */ render),
-/* harmony export */ "staticRenderFns": () => (/* binding */ staticRenderFns)
-/* harmony export */ });
-var render = function () {
- var _vm = this
- var _h = _vm.$createElement
- var _c = _vm._self._c || _h
- return !_vm.useWindow && _vm.containerElement === null
- ? _c("div", { ref: "container", staticClass: "vs-container" }, [
- _c(
- "div",
- {
- ref: "rowsContainer",
- staticClass: "vs-rows-container",
- style: _vm.rowsContainerStyle,
- },
- [
- _vm._t("default", null, { renderedRows: _vm.visibleRows }),
- _vm._v(" "),
- _vm._t("loader"),
- ],
- 2
- ),
- ])
- : _c(
- "div",
- {
- ref: "rowsContainer",
- staticClass: "vs-rows-container",
- style: _vm.rowsContainerStyle,
- },
- [
- _vm._t("default", null, { renderedRows: _vm.visibleRows }),
- _vm._v(" "),
- _vm._t("loader"),
- ],
- 2
- )
-}
-var staticRenderFns = []
-render._withStripped = true
-
-
-
-/***/ })
-
-}]);
-//# sourceMappingURL=photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js.map?v=16fa9a9802b33c9dd642
\ No newline at end of file
diff --git a/js/photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js.map b/js/photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js.map
deleted file mode 100644
index 56f03e2b9..000000000
--- a/js/photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"photos-src_mixins_AbortControllerMixin_js-src_components_VirtualScrolling_vue.js?v=16fa9a9802b33c9dd642","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AClSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///photos/src/components/VirtualScrolling.vue?vue&type=script&lang=js&","webpack:///photos/src/mixins/AbortControllerMixin.js","webpack:///photos/src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&","webpack://photos/./src/components/VirtualScrolling.vue?38b9","webpack:///photos/src/components/VirtualScrolling.vue","webpack://photos/./src/components/VirtualScrolling.vue?de60","webpack://photos/./src/components/VirtualScrolling.vue?7351","webpack:///photos/src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&","webpack://photos/./src/components/VirtualScrolling.vue?74e7"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { debounce } from 'debounce';\nimport logger from '../services/logger.js';\n/**\n * @typedef {object} Row\n * @property {number} height - The height of the row.\n */\n\n/**\n * @typedef {Row} VisibleRow\n * @property {'none'|'near'|'visible'} visibility - The visibility state of the row\n * @property {boolean} shouldRender - Whether the row should be renderer in the DOM\n */\n\nexport default {\n name: 'VirtualScrolling',\n props: {\n rows: {\n type: Array,\n required: true\n },\n containerElement: {\n type: HTMLElement,\n default: null\n },\n useWindow: {\n type: Boolean,\n default: false\n },\n renderWindowRatio: {\n type: Number,\n default: 4\n },\n willBeVisibleWindowRatio: {\n type: Number,\n default: 4\n },\n visibleWindowRatio: {\n type: Number,\n // A little bit more than the container's height to include items at its edges.\n default: 0\n },\n bottomBufferRatio: {\n type: Number,\n default: 5\n },\n scrollToKey: {\n type: String,\n default: ''\n }\n },\n\n data() {\n return {\n scrollPosition: 0,\n containerHeight: 0,\n rowsContainerHeight: 0,\n\n /** @type {ResizeObserver} */\n resizeObserver: null\n };\n },\n\n computed: {\n /**\n * @return {VisibleRow[]}\n */\n visibleRows() {\n logger.debug('[VirtualScrolling] Computing visible rows', this.rows); // Optimisation: get those computed properties once to not go through vue's internal every time we need them.\n\n const scrollPosition = this.scrollPosition;\n const containerHeight = this.containerHeight; // Optimisation: different windows to hint the items how they should render themselves.\n // This will be forwarded with the visibility props.\n\n const shouldRenderedWindow = containerHeight * this.renderWindowRatio;\n const willBeVisibleWindow = containerHeight * this.willBeVisibleWindowRatio;\n const visibleWindow = containerHeight * this.visibleWindowRatio;\n let currentRowTopDistanceFromTop = 0;\n let currentRowBottomDistanceFromTop = 0; // Compute whether a row should be included in the DOM (shouldRender)\n // And how visible the row is.\n\n return this.rows.reduce((visibleRows, row) => {\n currentRowTopDistanceFromTop = currentRowBottomDistanceFromTop;\n currentRowBottomDistanceFromTop += row.height;\n\n if (currentRowTopDistanceFromTop < scrollPosition - shouldRenderedWindow || scrollPosition + containerHeight + shouldRenderedWindow < currentRowTopDistanceFromTop) {\n return visibleRows;\n }\n\n let visibility = 'none';\n\n if (scrollPosition - willBeVisibleWindow < currentRowTopDistanceFromTop && currentRowTopDistanceFromTop < scrollPosition + containerHeight + willBeVisibleWindow) {\n visibility = 'near';\n\n if (scrollPosition - visibleWindow < currentRowTopDistanceFromTop && currentRowTopDistanceFromTop < scrollPosition + containerHeight + visibleWindow) {\n visibility = 'visible';\n }\n\n if (scrollPosition - visibleWindow < currentRowBottomDistanceFromTop && currentRowBottomDistanceFromTop < scrollPosition + containerHeight + visibleWindow) {\n visibility = 'visible';\n }\n }\n\n return [...visibleRows, { ...row,\n visibility\n }];\n }, []);\n },\n\n /**\n * Total height of all the rows + some room for the loader.\n *\n * @return {number}\n */\n rowsHeight() {\n const loaderHeight = 200;\n return this.rows.map(row => row.height).reduce((totalHeight, rowHeight) => totalHeight + rowHeight, 0) + loaderHeight;\n },\n\n /**\n * @return {number}\n */\n paddingTop() {\n if (this.visibleRows.length === 0) {\n return 0;\n }\n\n const firstVisibleRowIndex = this.rows.findIndex(row => row.items === this.visibleRows[0].items);\n return this.rows.map(row => row.height).slice(0, firstVisibleRowIndex).reduce((totalHeight, rowHeight) => totalHeight + rowHeight, 0);\n },\n\n /**\n * padding-top is used to replace not included item in the container.\n *\n * @return {object}\n */\n rowsContainerStyle() {\n return {\n height: `${this.rowsHeight}px`,\n paddingTop: `${this.paddingTop}px`\n };\n },\n\n /**\n * Whether the user is near the bottom.\n * If true, then the need-content event will be emitted.\n *\n * @return {boolean}\n */\n isNearBottom() {\n const buffer = this.containerHeight * this.bottomBufferRatio;\n return this.scrollPosition + this.containerHeight >= this.rowsHeight - buffer;\n },\n\n /**\n * @return {HTMLElement}\n */\n container() {\n logger.debug('[VirtualScrolling] Computing container');\n\n if (this.containerElement !== null) {\n return this.containerElement;\n } else if (this.useWindow) {\n return window;\n } else {\n return this.$refs.container;\n }\n }\n\n },\n watch: {\n isNearBottom(value) {\n if (value) {\n this.$emit('need-content');\n }\n },\n\n rows() {\n // Re-emit need-content when rows is updated and isNearBottom is still true.\n // If the height of added rows is under `bottomBufferRatio`, `isNearBottom` will still be true so we need more content.\n if (this.isNearBottom) {\n this.$emit('need-content');\n }\n },\n\n scrollToKey(key) {\n let currentRowTopDistanceFromTop = 0;\n\n for (const row of this.rows) {\n if (row.key === key) {\n this.$refs.container.scrollTo({\n top: currentRowTopDistanceFromTop,\n behavior: 'smooth'\n });\n return;\n }\n\n currentRowTopDistanceFromTop += row.height;\n }\n }\n\n },\n\n mounted() {\n this.resizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n const cr = entry.contentRect;\n\n if (entry.target === this.container) {\n this.containerHeight = cr.height;\n }\n\n if (entry.target.classList.contains('vs-rows-container')) {\n this.rowsContainerHeight = cr.height;\n }\n }\n });\n\n if (this.useWindow) {\n window.addEventListener('resize', this.updateContainerSize);\n this.containerHeight = window.innerHeight;\n } else {\n this.resizeObserver.observe(this.container);\n }\n\n this.resizeObserver.observe(this.$refs.rowsContainer);\n this.container.addEventListener('scroll', this.updateScrollPosition);\n },\n\n beforeDestroy() {\n if (this.useWindow) {\n window.removeEventListener('resize', this.updateContainerSize);\n }\n\n this.resizeObserver.disconnect();\n this.container.removeEventListener('scroll', this.updateScrollPosition);\n },\n\n methods: {\n updateScrollPosition: debounce(function () {\n if (this.useWindow) {\n this.scrollPosition = this.container.scrollY;\n } else {\n this.scrollPosition = this.container.scrollTop;\n }\n }, 200),\n\n updateContainerSize() {\n this.containerHeight = window.innerHeight;\n }\n\n }\n};","/**\n * @copyright Copyright (c) 2022 Louis Chemineau \n *\n * @author Louis Chemineau \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 .\n *\n */\nexport default {\n name: 'AbortControllerMixin',\n\n data() {\n return {\n abortController: new AbortController()\n };\n },\n\n beforeDestroy() {\n this.abortController.abort();\n },\n\n beforeRouteLeave(from, to, next) {\n this.abortController.abort();\n this.abortController = new AbortController();\n next();\n }\n\n};","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.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_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".vs-container[data-v-3d9f7b4c] {\\n overflow-y: scroll;\\n height: 100%;\\n}\\n.vs-rows-container[data-v-3d9f7b4c] {\\n box-sizing: border-box;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&\"\nimport script from \"./VirtualScrolling.vue?vue&type=script&lang=js&\"\nexport * from \"./VirtualScrolling.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d9f7b4c\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/louis/workspace/nextcloud/apps/photos/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('3d9f7b4c')) {\n api.createRecord('3d9f7b4c', component.options)\n } else {\n api.reload('3d9f7b4c', component.options)\n }\n module.hot.accept(\"./VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&\", function () {\n api.rerender('3d9f7b4c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/VirtualScrolling.vue\"\nexport default component.exports","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.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!./VirtualScrolling.vue?vue&type=script&lang=js&\"","export * from \"-!../../node_modules/style-loader/dist/cjs.js!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&\"","export * from \"-!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&\"","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return !_vm.useWindow && _vm.containerElement === null\n ? _c(\"div\", { ref: \"container\", staticClass: \"vs-container\" }, [\n _c(\n \"div\",\n {\n ref: \"rowsContainer\",\n staticClass: \"vs-rows-container\",\n style: _vm.rowsContainerStyle,\n },\n [\n _vm._t(\"default\", null, { renderedRows: _vm.visibleRows }),\n _vm._v(\" \"),\n _vm._t(\"loader\"),\n ],\n 2\n ),\n ])\n : _c(\n \"div\",\n {\n ref: \"rowsContainer\",\n staticClass: \"vs-rows-container\",\n style: _vm.rowsContainerStyle,\n },\n [\n _vm._t(\"default\", null, { renderedRows: _vm.visibleRows }),\n _vm._v(\" \"),\n _vm._t(\"loader\"),\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js b/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js
deleted file mode 100644
index ce0e6ba98..000000000
--- a/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! For license information please see photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.LICENSE.txt */
-"use strict";(self.webpackChunkphotos=self.webpackChunkphotos||[]).push([["src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue"],{69363:(t,n,e)=>{e.d(n,{Z:()=>i});const i={name:"CancelRequestMixin",data:function(){return{abortController:new AbortController}},beforeDestroy:function(){this.abortController.abort()},beforeRouteLeave:function(){this.abortController.abort(),this.abortController=new AbortController}}},2161:(t,n,e)=>{e.d(n,{N:()=>i,Z:()=>o});var i="\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t";const o='\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t'.concat(i,"\n\t\t\t\t\n\t\t\t")},84496:(t,n,e)=>{e.d(n,{Z:()=>A});var i=e(87537),o=e.n(i),a=e(23645),r=e.n(a)()(o());r.push([t.id,'.file-container[data-v-67e992e4]{background:var(--color-primary-light);position:relative;height:100%;width:100%;border:2px solid var(--color-main-background);box-sizing:border-box}.file-container.selected[data-v-67e992e4]::after,.file-container[data-v-67e992e4]:focus-within::after{position:absolute;top:0;left:0;z-index:2;width:100%;height:100%;content:"";outline:var(--color-primary) solid 4px;outline-offset:-4px;pointer-events:none}.file-container .file[data-v-67e992e4]{width:100%;height:100%;box-sizing:border-box;outline:none}.file-container .file__images[data-v-67e992e4]{display:contents}.file-container .file__images .video-icon[data-v-67e992e4]{position:absolute;top:0px;right:0px;width:100%;height:100%;z-index:1;opacity:.8}.file-container .file__images .video-icon[data-v-67e992e4] .material-design-icon__svg{fill:var(--color-main-background)}.file-container .file__images img[data-v-67e992e4]{width:100%;height:100%;object-fit:cover;position:absolute;color:rgba(0,0,0,0)}.file-container .file__images .loading-overlay[data-v-67e992e4]{position:absolute;height:100%;width:100%;display:flex;align-content:center;align-items:center;justify-content:center}.file-container .file__images .loading-overlay svg[data-v-67e992e4]{width:70%;height:70%}.file-container .file__hidden-description[data-v-67e992e4]{position:absolute;left:-10000px;top:-10000px;width:1px;height:1px;overflow:hidden}.file-container .file__hidden-description.show[data-v-67e992e4]{position:initial;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.file-container:hover .selection-checkbox[data-v-67e992e4],.file-container.selected .selection-checkbox[data-v-67e992e4],.file-container:focus-within .selection-checkbox[data-v-67e992e4]{display:flex}.file-container:hover .favorite-state[data-v-67e992e4],.file-container.selected .favorite-state[data-v-67e992e4],.file-container:focus-within .favorite-state[data-v-67e992e4]{display:none}.file-container .selection-checkbox[data-v-67e992e4]{display:none;position:absolute;top:8px;right:min(22px,50% - 7px);z-index:1;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.file-container .selection-checkbox[data-v-67e992e4] .checkbox-radio-switch__label{padding:10px;box-sizing:border-box}.file-container .selection-checkbox[data-v-67e992e4] .checkbox-radio-switch__label::after{content:"";background:var(--color-primary-light);width:16px;height:16px;position:absolute;left:1px;z-index:-1}.file-container .selection-checkbox[data-v-67e992e4] .checkbox-radio-switch__label .checkbox-radio-switch__icon{margin:0}.file-container .selection-checkbox .input-label[data-v-67e992e4]{position:fixed;z-index:-1;top:-5000px;left:-5000px}.file-container .favorite-state[data-v-67e992e4]{position:absolute;top:2px;right:min(2px,50% - 7px)}.file-container .favorite-state[data-v-67e992e4] .material-design-icon__svg{fill:#fc0}.file-container .favorite-state[data-v-67e992e4] .material-design-icon__svg path{stroke:var(--color-primary-light);stroke-width:1px}',"",{version:3,sources:["webpack://./src/components/File.vue"],names:[],mappings:"AAiOA,iCACC,qCAAA,CACA,iBAAA,CACA,WAAA,CACA,UAAA,CACA,6CAAA,CACA,qBAAA,CAIC,sGACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,SAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,sCAAA,CACA,mBAAA,CACA,mBAAA,CAIF,uCACC,UAAA,CACA,WAAA,CACA,qBAAA,CACA,YAAA,CAEA,+CACC,gBAAA,CAEA,2DACC,iBAAA,CACA,OAAA,CACA,SAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CACA,UAAA,CAEA,uFACC,iCAAA,CAIF,mDACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,mBAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,UAAA,CACA,YAAA,CACA,oBAAA,CACA,kBAAA,CACA,sBAAA,CAEA,oEACC,SAAA,CACA,UAAA,CAKH,2DACC,iBAAA,CACA,aAAA,CACA,YAAA,CACA,SAAA,CACA,UAAA,CACA,eAAA,CAEA,gEACC,gBAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CACA,0BAAA,CAAA,uBAAA,CAAA,kBAAA,CAOF,2LACC,YAAA,CAGD,+KACC,YAAA,CAIF,qDACC,YAAA,CACA,iBAAA,CACA,OAAA,CAEA,yBAAA,CACA,SAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CAGA,oFACC,YAAA,CACA,qBAAA,CAGA,2FACC,UAAA,CACA,qCAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,QAAA,CACA,UAAA,CAGD,iHACC,QAAA,CAIF,kEACC,cAAA,CACA,UAAA,CACA,WAAA,CACA,YAAA,CAIF,iDACC,iBAAA,CACA,OAAA,CAEA,wBAAA,CAEA,6EACC,SAAA,CAEA,kFACC,iCAAA,CACA,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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.file-container {\n\tbackground: var(--color-primary-light);\n\tposition: relative;\n\theight: 100%;\n\twidth: 100%;\n\tborder: 2px solid var(--color-main-background); // Use border so create a separation between images.\n\tbox-sizing: border-box;\n\n\t// Selection border.\n\t&.selected, &:focus-within {\n\t\t&::after {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tz-index: 2;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tcontent: \'\';\n\t\t\toutline: var(--color-primary) solid 4px;\n\t\t\toutline-offset: -4px;\n\t\t\tpointer-events: none;\n\t\t}\n\t}\n\n\t.file {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbox-sizing: border-box;\n\t\toutline: none; // Override global focus state.\n\n\t\t&__images {\n\t\t\tdisplay: contents;\n\n\t\t\t.video-icon {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0px;\n\t\t\t\tright: 0px;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tz-index: 1;\n\t\t\t\topacity: 0.8;\n\n\t\t\t\t::v-deep .material-design-icon__svg {\n\t\t\t\t\tfill: var(--color-main-background);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\timg {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tobject-fit: cover;\n\t\t\t\tposition: absolute;\n\t\t\t\tcolor: transparent; /// Hide alt=\'\' text when loading.\n\t\t\t}\n\n\t\t\t.loading-overlay {\n\t\t\t\tposition: absolute;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 100%;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-content: center;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\n\t\t\t\tsvg {\n\t\t\t\t\twidth: 70%;\n\t\t\t\t\theight: 70%;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__hidden-description {\n\t\t\tposition: absolute;\n\t\t\tleft: -10000px;\n\t\t\ttop: -10000px;\n\t\t\twidth: 1px;\n\t\t\theight: 1px;\n\t\t\toverflow: hidden;\n\n\t\t\t&.show {\n\t\t\t\tposition: initial;\n\t\t\t\twidth: fit-content;\n\t\t\t\theight: fit-content;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Reveal checkbox on hover.\n\t&:hover, &.selected, &:focus-within {\n\t\t.selection-checkbox {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t.favorite-state {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t.selection-checkbox {\n\t\tdisplay: none;\n\t\tposition: absolute;\n\t\ttop: 8px;\n\t\t// Fancy calculation to render the checkbox in the middle of narrow images.\n\t\tright: min(22px, calc(50% - 7px));\n\t\tz-index: 1;\n\t\twidth: fit-content;\n\n\t\t// Make the checkbox background round on hover.\n\t\t::v-deep .checkbox-radio-switch__label {\n\t\t\tpadding: 10px;\n\t\t\tbox-sizing: border-box;\n\n\t\t\t// Add a background to the checkbox so we do not see the image through it.\n\t\t\t&::after {\n\t\t\t\tcontent: \'\';\n\t\t\t\tbackground: var(--color-primary-light);\n\t\t\t\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 1px;\n\t\t\t\tz-index: -1;\n\t\t\t}\n\n\t\t\t.checkbox-radio-switch__icon {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t.input-label {\n\t\t\tposition: fixed;\n\t\t\tz-index: -1;\n\t\t\ttop: -5000px;\n\t\t\tleft: -5000px;\n\t\t}\n\t}\n\n\t.favorite-state {\n\t\tposition: absolute;\n\t\ttop: 2px;\n\t\t// Fancy calculation to render the start in the middle of narrow images.\n\t\tright: min(2px, calc(50% - 7px));\n\n\t\t::v-deep .material-design-icon__svg {\n\t\t\tfill: #FC0;\n\n\t\t\tpath {\n\t\t\t\tstroke: var(--color-primary-light);\n\t\t\t\tstroke-width: 1px;\n\t\t\t}\n\t\t}\n\t}\n}\n'],sourceRoot:""}]);const A=r},53932:(n,e,i)=>{i.d(e,{Z:()=>z});var o=i(75760),a=i(16235),r=i(79753),A=i(45994),s=i(33476),c=i(81090),l=i(32114);function d(t,n,e,i,o,a,r){try{var A=t[a](r),s=A.value}catch(t){return void e(t)}A.done?n(s):Promise.resolve(s).then(i,o)}function h(t){return function(){var n=this,e=arguments;return new Promise((function(i,o){var a=t.apply(n,e);function r(t){d(a,i,o,r,A,"next",t)}function A(t){d(a,i,o,r,A,"throw",t)}r(void 0)}))}}const C={name:"File",components:{CheckboxRadioSwitch:s.CheckboxRadioSwitch,Star:o.default,VideoIcon:a.Z},mixins:[c.Z],inheritAttrs:!1,props:{file:{type:Object,required:!0},selected:{type:Boolean,required:!0},allowSelection:{type:Boolean,default:!0},visibility:{type:String,required:!0},semaphore:{type:l.Z,required:!0}},data:function(){return{loaded:!1,error:!1,canLoad:!1,semaphoreSymbol:null,isDestroyed:!1}},computed:{davPath:function(){return(0,r.generateRemoteUrl)("dav/files/".concat((0,A.ts)().uid))+this.file.filename},ariaDescription:function(){return"image-description-".concat(this.file.fileid)},ariaLabel:function(){return t("photos",'Open the full size "{name}" image',{name:this.file.basename})},isImage:function(){return this.file.mime.startsWith("image")},decodedEtag:function(){return this.file.etag.replace(""","").replace(""","")},srcVisible:function(){return this.getItemURL(512)},srcNear:function(){return this.getItemURL(64)}},mounted:function(){var t=this;setTimeout(h(regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,t.semaphore.acquire((function(){switch(t.visibility){case"visible":return 1;case"near":return 2;default:return 3}}),t.file.fileid);case 2:t.semaphoreSymbol=n.sent,t.canLoad=!0,("none"===t.visibility||t.isDestroyed)&&t.releaseSemaphore();case 5:case"end":return n.stop()}}),n)}))),250)},beforeDestroy:function(){this.isDestroyed=!0,this.releaseSemaphore(),void 0!==this.$refs.imgNear&&(this.$refs.imgNear.src=""),void 0!==this.$refs.srcVisible&&(this.$refs.srcVisible.src="")},methods:{emitClick:function(){this.$emit("click",this.file.fileid)},onLoad:function(){this.loaded=!0,this.releaseSemaphore()},onError:function(){this.error=!0,this.releaseSemaphore()},onToggle:function(t){this.$emit("select-toggled",{id:this.file.fileid,value:t})},getItemURL:function(t){return(0,r.generateUrl)("/core/preview?fileId=".concat(this.file.fileid,"&c=").concat(this.decodedEtag,"&x=").concat(t,"&y=").concat(t,"&forceIcon=0&a=1"))},releaseSemaphore:function(){null!==this.semaphoreSymbol&&(this.semaphore.release(this.semaphoreSymbol),this.semaphoreSymbol=null)}}};var p=i(93379),f=i.n(p),g=i(7795),u=i.n(g),m=i(90569),b=i.n(m),v=i(3565),x=i.n(v),w=i(19216),_=i.n(w),y=i(44589),k=i.n(y),B=i(84496),S={};S.styleTagTransform=k(),S.setAttributes=x(),S.insert=b().bind(null,"head"),S.domAPI=u(),S.insertStyleElement=_();f()(B.Z,S);B.Z&&B.Z.locals&&B.Z.locals;const z=(0,i(51900).Z)(C,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"file-container",class:{selected:t.selected}},[e("a",{staticClass:"file",attrs:{href:t.davPath,"aria-label":t.ariaLabel},on:{click:function(n){return n.preventDefault(),t.emitClick.apply(null,arguments)}}},[e("div",{staticClass:"file__images"},[t.file.mime.includes("video")?e("VideoIcon",{staticClass:"video-icon",attrs:{size:64}}):t._e(),t._v(" "),"none"!==t.visibility&&t.canLoad&&!t.error?e("img",{key:t.file.basename+"-near",ref:"imgNear",attrs:{src:t.srcNear,alt:t.file.basename,"aria-describedby":t.ariaDescription},on:{load:t.onLoad,error:t.onError}}):t._e(),t._v(" "),"visible"===t.visibility&&t.canLoad&&!t.error?e("img",{key:t.file.basename+"-visible",ref:"imgVisible",attrs:{src:t.srcVisible,alt:t.file.basename,"aria-describedby":t.ariaDescription},on:{load:t.onLoad,error:t.onError}}):t._e()],1),t._v(" "),e("p",{staticClass:"file__hidden-description",class:{show:t.error},attrs:{id:t.ariaDescription}},[t._v(t._s(t.file.basename))])]),t._v(" "),t.allowSelection?e("CheckboxRadioSwitch",{staticClass:"selection-checkbox",attrs:{checked:t.selected},on:{"update:checked":t.onToggle}},[e("span",{staticClass:"input-label"},[t._v(t._s(t.t("photos","Select image {imageName}",{imageName:t.file.basename})))])]):t._e(),t._v(" "),1===t.file.favorite?e("Star",{staticClass:"favorite-state",attrs:{"aria-label":t.t("photos","The file is in the favorites")}}):t._e()],1)}),[],!1,null,"67e992e4",null).exports}}]);
-//# sourceMappingURL=photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.map?v=b0acba54c86e78d80a7f
\ No newline at end of file
diff --git a/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.LICENSE.txt b/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.LICENSE.txt
deleted file mode 100644
index 3edd37b78..000000000
--- a/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.LICENSE.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @copyright Copyright (c) 2019 John Molakvoæ
- *
- * @author John Molakvoæ
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
-
-/**
- * @copyright Copyright (c) 2022 Louis Chemineau
- *
- * @author Louis Chemineau
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
diff --git a/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.map b/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.map
deleted file mode 100644
index 7144a2eb3..000000000
--- a/js/photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"photos-src_mixins_AbortControllerMixin_js-src_services_DavRequest_js-src_components_File_vue.js?v=b0acba54c86e78d80a7f","mappings":";qMAsBA,SACCA,KAAM,qBAENC,KAHc,WAIb,MAAO,CACNC,gBAAiB,IAAIC,gBAEtB,EAEDC,cATc,WAUbC,KAAKH,gBAAgBI,OACrB,EAEDC,iBAbc,WAcbF,KAAKH,gBAAgBI,QACrBD,KAAKH,gBAAkB,IAAIC,eAC3B,4CCjBF,IAAMK,EAAQ,yPAcd,QAAe,sPAMRA,EANP,iHChCIC,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,wgGAA6gG,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uCAAuC,MAAQ,GAAG,SAAW,ogCAAogC,eAAiB,CAAC,2sIAAqxI,WAAa,MAEt8Q,4CCPA,6YC+EA,MC/EqK,ED+ErK,CACA,YACA,YACA,0CACA,eACA,eAEA,aACA,gBACA,OACA,MACA,YACA,aAEA,UACA,aACA,aAEA,gBACA,aACA,YAEA,YACA,YACA,aAEA,WACA,SACA,cAIA,KAhCA,WAiCA,OACA,UACA,SACA,WACA,qBACA,eAEA,EAEA,UAEA,QAFA,WAGA,qFACA,EAEA,gBANA,WAOA,mDACA,EAEA,UAVA,WAWA,gFACA,EAEA,QAdA,WAeA,yCACA,EAEA,YAlBA,WAmBA,+DACA,EAEA,WAtBA,WAuBA,2BACA,EAEA,QA1BA,WA2BA,0BACA,GAGA,QAzEA,WAyEA,WAEA,mJACA,gCACA,qBACA,cACA,SACA,WACA,SACA,QACA,SAEA,kBAVA,OACA,kBADA,OAYA,cACA,uCACA,qBAdA,2CAgBA,IACA,EAEA,cA9FA,WA+FA,oBACA,6BAGA,yBACA,gCAEA,4BACA,6BAEA,EAEA,SACA,UADA,WAEA,oCACA,EAGA,OANA,WAOA,eACA,uBACA,EAEA,QAXA,WAYA,cACA,uBACA,EAEA,SAhBA,SAgBA,GACA,0DACA,EAEA,WApBA,SAoBA,GACA,2JAEA,EAEA,iBAzBA,WA0BA,8BAGA,6CACA,0BACA,yIE9MIC,EAAU,CAAC,EAEfA,EAAQC,kBAAoB,IAC5BD,EAAQE,cAAgB,IAElBF,EAAQG,OAAS,SAAc,KAAM,QAE3CH,EAAQI,OAAS,IACjBJ,EAAQK,mBAAqB,IAEhB,IAAI,IAASL,GAKJ,KAAW,YAAiB,WCPlD,SAXgB,cACd,GJTW,WAAa,IAAIM,EAAId,KAASe,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,iBAAiBC,MAAM,CAACC,SAAUP,EAAIO,WAAW,CAACJ,EAAG,IAAI,CAACE,YAAY,OAAOG,MAAM,CAAC,KAAOR,EAAIS,QAAQ,aAAaT,EAAIU,WAAWC,GAAG,CAAC,MAAQ,SAASC,GAAgC,OAAxBA,EAAOC,iBAAwBb,EAAIc,UAAUC,MAAM,KAAMC,UAAU,IAAI,CAACb,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAAEL,EAAIiB,KAAKC,KAAKC,SAAS,SAAUhB,EAAG,YAAY,CAACE,YAAY,aAAaG,MAAM,CAAC,KAAO,MAAMR,EAAIoB,KAAKpB,EAAIqB,GAAG,KAAyB,SAAnBrB,EAAIsB,YAAyBtB,EAAIuB,UAAYvB,EAAIwB,MAAOrB,EAAG,MAAM,CAACsB,IAAMzB,EAAIiB,KAAa,SAAI,QAASS,IAAI,UAAUlB,MAAM,CAAC,IAAMR,EAAI2B,QAAQ,IAAM3B,EAAIiB,KAAKW,SAAS,mBAAmB5B,EAAI6B,iBAAiBlB,GAAG,CAAC,KAAOX,EAAI8B,OAAO,MAAQ9B,EAAI+B,WAAW/B,EAAIoB,KAAKpB,EAAIqB,GAAG,KAAyB,YAAnBrB,EAAIsB,YAA4BtB,EAAIuB,UAAYvB,EAAIwB,MAAOrB,EAAG,MAAM,CAACsB,IAAMzB,EAAIiB,KAAa,SAAI,WAAYS,IAAI,aAAalB,MAAM,CAAC,IAAMR,EAAIgC,WAAW,IAAMhC,EAAIiB,KAAKW,SAAS,mBAAmB5B,EAAI6B,iBAAiBlB,GAAG,CAAC,KAAOX,EAAI8B,OAAO,MAAQ9B,EAAI+B,WAAW/B,EAAIoB,MAAM,GAAGpB,EAAIqB,GAAG,KAAKlB,EAAG,IAAI,CAACE,YAAY,2BAA2BC,MAAM,CAAC2B,KAAMjC,EAAIwB,OAAOhB,MAAM,CAAC,GAAKR,EAAI6B,kBAAkB,CAAC7B,EAAIqB,GAAGrB,EAAIkC,GAAGlC,EAAIiB,KAAKW,eAAe5B,EAAIqB,GAAG,KAAMrB,EAAkB,eAAEG,EAAG,sBAAsB,CAACE,YAAY,qBAAqBG,MAAM,CAAC,QAAUR,EAAIO,UAAUI,GAAG,CAAC,iBAAiBX,EAAImC,WAAW,CAAChC,EAAG,OAAO,CAACE,YAAY,eAAe,CAACL,EAAIqB,GAAGrB,EAAIkC,GAAGlC,EAAIoC,EAAE,SAAU,2BAA4B,CAACC,UAAWrC,EAAIiB,KAAKW,iBAAiB5B,EAAIoB,KAAKpB,EAAIqB,GAAG,KAA4B,IAAtBrB,EAAIiB,KAAKqB,SAAgBnC,EAAG,OAAO,CAACE,YAAY,iBAAiBG,MAAM,CAAC,aAAaR,EAAIoC,EAAE,SAAU,mCAAmCpC,EAAIoB,MAAM,EAAE,GACpnD,IIWpB,EACA,KACA,WACA,MAI8B","sources":["webpack:///photos/src/mixins/AbortControllerMixin.js","webpack:///photos/src/services/DavRequest.js","webpack:///photos/src/components/File.vue?vue&type=style&index=0&id=67e992e4&lang=scss&scoped=true&","webpack:///photos/src/components/File.vue?vue&type=template&id=67e992e4&scoped=true&","webpack:///photos/src/components/File.vue","webpack:///photos/src/components/File.vue?vue&type=script&lang=js&","webpack://photos/./src/components/File.vue?c765","webpack://photos/./src/components/File.vue?f552"],"sourcesContent":["/**\n * @copyright Copyright (c) 2022 Louis Chemineau \n *\n * @author Louis Chemineau \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 .\n *\n */\n\nexport default {\n\tname: 'CancelRequestMixin',\n\n\tdata() {\n\t\treturn {\n\t\t\tabortController: new AbortController(),\n\t\t}\n\t},\n\n\tbeforeDestroy() {\n\t\tthis.abortController.abort()\n\t},\n\n\tbeforeRouteLeave() {\n\t\tthis.abortController.abort()\n\t\tthis.abortController = new AbortController()\n\t},\n}\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ \n *\n * @author John Molakvoæ \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 .\n *\n */\nconst props = `\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t`\n\nexport { props }\nexport default `\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t${props}\n\t\t\t\t\n\t\t\t`\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, \".file-container[data-v-67e992e4]{background:var(--color-primary-light);position:relative;height:100%;width:100%;border:2px solid var(--color-main-background);box-sizing:border-box}.file-container.selected[data-v-67e992e4]::after,.file-container[data-v-67e992e4]:focus-within::after{position:absolute;top:0;left:0;z-index:2;width:100%;height:100%;content:\\\"\\\";outline:var(--color-primary) solid 4px;outline-offset:-4px;pointer-events:none}.file-container .file[data-v-67e992e4]{width:100%;height:100%;box-sizing:border-box;outline:none}.file-container .file__images[data-v-67e992e4]{display:contents}.file-container .file__images .video-icon[data-v-67e992e4]{position:absolute;top:0px;right:0px;width:100%;height:100%;z-index:1;opacity:.8}.file-container .file__images .video-icon[data-v-67e992e4] .material-design-icon__svg{fill:var(--color-main-background)}.file-container .file__images img[data-v-67e992e4]{width:100%;height:100%;object-fit:cover;position:absolute;color:rgba(0,0,0,0)}.file-container .file__images .loading-overlay[data-v-67e992e4]{position:absolute;height:100%;width:100%;display:flex;align-content:center;align-items:center;justify-content:center}.file-container .file__images .loading-overlay svg[data-v-67e992e4]{width:70%;height:70%}.file-container .file__hidden-description[data-v-67e992e4]{position:absolute;left:-10000px;top:-10000px;width:1px;height:1px;overflow:hidden}.file-container .file__hidden-description.show[data-v-67e992e4]{position:initial;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.file-container:hover .selection-checkbox[data-v-67e992e4],.file-container.selected .selection-checkbox[data-v-67e992e4],.file-container:focus-within .selection-checkbox[data-v-67e992e4]{display:flex}.file-container:hover .favorite-state[data-v-67e992e4],.file-container.selected .favorite-state[data-v-67e992e4],.file-container:focus-within .favorite-state[data-v-67e992e4]{display:none}.file-container .selection-checkbox[data-v-67e992e4]{display:none;position:absolute;top:8px;right:min(22px,50% - 7px);z-index:1;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.file-container .selection-checkbox[data-v-67e992e4] .checkbox-radio-switch__label{padding:10px;box-sizing:border-box}.file-container .selection-checkbox[data-v-67e992e4] .checkbox-radio-switch__label::after{content:\\\"\\\";background:var(--color-primary-light);width:16px;height:16px;position:absolute;left:1px;z-index:-1}.file-container .selection-checkbox[data-v-67e992e4] .checkbox-radio-switch__label .checkbox-radio-switch__icon{margin:0}.file-container .selection-checkbox .input-label[data-v-67e992e4]{position:fixed;z-index:-1;top:-5000px;left:-5000px}.file-container .favorite-state[data-v-67e992e4]{position:absolute;top:2px;right:min(2px,50% - 7px)}.file-container .favorite-state[data-v-67e992e4] .material-design-icon__svg{fill:#fc0}.file-container .favorite-state[data-v-67e992e4] .material-design-icon__svg path{stroke:var(--color-primary-light);stroke-width:1px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/File.vue\"],\"names\":[],\"mappings\":\"AAiOA,iCACC,qCAAA,CACA,iBAAA,CACA,WAAA,CACA,UAAA,CACA,6CAAA,CACA,qBAAA,CAIC,sGACC,iBAAA,CACA,KAAA,CACA,MAAA,CACA,SAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CACA,sCAAA,CACA,mBAAA,CACA,mBAAA,CAIF,uCACC,UAAA,CACA,WAAA,CACA,qBAAA,CACA,YAAA,CAEA,+CACC,gBAAA,CAEA,2DACC,iBAAA,CACA,OAAA,CACA,SAAA,CACA,UAAA,CACA,WAAA,CACA,SAAA,CACA,UAAA,CAEA,uFACC,iCAAA,CAIF,mDACC,UAAA,CACA,WAAA,CACA,gBAAA,CACA,iBAAA,CACA,mBAAA,CAGD,gEACC,iBAAA,CACA,WAAA,CACA,UAAA,CACA,YAAA,CACA,oBAAA,CACA,kBAAA,CACA,sBAAA,CAEA,oEACC,SAAA,CACA,UAAA,CAKH,2DACC,iBAAA,CACA,aAAA,CACA,YAAA,CACA,SAAA,CACA,UAAA,CACA,eAAA,CAEA,gEACC,gBAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CACA,0BAAA,CAAA,uBAAA,CAAA,kBAAA,CAOF,2LACC,YAAA,CAGD,+KACC,YAAA,CAIF,qDACC,YAAA,CACA,iBAAA,CACA,OAAA,CAEA,yBAAA,CACA,SAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CAGA,oFACC,YAAA,CACA,qBAAA,CAGA,2FACC,UAAA,CACA,qCAAA,CACA,UAAA,CACA,WAAA,CACA,iBAAA,CACA,QAAA,CACA,UAAA,CAGD,iHACC,QAAA,CAIF,kEACC,cAAA,CACA,UAAA,CACA,WAAA,CACA,YAAA,CAIF,iDACC,iBAAA,CACA,OAAA,CAEA,wBAAA,CAEA,6EACC,SAAA,CAEA,kFACC,iCAAA,CACA,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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.file-container {\\n\\tbackground: var(--color-primary-light);\\n\\tposition: relative;\\n\\theight: 100%;\\n\\twidth: 100%;\\n\\tborder: 2px solid var(--color-main-background); // Use border so create a separation between images.\\n\\tbox-sizing: border-box;\\n\\n\\t// Selection border.\\n\\t&.selected, &:focus-within {\\n\\t\\t&::after {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttop: 0;\\n\\t\\t\\tleft: 0;\\n\\t\\t\\tz-index: 2;\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\theight: 100%;\\n\\t\\t\\tcontent: '';\\n\\t\\t\\toutline: var(--color-primary) solid 4px;\\n\\t\\t\\toutline-offset: -4px;\\n\\t\\t\\tpointer-events: none;\\n\\t\\t}\\n\\t}\\n\\n\\t.file {\\n\\t\\twidth: 100%;\\n\\t\\theight: 100%;\\n\\t\\tbox-sizing: border-box;\\n\\t\\toutline: none; // Override global focus state.\\n\\n\\t\\t&__images {\\n\\t\\t\\tdisplay: contents;\\n\\n\\t\\t\\t.video-icon {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: 0px;\\n\\t\\t\\t\\tright: 0px;\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\theight: 100%;\\n\\t\\t\\t\\tz-index: 1;\\n\\t\\t\\t\\topacity: 0.8;\\n\\n\\t\\t\\t\\t::v-deep .material-design-icon__svg {\\n\\t\\t\\t\\t\\tfill: var(--color-main-background);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\n\\t\\t\\timg {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\theight: 100%;\\n\\t\\t\\t\\tobject-fit: cover;\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tcolor: transparent; /// Hide alt='' text when loading.\\n\\t\\t\\t}\\n\\n\\t\\t\\t.loading-overlay {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\theight: 100%;\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\talign-content: center;\\n\\t\\t\\t\\talign-items: center;\\n\\t\\t\\t\\tjustify-content: center;\\n\\n\\t\\t\\t\\tsvg {\\n\\t\\t\\t\\t\\twidth: 70%;\\n\\t\\t\\t\\t\\theight: 70%;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__hidden-description {\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tleft: -10000px;\\n\\t\\t\\ttop: -10000px;\\n\\t\\t\\twidth: 1px;\\n\\t\\t\\theight: 1px;\\n\\t\\t\\toverflow: hidden;\\n\\n\\t\\t\\t&.show {\\n\\t\\t\\t\\tposition: initial;\\n\\t\\t\\t\\twidth: fit-content;\\n\\t\\t\\t\\theight: fit-content;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// Reveal checkbox on hover.\\n\\t&:hover, &.selected, &:focus-within {\\n\\t\\t.selection-checkbox {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\n\\t\\t.favorite-state {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n\\n\\t.selection-checkbox {\\n\\t\\tdisplay: none;\\n\\t\\tposition: absolute;\\n\\t\\ttop: 8px;\\n\\t\\t// Fancy calculation to render the checkbox in the middle of narrow images.\\n\\t\\tright: min(22px, calc(50% - 7px));\\n\\t\\tz-index: 1;\\n\\t\\twidth: fit-content;\\n\\n\\t\\t// Make the checkbox background round on hover.\\n\\t\\t::v-deep .checkbox-radio-switch__label {\\n\\t\\t\\tpadding: 10px;\\n\\t\\t\\tbox-sizing: border-box;\\n\\n\\t\\t\\t// Add a background to the checkbox so we do not see the image through it.\\n\\t\\t\\t&::after {\\n\\t\\t\\t\\tcontent: '';\\n\\t\\t\\t\\tbackground: var(--color-primary-light);\\n\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\tleft: 1px;\\n\\t\\t\\t\\tz-index: -1;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.checkbox-radio-switch__icon {\\n\\t\\t\\t\\tmargin: 0;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t.input-label {\\n\\t\\t\\tposition: fixed;\\n\\t\\t\\tz-index: -1;\\n\\t\\t\\ttop: -5000px;\\n\\t\\t\\tleft: -5000px;\\n\\t\\t}\\n\\t}\\n\\n\\t.favorite-state {\\n\\t\\tposition: absolute;\\n\\t\\ttop: 2px;\\n\\t\\t// Fancy calculation to render the start in the middle of narrow images.\\n\\t\\tright: min(2px, calc(50% - 7px));\\n\\n\\t\\t::v-deep .material-design-icon__svg {\\n\\t\\t\\tfill: #FC0;\\n\\n\\t\\t\\tpath {\\n\\t\\t\\t\\tstroke: var(--color-primary-light);\\n\\t\\t\\t\\tstroke-width: 1px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"file-container\",class:{selected: _vm.selected}},[_c('a',{staticClass:\"file\",attrs:{\"href\":_vm.davPath,\"aria-label\":_vm.ariaLabel},on:{\"click\":function($event){$event.preventDefault();return _vm.emitClick.apply(null, arguments)}}},[_c('div',{staticClass:\"file__images\"},[(_vm.file.mime.includes('video'))?_c('VideoIcon',{staticClass:\"video-icon\",attrs:{\"size\":64}}):_vm._e(),_vm._v(\" \"),(_vm.visibility !== 'none' && _vm.canLoad && !_vm.error)?_c('img',{key:((_vm.file.basename) + \"-near\"),ref:\"imgNear\",attrs:{\"src\":_vm.srcNear,\"alt\":_vm.file.basename,\"aria-describedby\":_vm.ariaDescription},on:{\"load\":_vm.onLoad,\"error\":_vm.onError}}):_vm._e(),_vm._v(\" \"),(_vm.visibility === 'visible' && _vm.canLoad && !_vm.error)?_c('img',{key:((_vm.file.basename) + \"-visible\"),ref:\"imgVisible\",attrs:{\"src\":_vm.srcVisible,\"alt\":_vm.file.basename,\"aria-describedby\":_vm.ariaDescription},on:{\"load\":_vm.onLoad,\"error\":_vm.onError}}):_vm._e()],1),_vm._v(\" \"),_c('p',{staticClass:\"file__hidden-description\",class:{show: _vm.error},attrs:{\"id\":_vm.ariaDescription}},[_vm._v(_vm._s(_vm.file.basename))])]),_vm._v(\" \"),(_vm.allowSelection)?_c('CheckboxRadioSwitch',{staticClass:\"selection-checkbox\",attrs:{\"checked\":_vm.selected},on:{\"update:checked\":_vm.onToggle}},[_c('span',{staticClass:\"input-label\"},[_vm._v(_vm._s(_vm.t('photos', 'Select image {imageName}', {imageName: _vm.file.basename})))])]):_vm._e(),_vm._v(\" \"),(_vm.file.favorite === 1)?_c('Star',{staticClass:\"favorite-state\",attrs:{\"aria-label\":_vm.t('photos', 'The file is in the favorites')}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', \"There is no album yet!\") }}\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{ t('photos', \"Add\") }}\n\t\t\t\n\t\t
\n\n\t\t
\n\t\t\t\n\t\t
\n\n\t\t\n\t\t\t\n\t\t\n\t
\n\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.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!./Albums.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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=style&index=0&id=3d2da984&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=style&index=0&id=3d2da984&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Albums.vue?vue&type=template&id=3d2da984&scoped=true&\"\nimport script from \"./Albums.vue?vue&type=script&lang=js&\"\nexport * from \"./Albums.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Albums.vue?vue&type=style&index=0&id=3d2da984&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 \"3d2da984\",\n null\n \n)\n\nexport default component.exports"],"names":["name","data","abortController","AbortController","beforeDestroy","this","abort","beforeRouteLeave","from","to","next","___CSS_LOADER_EXPORT___","push","module","id","emits","props","title","type","String","fillColor","default","size","Number","_vm","_h","$createElement","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","class","isRoot","folderUp","scopedSlots","_u","key","fn","proxy","refresh","$slots","_t","baseName","album","lastPhoto","coverUrl","altImg","date","n","nbItems","t","loadingAlbums","onRefresh","showAlbumCreationForm","noAlbums","_l","basename","handleAlbumCreated"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js b/js/photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js
deleted file mode 100644
index ae60f2b77..000000000
--- a/js/photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js
+++ /dev/null
@@ -1,818 +0,0 @@
-"use strict";
-(self["webpackChunkphotos"] = self["webpackChunkphotos"] || []).push([["src_mixins_AbortControllerMixin_js-src_views_Faces_vue"],{
-
-/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=script&lang=js&":
-/*!*******************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=script&lang=js& ***!
- \*******************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
-/* harmony import */ var _nextcloud_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/router */ "./node_modules/@nextcloud/router/dist/index.js");
-/* harmony import */ var _mixins_FetchFacesMixin_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mixins/FetchFacesMixin.js */ "./src/mixins/FetchFacesMixin.js");
-/* harmony import */ var _mixins_FaceCoverMixin_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../mixins/FaceCoverMixin.js */ "./src/mixins/FaceCoverMixin.js");
-function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
-
-function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
-
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-
-
-
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'FaceCover',
- mixins: [_mixins_FetchFacesMixin_js__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_FaceCoverMixin_js__WEBPACK_IMPORTED_MODULE_2__["default"]],
- props: {
- baseName: {
- type: String,
- required: true
- }
- },
- computed: _objectSpread(_objectSpread({}, (0,vuex__WEBPACK_IMPORTED_MODULE_3__.mapGetters)(['files', 'faces', 'facesFiles'])), {}, {
- /**
- * @return {Face}
- */
- face: function face() {
- return this.faces[this.baseName];
- },
-
- /**
- * @return {string}
- */
- coverUrl: function coverUrl() {
- if (!this.cover) {
- return '';
- }
-
- return (0,_nextcloud_router__WEBPACK_IMPORTED_MODULE_0__.generateUrl)("/apps/photos/api/v1/preview/".concat(this.cover.fileid, "?x=", 512, "&y=", 512));
- },
- cover: function cover() {
- return this.getFaceCover(this.face.basename);
- },
- coverDimensions: function coverDimensions() {
- if (!this.cover) return {};
- return this.getCoverStyle(this.face.basename);
- }
- }),
- beforeMount: function beforeMount() {
- var _this = this;
-
- return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- _context.next = 2;
- return _this.fetchFiles();
-
- case 2:
- case "end":
- return _context.stop();
- }
- }
- }, _callee);
- }))();
- },
- methods: {
- fetchFiles: function fetchFiles() {
- var _this2 = this;
-
- return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
- while (1) {
- switch (_context2.prev = _context2.next) {
- case 0:
- _context2.next = 2;
- return _this2.fetchFaceContent(_this2.face.basename);
-
- case 2:
- case "end":
- return _context2.stop();
- }
- }
- }, _callee2);
- }))();
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=script&lang=js&":
-/*!**********************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=script&lang=js& ***!
- \**********************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var vue_material_design_icons_AccountBoxMultipleOutline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-material-design-icons/AccountBoxMultipleOutline */ "./node_modules/vue-material-design-icons/AccountBoxMultipleOutline.vue");
-/* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/vue */ "./node_modules/@nextcloud/vue/dist/ncvuecomponents.js");
-/* harmony import */ var _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _mixins_FetchFacesMixin_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../mixins/FetchFacesMixin.js */ "./src/mixins/FetchFacesMixin.js");
-/* harmony import */ var _components_FaceCover_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/FaceCover.vue */ "./src/components/FaceCover.vue");
-/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-
-
-
-
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'Faces',
- components: {
- FaceCover: _components_FaceCover_vue__WEBPACK_IMPORTED_MODULE_3__["default"],
- NcEmptyContent: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcEmptyContent,
- NcLoadingIcon: _nextcloud_vue__WEBPACK_IMPORTED_MODULE_1__.NcLoadingIcon,
- AccountBoxMultipleOutline: vue_material_design_icons_AccountBoxMultipleOutline__WEBPACK_IMPORTED_MODULE_0__["default"]
- },
- mixins: [_mixins_FetchFacesMixin_js__WEBPACK_IMPORTED_MODULE_2__["default"]],
- computed: _objectSpread(_objectSpread({}, (0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapGetters)(['facesFiles'])), {}, {
- /**
- * @return {boolean} Whether the list of face is empty or not.
- */
- noFaces: function noFaces() {
- return Object.keys(this.faces).length === 0;
- },
- orderedFaces: function orderedFaces() {
- var _this = this;
-
- return Object.values(this.faces).sort(function (a, b) {
- if (!_this.facesFiles[b.basename] || !_this.facesFiles[a.basename]) {
- return 0;
- }
-
- return _this.facesFiles[b.basename].length - _this.facesFiles[a.basename].length;
- });
- }
- })
-});
-
-/***/ }),
-
-/***/ "./src/mixins/AbortControllerMixin.js":
-/*!********************************************!*\
- !*** ./src/mixins/AbortControllerMixin.js ***!
- \********************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * @copyright Copyright (c) 2022 Louis Chemineau
- *
- * @author Louis Chemineau
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'AbortControllerMixin',
- data: function data() {
- return {
- abortController: new AbortController()
- };
- },
- beforeDestroy: function beforeDestroy() {
- this.abortController.abort();
- },
- beforeRouteLeave: function beforeRouteLeave(from, to, next) {
- this.abortController.abort();
- this.abortController = new AbortController();
- next();
- }
-});
-
-/***/ }),
-
-/***/ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&":
-/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true& ***!
- \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
-// Imports
-
-
-var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
-// Module
-___CSS_LOADER_EXPORT___.push([module.id, ".face-cover[data-v-acc68b4c] {\n display: flex;\n flex-direction: column;\n padding: 10px;\n border-radius: var(--border-radius-large);\n}\n.face-cover__crop-container[data-v-acc68b4c] {\n overflow: hidden;\n width: 250px;\n height: 250px;\n border-radius: 250px;\n position: relative;\n background: var(--color-background-darker);\n --photos-face-width: 250px;\n}\n@media only screen and (max-width: 1020px) {\n.face-cover__crop-container[data-v-acc68b4c] {\n width: 95px;\n height: 95px;\n --photos-face-width: 95px;\n}\n}\n.face-cover[data-v-acc68b4c]:hover, .face-cover[data-v-acc68b4c]:focus {\n background: var(--color-background-hover);\n}\n.face-cover__details[data-v-acc68b4c] {\n display: flex;\n flex-direction: column;\n width: 250px;\n margin-top: 4px;\n text-align: center;\n}\n@media only screen and (max-width: 1020px) {\n.face-cover__details[data-v-acc68b4c] {\n width: 95px;\n}\n}\n.face-cover__details__first-line[data-v-acc68b4c] {\n display: flex;\n height: 2em;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.face-cover__details__second-line[data-v-acc68b4c] {\n margin-top: 6px;\n color: var(--color-text-maxcontrast);\n}\n.face-cover__details__name[data-v-acc68b4c] {\n flex-grow: 1;\n margin: 0;\n}", ""]);
-// Exports
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
-
-
-/***/ }),
-
-/***/ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&":
-/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true& ***!
- \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
-// Imports
-
-
-var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
-// Module
-___CSS_LOADER_EXPORT___.push([module.id, ".faces[data-v-2a2a1e28] {\n display: flex;\n flex-direction: column;\n height: calc(100vh - var(--header-height));\n padding-left: 64px;\n}\n@media only screen and (max-width: 1020px) {\n.faces[data-v-2a2a1e28] {\n padding: 0;\n}\n}\n.faces__header[data-v-2a2a1e28] {\n display: flex;\n min-height: 60px;\n align-items: center;\n}\n.faces__header button[data-v-2a2a1e28] {\n margin-right: 32px;\n}\n.faces__list[data-v-2a2a1e28] {\n padding-top: 24px;\n padding-bottom: 32px;\n flex-grow: 1;\n display: flex;\n flex-wrap: wrap;\n overflow: scroll;\n gap: 32px;\n align-content: flex-start;\n}\n.faces__empty[data-v-2a2a1e28] {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.faces__empty__button[data-v-2a2a1e28] {\n margin-top: 32px;\n}\n.empty-content-with-illustration[data-v-2a2a1e28] .empty-content__icon {\n width: 200px;\n height: 200px;\n}\n.empty-content-with-illustration[data-v-2a2a1e28] .empty-content__icon svg {\n width: 200px;\n height: 200px;\n}", ""]);
-// Exports
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
-
-
-/***/ }),
-
-/***/ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&":
-/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true& ***!
- \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_style_index_0_id_acc68b4c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true& */ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&");
-
-
-
-
-
-
-
-
-
-
-
-var options = {};
-
-options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
-options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
-
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
-
-options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
-options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
-
-var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_style_index_0_id_acc68b4c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
-
-
-
-
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_style_index_0_id_acc68b4c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_style_index_0_id_acc68b4c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_style_index_0_id_acc68b4c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
-
-
-/***/ }),
-
-/***/ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&":
-/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true& ***!
- \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_style_index_0_id_2a2a1e28_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true& */ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&");
-
-
-
-
-
-
-
-
-
-
-
-var options = {};
-
-options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
-options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
-
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
-
-options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
-options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
-
-var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_style_index_0_id_2a2a1e28_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"], options);
-
-
-
-
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_style_index_0_id_2a2a1e28_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"] && _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_style_index_0_id_2a2a1e28_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_style_index_0_id_2a2a1e28_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
-
-
-/***/ }),
-
-/***/ "./src/components/FaceCover.vue":
-/*!**************************************!*\
- !*** ./src/components/FaceCover.vue ***!
- \**************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _FaceCover_vue_vue_type_template_id_acc68b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true& */ "./src/components/FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&");
-/* harmony import */ var _FaceCover_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FaceCover.vue?vue&type=script&lang=js& */ "./src/components/FaceCover.vue?vue&type=script&lang=js&");
-/* harmony import */ var _FaceCover_vue_vue_type_style_index_0_id_acc68b4c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true& */ "./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&");
-/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
-
-
-
-;
-
-
-/* normalize component */
-
-var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
- _FaceCover_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
- _FaceCover_vue_vue_type_template_id_acc68b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
- _FaceCover_vue_vue_type_template_id_acc68b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
- false,
- null,
- "acc68b4c",
- null
-
-)
-
-/* hot reload */
-if (false) { var api; }
-component.options.__file = "src/components/FaceCover.vue"
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
-
-/***/ }),
-
-/***/ "./src/views/Faces.vue":
-/*!*****************************!*\
- !*** ./src/views/Faces.vue ***!
- \*****************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _Faces_vue_vue_type_template_id_2a2a1e28_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Faces.vue?vue&type=template&id=2a2a1e28&scoped=true& */ "./src/views/Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&");
-/* harmony import */ var _Faces_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Faces.vue?vue&type=script&lang=js& */ "./src/views/Faces.vue?vue&type=script&lang=js&");
-/* harmony import */ var _Faces_vue_vue_type_style_index_0_id_2a2a1e28_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true& */ "./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&");
-/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
-
-
-
-;
-
-
-/* normalize component */
-
-var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
- _Faces_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
- _Faces_vue_vue_type_template_id_2a2a1e28_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,
- _Faces_vue_vue_type_template_id_2a2a1e28_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
- false,
- null,
- "2a2a1e28",
- null
-
-)
-
-/* hot reload */
-if (false) { var api; }
-component.options.__file = "src/views/Faces.vue"
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
-
-/***/ }),
-
-/***/ "./src/components/FaceCover.vue?vue&type=script&lang=js&":
-/*!***************************************************************!*\
- !*** ./src/components/FaceCover.vue?vue&type=script&lang=js& ***!
- \***************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=script&lang=js&");
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/views/Faces.vue?vue&type=script&lang=js&":
-/*!******************************************************!*\
- !*** ./src/views/Faces.vue?vue&type=script&lang=js& ***!
- \******************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=script&lang=js&");
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&":
-/*!************************************************************************************************!*\
- !*** ./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true& ***!
- \************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _node_modules_style_loader_dist_cjs_js_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_style_index_0_id_acc68b4c_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/style-loader/dist/cjs.js!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&");
-
-
-/***/ }),
-
-/***/ "./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&":
-/*!***************************************************************************************!*\
- !*** ./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true& ***!
- \***************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _node_modules_style_loader_dist_cjs_js_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_style_index_0_id_2a2a1e28_lang_scss_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/style-loader/dist/cjs.js!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true& */ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&");
-
-
-/***/ }),
-
-/***/ "./src/components/FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&":
-/*!*********************************************************************************!*\
- !*** ./src/components/FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true& ***!
- \*********************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_template_id_acc68b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
-/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_template_id_acc68b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
-/* harmony export */ });
-/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FaceCover_vue_vue_type_template_id_acc68b4c_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&");
-
-
-/***/ }),
-
-/***/ "./src/views/Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&":
-/*!************************************************************************!*\
- !*** ./src/views/Faces.vue?vue&type=template&id=2a2a1e28&scoped=true& ***!
- \************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_template_id_2a2a1e28_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),
-/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_template_id_2a2a1e28_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
-/* harmony export */ });
-/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Faces_vue_vue_type_template_id_2a2a1e28_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=template&id=2a2a1e28&scoped=true& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&");
-
-
-/***/ }),
-
-/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&":
-/*!************************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true& ***!
- \************************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* binding */ render),
-/* harmony export */ "staticRenderFns": () => (/* binding */ staticRenderFns)
-/* harmony export */ });
-var render = function () {
- var _vm = this
- var _h = _vm.$createElement
- var _c = _vm._self._c || _h
- return _c(
- "router-link",
- { staticClass: "face-cover", attrs: { to: "/faces/" + _vm.baseName } },
- [
- _c("div", { staticClass: "face-cover__crop-container" }, [
- _c("img", {
- ref: "image",
- staticClass: "face-cover__image",
- style: _vm.coverDimensions,
- attrs: { src: _vm.coverUrl },
- }),
- ]),
- _vm._v(" "),
- _c("div", { staticClass: "face-cover__details" }, [
- !_vm.baseName.match(/^[0-9]+$/)
- ? _c("div", { staticClass: "face-cover__details__first-line" }, [
- _c("h2", { staticClass: "face-cover__details__name" }, [
- _vm._v("\n\t\t\t\t" + _vm._s(_vm.baseName) + "\n\t\t\t"),
- ]),
- ])
- : _vm._e(),
- _vm._v(" "),
- _vm.facesFiles[_vm.baseName]
- ? _c("div", { staticClass: "face-cover__details__second-line" }, [
- _vm._v(
- "\n\t\t\t" +
- _vm._s(
- _vm.n(
- "photos",
- "%n photos",
- "%n photos",
- _vm.facesFiles[_vm.baseName].length
- )
- ) +
- "\n\t\t"
- ),
- ])
- : _vm._e(),
- ]),
- ]
- )
-}
-var staticRenderFns = []
-render._withStripped = true
-
-
-
-/***/ }),
-
-/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&":
-/*!***************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/views/Faces.vue?vue&type=template&id=2a2a1e28&scoped=true& ***!
- \***************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* binding */ render),
-/* harmony export */ "staticRenderFns": () => (/* binding */ staticRenderFns)
-/* harmony export */ });
-var render = function () {
- var _vm = this
- var _h = _vm.$createElement
- var _c = _vm._self._c || _h
- return _vm.errorFetchingFaces
- ? _c("NcEmptyContent", [
- _vm._v("\n\t" + _vm._s(_vm.t("photos", "An error occurred")) + "\n"),
- ])
- : _c(
- "div",
- { staticClass: "faces" },
- [
- _vm.loadingFaces ? _c("NcLoadingIcon") : _vm._e(),
- _vm._v(" "),
- _vm.noFaces && !_vm.loadingFaces
- ? _c(
- "div",
- { staticClass: "faces__empty" },
- [
- _c(
- "NcEmptyContent",
- {
- staticClass: "empty-content-with-illustration",
- scopedSlots: _vm._u(
- [
- {
- key: "icon",
- fn: function () {
- return [_c("AccountBoxMultipleOutline")]
- },
- proxy: true,
- },
- {
- key: "desc",
- fn: function () {
- return [
- _vm._v(
- "\n\t\t\t\t" +
- _vm._s(
- _vm.t(
- "photos",
- "This might take some time depending on the size of your photo library."
- )
- ) +
- "\n\t\t\t"
- ),
- ]
- },
- proxy: true,
- },
- ],
- null,
- false,
- 3796275108
- ),
- },
- [
- _vm._v(" "),
- _vm._v(
- "\n\t\t\t" +
- _vm._s(
- _vm.t(
- "photos",
- "Recognized people will show up here"
- )
- ) +
- "\n\t\t"
- ),
- ]
- ),
- ],
- 1
- )
- : !_vm.noFaces
- ? _c(
- "div",
- { staticClass: "faces__list" },
- _vm._l(_vm.orderedFaces, function (face) {
- return _c("FaceCover", {
- key: face.basename,
- attrs: { "base-name": face.basename },
- })
- }),
- 1
- )
- : _vm._e(),
- ],
- 1
- )
-}
-var staticRenderFns = []
-render._withStripped = true
-
-
-
-/***/ })
-
-}]);
-//# sourceMappingURL=photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js.map?v=5606ac61448cbb034cd7
\ No newline at end of file
diff --git a/js/photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js.map b/js/photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js.map
deleted file mode 100644
index 86e587c05..000000000
--- a/js/photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"photos-src_mixins_AbortControllerMixin_js-src_views_Faces_vue.js?v=5606ac61448cbb034cd7","mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;;;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AKAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///photos/src/components/FaceCover.vue?vue&type=script&lang=js&","webpack:///photos/src/views/Faces.vue?vue&type=script&lang=js&","webpack:///photos/src/mixins/AbortControllerMixin.js","webpack:///photos/src/components/FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&","webpack:///photos/src/views/Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&","webpack://photos/./src/components/FaceCover.vue?e980","webpack://photos/./src/views/Faces.vue?f679","webpack:///photos/src/components/FaceCover.vue","webpack:///photos/src/views/Faces.vue","webpack://photos/./src/components/FaceCover.vue?e065","webpack://photos/./src/views/Faces.vue?d1d7","webpack://photos/./src/components/FaceCover.vue?c703","webpack://photos/./src/views/Faces.vue?f0cf","webpack:///photos/src/components/FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&","webpack:///photos/src/views/Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&","webpack://photos/./src/components/FaceCover.vue?14eb","webpack://photos/./src/views/Faces.vue?c831"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { mapGetters } from 'vuex';\nimport { generateUrl } from '@nextcloud/router';\nimport FetchFacesMixin from '../mixins/FetchFacesMixin.js';\nimport FaceCoverMixin from '../mixins/FaceCoverMixin.js';\nexport default {\n name: 'FaceCover',\n mixins: [FetchFacesMixin, FaceCoverMixin],\n props: {\n baseName: {\n type: String,\n required: true\n }\n },\n computed: _objectSpread(_objectSpread({}, mapGetters(['files', 'faces', 'facesFiles'])), {}, {\n /**\n * @return {Face}\n */\n face: function face() {\n return this.faces[this.baseName];\n },\n\n /**\n * @return {string}\n */\n coverUrl: function coverUrl() {\n if (!this.cover) {\n return '';\n }\n\n return generateUrl(\"/apps/photos/api/v1/preview/\".concat(this.cover.fileid, \"?x=\", 512, \"&y=\", 512));\n },\n cover: function cover() {\n return this.getFaceCover(this.face.basename);\n },\n coverDimensions: function coverDimensions() {\n if (!this.cover) return {};\n return this.getCoverStyle(this.face.basename);\n }\n }),\n beforeMount: function beforeMount() {\n var _this = this;\n\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return _this.fetchFiles();\n\n case 2:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }))();\n },\n methods: {\n fetchFiles: function fetchFiles() {\n var _this2 = this;\n\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return _this2.fetchFaceContent(_this2.face.basename);\n\n case 2:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2);\n }))();\n }\n }\n};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport AccountBoxMultipleOutline from 'vue-material-design-icons/AccountBoxMultipleOutline';\nimport { NcEmptyContent, NcLoadingIcon } from '@nextcloud/vue';\nimport FetchFacesMixin from '../mixins/FetchFacesMixin.js';\nimport FaceCover from '../components/FaceCover.vue';\nimport { mapGetters } from 'vuex';\nexport default {\n name: 'Faces',\n components: {\n FaceCover: FaceCover,\n NcEmptyContent: NcEmptyContent,\n NcLoadingIcon: NcLoadingIcon,\n AccountBoxMultipleOutline: AccountBoxMultipleOutline\n },\n mixins: [FetchFacesMixin],\n computed: _objectSpread(_objectSpread({}, mapGetters(['facesFiles'])), {}, {\n /**\n * @return {boolean} Whether the list of face is empty or not.\n */\n noFaces: function noFaces() {\n return Object.keys(this.faces).length === 0;\n },\n orderedFaces: function orderedFaces() {\n var _this = this;\n\n return Object.values(this.faces).sort(function (a, b) {\n if (!_this.facesFiles[b.basename] || !_this.facesFiles[a.basename]) {\n return 0;\n }\n\n return _this.facesFiles[b.basename].length - _this.facesFiles[a.basename].length;\n });\n }\n })\n};","/**\n * @copyright Copyright (c) 2022 Louis Chemineau \n *\n * @author Louis Chemineau \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 .\n *\n */\nexport default {\n name: 'AbortControllerMixin',\n data: function data() {\n return {\n abortController: new AbortController()\n };\n },\n beforeDestroy: function beforeDestroy() {\n this.abortController.abort();\n },\n beforeRouteLeave: function beforeRouteLeave(from, to, next) {\n this.abortController.abort();\n this.abortController = new AbortController();\n next();\n }\n};","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.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_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".face-cover[data-v-acc68b4c] {\\n display: flex;\\n flex-direction: column;\\n padding: 10px;\\n border-radius: var(--border-radius-large);\\n}\\n.face-cover__crop-container[data-v-acc68b4c] {\\n overflow: hidden;\\n width: 250px;\\n height: 250px;\\n border-radius: 250px;\\n position: relative;\\n background: var(--color-background-darker);\\n --photos-face-width: 250px;\\n}\\n@media only screen and (max-width: 1020px) {\\n.face-cover__crop-container[data-v-acc68b4c] {\\n width: 95px;\\n height: 95px;\\n --photos-face-width: 95px;\\n}\\n}\\n.face-cover[data-v-acc68b4c]:hover, .face-cover[data-v-acc68b4c]:focus {\\n background: var(--color-background-hover);\\n}\\n.face-cover__details[data-v-acc68b4c] {\\n display: flex;\\n flex-direction: column;\\n width: 250px;\\n margin-top: 4px;\\n text-align: center;\\n}\\n@media only screen and (max-width: 1020px) {\\n.face-cover__details[data-v-acc68b4c] {\\n width: 95px;\\n}\\n}\\n.face-cover__details__first-line[data-v-acc68b4c] {\\n display: flex;\\n height: 2em;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n.face-cover__details__second-line[data-v-acc68b4c] {\\n margin-top: 6px;\\n color: var(--color-text-maxcontrast);\\n}\\n.face-cover__details__name[data-v-acc68b4c] {\\n flex-grow: 1;\\n margin: 0;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.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_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".faces[data-v-2a2a1e28] {\\n display: flex;\\n flex-direction: column;\\n height: calc(100vh - var(--header-height));\\n padding-left: 64px;\\n}\\n@media only screen and (max-width: 1020px) {\\n.faces[data-v-2a2a1e28] {\\n padding: 0;\\n}\\n}\\n.faces__header[data-v-2a2a1e28] {\\n display: flex;\\n min-height: 60px;\\n align-items: center;\\n}\\n.faces__header button[data-v-2a2a1e28] {\\n margin-right: 32px;\\n}\\n.faces__list[data-v-2a2a1e28] {\\n padding-top: 24px;\\n padding-bottom: 32px;\\n flex-grow: 1;\\n display: flex;\\n flex-wrap: wrap;\\n overflow: scroll;\\n gap: 32px;\\n align-content: flex-start;\\n}\\n.faces__empty[data-v-2a2a1e28] {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n}\\n.faces__empty__button[data-v-2a2a1e28] {\\n margin-top: 32px;\\n}\\n.empty-content-with-illustration[data-v-2a2a1e28] .empty-content__icon {\\n width: 200px;\\n height: 200px;\\n}\\n.empty-content-with-illustration[data-v-2a2a1e28] .empty-content__icon svg {\\n width: 200px;\\n height: 200px;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=style&index=0&id=acc68b4c&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=style&index=0&id=2a2a1e28&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&\"\nimport script from \"./FaceCover.vue?vue&type=script&lang=js&\"\nexport * from \"./FaceCover.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FaceCover.vue?vue&type=style&index=0&id=acc68b4c&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 \"acc68b4c\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/apps2/photos/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('acc68b4c')) {\n api.createRecord('acc68b4c', component.options)\n } else {\n api.reload('acc68b4c', component.options)\n }\n module.hot.accept(\"./FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&\", function () {\n api.rerender('acc68b4c', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/FaceCover.vue\"\nexport default component.exports","import { render, staticRenderFns } from \"./Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&\"\nimport script from \"./Faces.vue?vue&type=script&lang=js&\"\nexport * from \"./Faces.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Faces.vue?vue&type=style&index=0&id=2a2a1e28&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 \"2a2a1e28\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/apps2/photos/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('2a2a1e28')) {\n api.createRecord('2a2a1e28', component.options)\n } else {\n api.reload('2a2a1e28', component.options)\n }\n module.hot.accept(\"./Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&\", function () {\n api.rerender('2a2a1e28', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/views/Faces.vue\"\nexport default component.exports","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.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!./FaceCover.vue?vue&type=script&lang=js&\"","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.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!./Faces.vue?vue&type=script&lang=js&\"","export * from \"-!../../node_modules/style-loader/dist/cjs.js!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=style&index=0&id=acc68b4c&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/style-loader/dist/cjs.js!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=style&index=0&id=2a2a1e28&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FaceCover.vue?vue&type=template&id=acc68b4c&scoped=true&\"","export * from \"-!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Faces.vue?vue&type=template&id=2a2a1e28&scoped=true&\"","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"router-link\",\n { staticClass: \"face-cover\", attrs: { to: \"/faces/\" + _vm.baseName } },\n [\n _c(\"div\", { staticClass: \"face-cover__crop-container\" }, [\n _c(\"img\", {\n ref: \"image\",\n staticClass: \"face-cover__image\",\n style: _vm.coverDimensions,\n attrs: { src: _vm.coverUrl },\n }),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"face-cover__details\" }, [\n !_vm.baseName.match(/^[0-9]+$/)\n ? _c(\"div\", { staticClass: \"face-cover__details__first-line\" }, [\n _c(\"h2\", { staticClass: \"face-cover__details__name\" }, [\n _vm._v(\"\\n\\t\\t\\t\\t\" + _vm._s(_vm.baseName) + \"\\n\\t\\t\\t\"),\n ]),\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.facesFiles[_vm.baseName]\n ? _c(\"div\", { staticClass: \"face-cover__details__second-line\" }, [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(\n _vm.n(\n \"photos\",\n \"%n photos\",\n \"%n photos\",\n _vm.facesFiles[_vm.baseName].length\n )\n ) +\n \"\\n\\t\\t\"\n ),\n ])\n : _vm._e(),\n ]),\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _vm.errorFetchingFaces\n ? _c(\"NcEmptyContent\", [\n _vm._v(\"\\n\\t\" + _vm._s(_vm.t(\"photos\", \"An error occurred\")) + \"\\n\"),\n ])\n : _c(\n \"div\",\n { staticClass: \"faces\" },\n [\n _vm.loadingFaces ? _c(\"NcLoadingIcon\") : _vm._e(),\n _vm._v(\" \"),\n _vm.noFaces && !_vm.loadingFaces\n ? _c(\n \"div\",\n { staticClass: \"faces__empty\" },\n [\n _c(\n \"NcEmptyContent\",\n {\n staticClass: \"empty-content-with-illustration\",\n scopedSlots: _vm._u(\n [\n {\n key: \"icon\",\n fn: function () {\n return [_c(\"AccountBoxMultipleOutline\")]\n },\n proxy: true,\n },\n {\n key: \"desc\",\n fn: function () {\n return [\n _vm._v(\n \"\\n\\t\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"photos\",\n \"This might take some time depending on the size of your photo library.\"\n )\n ) +\n \"\\n\\t\\t\\t\"\n ),\n ]\n },\n proxy: true,\n },\n ],\n null,\n false,\n 3796275108\n ),\n },\n [\n _vm._v(\" \"),\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"photos\",\n \"Recognized people will show up here\"\n )\n ) +\n \"\\n\\t\\t\"\n ),\n ]\n ),\n ],\n 1\n )\n : !_vm.noFaces\n ? _c(\n \"div\",\n { staticClass: \"faces__list\" },\n _vm._l(_vm.orderedFaces, function (face) {\n return _c(\"FaceCover\", {\n key: face.basename,\n attrs: { \"base-name\": face.basename },\n })\n }),\n 1\n )\n : _vm._e(),\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js b/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js
deleted file mode 100644
index 144387844..000000000
--- a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js
+++ /dev/null
@@ -1,491 +0,0 @@
-"use strict";
-(self["webpackChunkphotos"] = self["webpackChunkphotos"] || []).push([["src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue"],{
-
-/***/ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=script&lang=js&":
-/*!****************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=script&lang=js& ***!
- \****************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'Loader'
-});
-
-/***/ }),
-
-/***/ "./src/mixins/FaceCoverMixin.js":
-/*!**************************************!*\
- !*** ./src/mixins/FaceCoverMixin.js ***!
- \**************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
-/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! he */ "./node_modules/he/he.js");
-/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_0__);
-/**
- * @copyright Copyright (c) 2022 Marcel Klehr
- *
- * @author Marcel Klehr
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
-
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'FaceCoverMixin',
- computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapGetters)(['faces', 'facesFiles', 'files'])
- },
- methods: {
- getFaceCover(faceName) {
- return (this.facesFiles[faceName] || []).slice(0, 25).map(fileId => this.files[fileId]).map(file => ({ ...file,
- faceDetections: JSON.parse(he__WEBPACK_IMPORTED_MODULE_0___default().decode(file.faceDetections))
- })) // sort larges face first
- .sort((a, b) => b.faceDetections.find(d => d.title === faceName).width - a.faceDetections.find(d => d.title === faceName).width) // sort fewest face detections first
- .sort((a, b) => a.faceDetections.length - b.faceDetections.length)[0];
- },
-
- /**
- * This will produce an inline style to apply to images
- * to zoom toward the detected face
- *
- * @param faceName
- * @return {{}|{transform: string, width: string, transformOrigin: string}}
- */
- getCoverStyle(faceName) {
- const cover = this.getFaceCover(faceName);
-
- if (!cover) {
- return {};
- }
-
- const detections = cover.faceDetections;
- const detection = detections.find(detection => detection.title === faceName); // Zoom into the picture so that the face fills the --photos-face-width box nicely
- // if the face is larger than the image, we don't zoom out (reason for the Math.max)
-
- const zoom = Math.max(1, 1 / detection.width * 0.4);
- const horizontalCenterOfFace = (detection.x + detection.width / 2) * 100;
- const verticalCenterOfFace = (detection.y + detection.height / 2) * 100;
- return {
- // We assume that the image is inside a div with width: var(--photos-face-width)
- width: '100%',
- // we translate the image so that the center of the detected face is in the center of the --photos-face-width box
- // and add the zoom
- transform: `translate(calc( var(--photos-face-width)/2 - ${horizontalCenterOfFace}% ), calc( var(--photos-face-width)/2 - ${verticalCenterOfFace}% )) scale(${zoom})`,
- // this is necessary for the zoom to zoom toward the center of the face
- transformOrigin: `${horizontalCenterOfFace}% ${verticalCenterOfFace}%`
- };
- }
-
- }
-});
-
-/***/ }),
-
-/***/ "./src/mixins/FetchFacesMixin.js":
-/*!***************************************!*\
- !*** ./src/mixins/FetchFacesMixin.js ***!
- \***************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
-/* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.es.js");
-/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.esm.js");
-/* harmony import */ var _services_DavClient_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/DavClient.js */ "./src/services/DavClient.js");
-/* harmony import */ var _services_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/logger.js */ "./src/services/logger.js");
-/* harmony import */ var _services_DavRequest__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../services/DavRequest */ "./src/services/DavRequest.js");
-/* harmony import */ var _utils_fileUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/fileUtils */ "./src/utils/fileUtils.js");
-/* harmony import */ var _AbortControllerMixin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./AbortControllerMixin */ "./src/mixins/AbortControllerMixin.js");
-/**
- * @copyright Copyright (c) 2022 Louis Chemineau
- *
- * @author Louis Chemineau
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
-
-
-
-
-
-
-
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'FetchFacesMixin',
-
- data() {
- return {
- errorFetchingFaces: null,
- loadingFaces: false,
- errorFetchingFiles: null,
- loadingFiles: false
- };
- },
-
- mixins: [_AbortControllerMixin__WEBPACK_IMPORTED_MODULE_6__["default"]],
-
- async beforeMount() {
- this.fetchFaces();
- },
-
- computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapGetters)(['faces'])
- },
- methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)(['appendFiles']),
-
- async fetchFaces() {
- if (this.loadingFaces) {
- return;
- }
-
- if (Object.keys(this.faces).length) {
- return;
- }
-
- try {
- this.loadingFaces = true;
- this.errorFetchingFaces = null;
- const faces = await _services_DavClient_js__WEBPACK_IMPORTED_MODULE_2__["default"].getDirectoryContents(`/recognize/${(0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)()?.uid}/faces/`, {
- signal: this.abortController.signal
- });
- this.$store.dispatch('addFaces', {
- faces
- });
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug(`[FetchFacesMixin] Fetched ${faces.length} new faces: `, faces);
- } catch (error) {
- if (error.response && error.response.status) {
- if (error.response.status === 404) {
- this.errorFetchingFaces = 404;
- } else {
- this.errorFetchingFaces = error;
- }
- }
-
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].error(t('photos', 'Failed to fetch faces list.'), error);
- (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(t('photos', 'Failed to fetch faces list.'));
- } finally {
- this.loadingFaces = false;
- }
- },
-
- async fetchFaceContent(faceName, force) {
- if (this.loadingFiles) {
- return;
- }
-
- if (!force && this.facesFiles[faceName] && this.facesFiles[faceName].length) {
- return;
- }
-
- try {
- this.errorFetchingFiles = null;
- this.loadingFiles = true;
- let {
- data: fetchedFiles
- } = await _services_DavClient_js__WEBPACK_IMPORTED_MODULE_2__["default"].getDirectoryContents(`/recognize/${(0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)()?.uid}/faces/${faceName}`, {
- data: _services_DavRequest__WEBPACK_IMPORTED_MODULE_4__["default"],
- details: true,
- signal: this.abortController.signal
- });
- fetchedFiles = fetchedFiles.map(file => (0,_utils_fileUtils__WEBPACK_IMPORTED_MODULE_5__.genFileInfo)(file)).map(file => ({ ...file,
- filename: file.realpath.replace(`/${(0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)().uid}/files`, '')
- }));
- const fileIds = fetchedFiles.map(file => '' + file.fileid);
- this.appendFiles(fetchedFiles);
-
- if (fetchedFiles.length > 0) {
- await this.$store.commit('addFilesToFace', {
- faceName,
- fileIdsToAdd: fileIds
- });
- }
-
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug(`[FetchFacesMixin] Fetched ${fileIds.length} new files: `, fileIds);
- } catch (error) {
- if (error.response && error.response.status) {
- if (error.response.status === 404) {
- this.errorFetchingFiles = 404;
- } else {
- this.errorFetchingFiles = error;
- }
- } // cancelled request, moving on...
-
-
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].error('Error fetching face files', error);
- } finally {
- this.loadingFiles = false;
- }
- }
-
- }
-});
-
-/***/ }),
-
-/***/ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=style&index=0&lang=scss&":
-/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=style&index=0&lang=scss& ***!
- \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "./node_modules/css-loader/dist/runtime/noSourceMaps.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
-/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
-// Imports
-
-
-var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
-// Module
-___CSS_LOADER_EXPORT___.push([module.id, ".loader {\n display: grid;\n height: 60px;\n}", ""]);
-// Exports
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
-
-
-/***/ }),
-
-/***/ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=style&index=0&lang=scss&":
-/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=style&index=0&lang=scss& ***!
- \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
-/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loader.vue?vue&type=style&index=0&lang=scss& */ "./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=style&index=0&lang=scss&");
-
-
-
-
-
-
-
-
-
-
-
-var options = {};
-
-options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
-options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
-
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
-
-options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
-options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
-
-var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"], options);
-
-
-
-
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"] && _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
-
-
-/***/ }),
-
-/***/ "./src/components/Loader.vue":
-/*!***********************************!*\
- !*** ./src/components/Loader.vue ***!
- \***********************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _Loader_vue_vue_type_template_id_04a0d67a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Loader.vue?vue&type=template&id=04a0d67a& */ "./src/components/Loader.vue?vue&type=template&id=04a0d67a&");
-/* harmony import */ var _Loader_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Loader.vue?vue&type=script&lang=js& */ "./src/components/Loader.vue?vue&type=script&lang=js&");
-/* harmony import */ var _Loader_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Loader.vue?vue&type=style&index=0&lang=scss& */ "./src/components/Loader.vue?vue&type=style&index=0&lang=scss&");
-/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
-
-
-
-;
-
-
-/* normalize component */
-
-var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
- _Loader_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"],
- _Loader_vue_vue_type_template_id_04a0d67a___WEBPACK_IMPORTED_MODULE_0__.render,
- _Loader_vue_vue_type_template_id_04a0d67a___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
- false,
- null,
- null,
- null
-
-)
-
-/* hot reload */
-if (false) { var api; }
-component.options.__file = "src/components/Loader.vue"
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
-
-/***/ }),
-
-/***/ "./src/components/Loader.vue?vue&type=script&lang=js&":
-/*!************************************************************!*\
- !*** ./src/components/Loader.vue?vue&type=script&lang=js& ***!
- \************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loader.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=script&lang=js&");
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/Loader.vue?vue&type=style&index=0&lang=scss&":
-/*!*********************************************************************!*\
- !*** ./src/components/Loader.vue?vue&type=style&index=0&lang=scss& ***!
- \*********************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _node_modules_style_loader_dist_cjs_js_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_0_rules_0_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_style_index_0_lang_scss___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/style-loader/dist/cjs.js!../../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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loader.vue?vue&type=style&index=0&lang=scss& */ "./node_modules/style-loader/dist/cjs.js!./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[0].rules[0].use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=style&index=0&lang=scss&");
-
-
-/***/ }),
-
-/***/ "./src/components/Loader.vue?vue&type=template&id=04a0d67a&":
-/*!******************************************************************!*\
- !*** ./src/components/Loader.vue?vue&type=template&id=04a0d67a& ***!
- \******************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_template_id_04a0d67a___WEBPACK_IMPORTED_MODULE_0__.render),
-/* harmony export */ "staticRenderFns": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_template_id_04a0d67a___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
-/* harmony export */ });
-/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Loader_vue_vue_type_template_id_04a0d67a___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loader.vue?vue&type=template&id=04a0d67a& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=template&id=04a0d67a&");
-
-
-/***/ }),
-
-/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=template&id=04a0d67a&":
-/*!*********************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/Loader.vue?vue&type=template&id=04a0d67a& ***!
- \*********************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "render": () => (/* binding */ render),
-/* harmony export */ "staticRenderFns": () => (/* binding */ staticRenderFns)
-/* harmony export */ });
-var render = function () {
- var _vm = this
- var _h = _vm.$createElement
- var _c = _vm._self._c || _h
- return _c(
- "div",
- { staticClass: "loader" },
- [
- _vm._t("icon", function () {
- return [_c("span", { staticClass: "icon-loading" })]
- }),
- ],
- 2
- )
-}
-var staticRenderFns = []
-render._withStripped = true
-
-
-
-/***/ })
-
-}]);
-//# sourceMappingURL=photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js.map?v=aa0718fb997b48f22742
\ No newline at end of file
diff --git a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js.map b/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js.map
deleted file mode 100644
index dfeee8afb..000000000
--- a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js-src_components_Loader_vue.js?v=aa0718fb997b48f22742","mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA;AACA;;;;;;;;;;;;;;;ACvCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///photos/src/components/Loader.vue?vue&type=script&lang=js&","webpack:///photos/src/mixins/FaceCoverMixin.js","webpack:///photos/src/mixins/FetchFacesMixin.js","webpack:///photos/src/components/Loader.vue?vue&type=style&index=0&lang=scss&","webpack://photos/./src/components/Loader.vue?eb1b","webpack:///photos/src/components/Loader.vue","webpack://photos/./src/components/Loader.vue?5453","webpack:///photos/src/components/Loader.vue?vue&type=template&id=04a0d67a&"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'Loader'\n};","/**\n * @copyright Copyright (c) 2022 Marcel Klehr \n *\n * @author Marcel Klehr \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 .\n *\n */\nimport { mapGetters } from 'vuex';\nimport he from 'he';\nexport default {\n name: 'FaceCoverMixin',\n computed: { ...mapGetters(['faces', 'facesFiles', 'files'])\n },\n methods: {\n getFaceCover(faceName) {\n return (this.facesFiles[faceName] || []).slice(0, 25).map(fileId => this.files[fileId]).map(file => ({ ...file,\n faceDetections: JSON.parse(he.decode(file.faceDetections))\n })) // sort larges face first\n .sort((a, b) => b.faceDetections.find(d => d.title === faceName).width - a.faceDetections.find(d => d.title === faceName).width) // sort fewest face detections first\n .sort((a, b) => a.faceDetections.length - b.faceDetections.length)[0];\n },\n\n /**\n * This will produce an inline style to apply to images\n * to zoom toward the detected face\n *\n * @param faceName\n * @return {{}|{transform: string, width: string, transformOrigin: string}}\n */\n getCoverStyle(faceName) {\n const cover = this.getFaceCover(faceName);\n\n if (!cover) {\n return {};\n }\n\n const detections = cover.faceDetections;\n const detection = detections.find(detection => detection.title === faceName); // Zoom into the picture so that the face fills the --photos-face-width box nicely\n // if the face is larger than the image, we don't zoom out (reason for the Math.max)\n\n const zoom = Math.max(1, 1 / detection.width * 0.4);\n const horizontalCenterOfFace = (detection.x + detection.width / 2) * 100;\n const verticalCenterOfFace = (detection.y + detection.height / 2) * 100;\n return {\n // We assume that the image is inside a div with width: var(--photos-face-width)\n width: '100%',\n // we translate the image so that the center of the detected face is in the center of the --photos-face-width box\n // and add the zoom\n transform: `translate(calc( var(--photos-face-width)/2 - ${horizontalCenterOfFace}% ), calc( var(--photos-face-width)/2 - ${verticalCenterOfFace}% )) scale(${zoom})`,\n // this is necessary for the zoom to zoom toward the center of the face\n transformOrigin: `${horizontalCenterOfFace}% ${verticalCenterOfFace}%`\n };\n }\n\n }\n};","/**\n * @copyright Copyright (c) 2022 Louis Chemineau \n *\n * @author Louis Chemineau \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 .\n *\n */\nimport { mapActions, mapGetters } from 'vuex';\nimport { showError } from '@nextcloud/dialogs';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport client from '../services/DavClient.js';\nimport logger from '../services/logger.js';\nimport DavRequest from '../services/DavRequest';\nimport { genFileInfo } from '../utils/fileUtils';\nimport AbortControllerMixin from './AbortControllerMixin';\nexport default {\n name: 'FetchFacesMixin',\n\n data() {\n return {\n errorFetchingFaces: null,\n loadingFaces: false,\n errorFetchingFiles: null,\n loadingFiles: false\n };\n },\n\n mixins: [AbortControllerMixin],\n\n async beforeMount() {\n this.fetchFaces();\n },\n\n computed: { ...mapGetters(['faces'])\n },\n methods: { ...mapActions(['appendFiles']),\n\n async fetchFaces() {\n if (this.loadingFaces) {\n return;\n }\n\n if (Object.keys(this.faces).length) {\n return;\n }\n\n try {\n this.loadingFaces = true;\n this.errorFetchingFaces = null;\n const faces = await client.getDirectoryContents(`/recognize/${getCurrentUser()?.uid}/faces/`, {\n signal: this.abortController.signal\n });\n this.$store.dispatch('addFaces', {\n faces\n });\n logger.debug(`[FetchFacesMixin] Fetched ${faces.length} new faces: `, faces);\n } catch (error) {\n if (error.response && error.response.status) {\n if (error.response.status === 404) {\n this.errorFetchingFaces = 404;\n } else {\n this.errorFetchingFaces = error;\n }\n }\n\n logger.error(t('photos', 'Failed to fetch faces list.'), error);\n showError(t('photos', 'Failed to fetch faces list.'));\n } finally {\n this.loadingFaces = false;\n }\n },\n\n async fetchFaceContent(faceName, force) {\n if (this.loadingFiles) {\n return;\n }\n\n if (!force && this.facesFiles[faceName] && this.facesFiles[faceName].length) {\n return;\n }\n\n try {\n this.errorFetchingFiles = null;\n this.loadingFiles = true;\n let {\n data: fetchedFiles\n } = await client.getDirectoryContents(`/recognize/${getCurrentUser()?.uid}/faces/${faceName}`, {\n data: DavRequest,\n details: true,\n signal: this.abortController.signal\n });\n fetchedFiles = fetchedFiles.map(file => genFileInfo(file)).map(file => ({ ...file,\n filename: file.realpath.replace(`/${getCurrentUser().uid}/files`, '')\n }));\n const fileIds = fetchedFiles.map(file => '' + file.fileid);\n this.appendFiles(fetchedFiles);\n\n if (fetchedFiles.length > 0) {\n await this.$store.commit('addFilesToFace', {\n faceName,\n fileIdsToAdd: fileIds\n });\n }\n\n logger.debug(`[FetchFacesMixin] Fetched ${fileIds.length} new files: `, fileIds);\n } catch (error) {\n if (error.response && error.response.status) {\n if (error.response.status === 404) {\n this.errorFetchingFiles = 404;\n } else {\n this.errorFetchingFiles = error;\n }\n } // cancelled request, moving on...\n\n\n logger.error('Error fetching face files', error);\n } finally {\n this.loadingFiles = false;\n }\n }\n\n }\n};","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/noSourceMaps.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_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".loader {\\n display: grid;\\n height: 60px;\\n}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loader.vue?vue&type=style&index=0&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-2[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loader.vue?vue&type=style&index=0&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Loader.vue?vue&type=template&id=04a0d67a&\"\nimport script from \"./Loader.vue?vue&type=script&lang=js&\"\nexport * from \"./Loader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Loader.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/louis/workspace/nextcloud/apps/photos/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!api.isRecorded('04a0d67a')) {\n api.createRecord('04a0d67a', component.options)\n } else {\n api.reload('04a0d67a', component.options)\n }\n module.hot.accept(\"./Loader.vue?vue&type=template&id=04a0d67a&\", function () {\n api.rerender('04a0d67a', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/Loader.vue\"\nexport default component.exports","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Loader.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!./Loader.vue?vue&type=script&lang=js&\"","var render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"loader\" },\n [\n _vm._t(\"icon\", function () {\n return [_c(\"span\", { staticClass: \"icon-loading\" })]\n }),\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js b/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js
deleted file mode 100644
index ce57f289f..000000000
--- a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js
+++ /dev/null
@@ -1,385 +0,0 @@
-"use strict";
-(self["webpackChunkphotos"] = self["webpackChunkphotos"] || []).push([["src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js"],{
-
-/***/ "./src/mixins/FaceCoverMixin.js":
-/*!**************************************!*\
- !*** ./src/mixins/FaceCoverMixin.js ***!
- \**************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
-/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! he */ "./node_modules/he/he.js");
-/* harmony import */ var he__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(he__WEBPACK_IMPORTED_MODULE_0__);
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-/**
- * @copyright Copyright (c) 2022 Marcel Klehr
- *
- * @author Marcel Klehr
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
-
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'FaceCoverMixin',
- computed: _objectSpread({}, (0,vuex__WEBPACK_IMPORTED_MODULE_1__.mapGetters)(['faces', 'facesFiles', 'files'])),
- methods: {
- getFaceCover: function getFaceCover(faceName) {
- var _this = this;
-
- // Give high scores for faces that intersect with the edge of the picture (with a margin of half the face size)
- var scoreFacePosition = function scoreFacePosition(faceDetection) {
- return Math.max(0, -1 * (faceDetection.x - faceDetection.width * 0.5)) + Math.max(0, -1 * (faceDetection.y - faceDetection.height * 0.5)) + Math.max(0, -1 * (1 - (faceDetection.x + faceDetection.width) - faceDetection.width * 0.5)) + Math.max(0, -1 * (1 - (faceDetection.y + faceDetection.height) - faceDetection.height * 0.5));
- };
-
- return (this.facesFiles[faceName] || []).slice(0, 25).map(function (fileId) {
- return _this.files[fileId];
- }).map(function (file) {
- return _objectSpread(_objectSpread({}, file), {}, {
- faceDetections: JSON.parse(he__WEBPACK_IMPORTED_MODULE_0___default().decode(file.faceDetections))
- });
- }) // sort larges face first
- .sort(function (a, b) {
- return b.faceDetections.find(function (d) {
- return d.title === faceName;
- }).width - a.faceDetections.find(function (d) {
- return d.title === faceName;
- }).width;
- }) // sort fewest face detections first
- .sort(function (a, b) {
- return a.faceDetections.length - b.faceDetections.length;
- }) // Sort faces that are at the edge last
- .sort(function (a, b) {
- return scoreFacePosition(a.faceDetections.find(function (d) {
- return d.title === faceName;
- })) - scoreFacePosition(b.faceDetections.find(function (d) {
- return d.title === faceName;
- }));
- })[0];
- },
-
- /**
- * This will produce an inline style to apply to images
- * to zoom toward the detected face
- *
- * @param faceName
- * @return {{}|{transform: string, width: string, transformOrigin: string}}
- */
- getCoverStyle: function getCoverStyle(faceName) {
- var cover = this.getFaceCover(faceName);
-
- if (!cover) {
- return {};
- }
-
- var detections = cover.faceDetections;
- var detection = detections.find(function (detection) {
- return detection.title === faceName;
- }); // Zoom into the picture so that the face fills the --photos-face-width box nicely
- // if the face is larger than the image, we don't zoom out (reason for the Math.max)
-
- var zoom = Math.max(1, 1 / detection.width * 0.4);
- var horizontalCenterOfFace = (detection.x + detection.width / 2) * 100;
- var verticalCenterOfFace = (detection.y + detection.height / 2) * 100;
- return {
- // We assume that the image is inside a div with width: var(--photos-face-width)
- width: '100%',
- // we translate the image so that the center of the detected face is in the center of the --photos-face-width box
- // and add the zoom
- transform: "translate(calc( var(--photos-face-width)/2 - ".concat(horizontalCenterOfFace, "% ), calc( var(--photos-face-width)/2 - ").concat(verticalCenterOfFace, "% )) scale(").concat(zoom, ")"),
- // this is necessary for the zoom to zoom toward the center of the face
- transformOrigin: "".concat(horizontalCenterOfFace, "% ").concat(verticalCenterOfFace, "%")
- };
- }
- }
-});
-
-/***/ }),
-
-/***/ "./src/mixins/FetchFacesMixin.js":
-/*!***************************************!*\
- !*** ./src/mixins/FetchFacesMixin.js ***!
- \***************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vuex */ "./node_modules/vuex/dist/vuex.esm.js");
-/* harmony import */ var _nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @nextcloud/dialogs */ "./node_modules/@nextcloud/dialogs/dist/index.es.js");
-/* harmony import */ var _nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nextcloud/auth */ "./node_modules/@nextcloud/auth/dist/index.esm.js");
-/* harmony import */ var _services_DavClient_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/DavClient.js */ "./src/services/DavClient.js");
-/* harmony import */ var _services_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/logger.js */ "./src/services/logger.js");
-/* harmony import */ var _services_DavRequest__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../services/DavRequest */ "./src/services/DavRequest.js");
-/* harmony import */ var _utils_fileUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/fileUtils */ "./src/utils/fileUtils.js");
-/* harmony import */ var _AbortControllerMixin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./AbortControllerMixin */ "./src/mixins/AbortControllerMixin.js");
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
-
-function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
-
-/**
- * @copyright Copyright (c) 2022 Louis Chemineau
- *
- * @author Louis Chemineau
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
-
-
-
-
-
-
-
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- name: 'FetchFacesMixin',
- data: function data() {
- return {
- errorFetchingFaces: null,
- loadingFaces: false,
- errorFetchingFiles: null,
- loadingFiles: false
- };
- },
- mixins: [_AbortControllerMixin__WEBPACK_IMPORTED_MODULE_6__["default"]],
- beforeMount: function beforeMount() {
- var _this = this;
-
- return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
- return regeneratorRuntime.wrap(function _callee$(_context) {
- while (1) {
- switch (_context.prev = _context.next) {
- case 0:
- _this.fetchFaces();
-
- case 1:
- case "end":
- return _context.stop();
- }
- }
- }, _callee);
- }))();
- },
- computed: _objectSpread({}, (0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapGetters)(['faces'])),
- methods: _objectSpread(_objectSpread({}, (0,vuex__WEBPACK_IMPORTED_MODULE_7__.mapActions)(['appendFiles'])), {}, {
- fetchFaces: function fetchFaces() {
- var _this2 = this;
-
- return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
- var _getCurrentUser, faces;
-
- return regeneratorRuntime.wrap(function _callee2$(_context2) {
- while (1) {
- switch (_context2.prev = _context2.next) {
- case 0:
- if (!_this2.loadingFaces) {
- _context2.next = 2;
- break;
- }
-
- return _context2.abrupt("return");
-
- case 2:
- if (!Object.keys(_this2.faces).length) {
- _context2.next = 4;
- break;
- }
-
- return _context2.abrupt("return");
-
- case 4:
- _context2.prev = 4;
- _this2.loadingFaces = true;
- _this2.errorFetchingFaces = null;
- _context2.next = 9;
- return _services_DavClient_js__WEBPACK_IMPORTED_MODULE_2__["default"].getDirectoryContents("/recognize/".concat((_getCurrentUser = (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid, "/faces/"), {
- signal: _this2.abortController.signal
- });
-
- case 9:
- faces = _context2.sent;
-
- _this2.$store.dispatch('addFaces', {
- faces: faces
- });
-
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug("[FetchFacesMixin] Fetched ".concat(faces.length, " new faces: "), faces);
- _context2.next = 19;
- break;
-
- case 14:
- _context2.prev = 14;
- _context2.t0 = _context2["catch"](4);
-
- if (_context2.t0.response && _context2.t0.response.status) {
- if (_context2.t0.response.status === 404) {
- _this2.errorFetchingFaces = 404;
- } else {
- _this2.errorFetchingFaces = _context2.t0;
- }
- }
-
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].error(t('photos', 'Failed to fetch faces list.'), _context2.t0);
- (0,_nextcloud_dialogs__WEBPACK_IMPORTED_MODULE_0__.showError)(t('photos', 'Failed to fetch faces list.'));
-
- case 19:
- _context2.prev = 19;
- _this2.loadingFaces = false;
- return _context2.finish(19);
-
- case 22:
- case "end":
- return _context2.stop();
- }
- }
- }, _callee2, null, [[4, 14, 19, 22]]);
- }))();
- },
- fetchFaceContent: function fetchFaceContent(faceName, force) {
- var _this3 = this;
-
- return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
- var _getCurrentUser2, _yield$client$getDire, fetchedFiles, fileIds;
-
- return regeneratorRuntime.wrap(function _callee3$(_context3) {
- while (1) {
- switch (_context3.prev = _context3.next) {
- case 0:
- if (!_this3.loadingFiles) {
- _context3.next = 2;
- break;
- }
-
- return _context3.abrupt("return");
-
- case 2:
- if (!(!force && _this3.facesFiles[faceName] && _this3.facesFiles[faceName].length)) {
- _context3.next = 4;
- break;
- }
-
- return _context3.abrupt("return");
-
- case 4:
- _context3.prev = 4;
- _this3.errorFetchingFiles = null;
- _this3.loadingFiles = true;
- _context3.next = 9;
- return _services_DavClient_js__WEBPACK_IMPORTED_MODULE_2__["default"].getDirectoryContents("/recognize/".concat((_getCurrentUser2 = (0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)()) === null || _getCurrentUser2 === void 0 ? void 0 : _getCurrentUser2.uid, "/faces/").concat(faceName), {
- data: _services_DavRequest__WEBPACK_IMPORTED_MODULE_4__["default"],
- details: true,
- signal: _this3.abortController.signal
- });
-
- case 9:
- _yield$client$getDire = _context3.sent;
- fetchedFiles = _yield$client$getDire.data;
- fetchedFiles = fetchedFiles.map(function (file) {
- return (0,_utils_fileUtils__WEBPACK_IMPORTED_MODULE_5__.genFileInfo)(file);
- }).map(function (file) {
- return _objectSpread(_objectSpread({}, file), {}, {
- filename: file.realpath.replace("/".concat((0,_nextcloud_auth__WEBPACK_IMPORTED_MODULE_1__.getCurrentUser)().uid, "/files"), '')
- });
- });
- fileIds = fetchedFiles.map(function (file) {
- return '' + file.fileid;
- });
-
- _this3.appendFiles(fetchedFiles);
-
- if (!(fetchedFiles.length > 0)) {
- _context3.next = 17;
- break;
- }
-
- _context3.next = 17;
- return _this3.$store.commit('addFilesToFace', {
- faceName: faceName,
- fileIdsToAdd: fileIds
- });
-
- case 17:
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].debug("[FetchFacesMixin] Fetched ".concat(fileIds.length, " new files: "), fileIds);
- _context3.next = 24;
- break;
-
- case 20:
- _context3.prev = 20;
- _context3.t0 = _context3["catch"](4);
-
- if (_context3.t0.response && _context3.t0.response.status) {
- if (_context3.t0.response.status === 404) {
- _this3.errorFetchingFiles = 404;
- } else {
- _this3.errorFetchingFiles = _context3.t0;
- }
- } // cancelled request, moving on...
-
-
- _services_logger_js__WEBPACK_IMPORTED_MODULE_3__["default"].error('Error fetching face files', _context3.t0);
-
- case 24:
- _context3.prev = 24;
- _this3.loadingFiles = false;
- return _context3.finish(24);
-
- case 27:
- case "end":
- return _context3.stop();
- }
- }
- }, _callee3, null, [[4, 20, 24, 27]]);
- }))();
- }
- })
-});
-
-/***/ })
-
-}]);
-//# sourceMappingURL=photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js.map?v=32ecf436be4947895a5d
\ No newline at end of file
diff --git a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js.map b/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js.map
deleted file mode 100644
index f87c19489..000000000
--- a/js/photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"photos-src_mixins_FaceCoverMixin_js-src_mixins_FetchFacesMixin_js.js?v=32ecf436be4947895a5d","mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","sources":["webpack:///photos/src/mixins/FaceCoverMixin.js","webpack:///photos/src/mixins/FetchFacesMixin.js"],"sourcesContent":["function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * @copyright Copyright (c) 2022 Marcel Klehr \n *\n * @author Marcel Klehr \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 .\n *\n */\nimport { mapGetters } from 'vuex';\nimport he from 'he';\nexport default {\n name: 'FaceCoverMixin',\n computed: _objectSpread({}, mapGetters(['faces', 'facesFiles', 'files'])),\n methods: {\n getFaceCover: function getFaceCover(faceName) {\n var _this = this;\n\n // Give high scores for faces that intersect with the edge of the picture (with a margin of half the face size)\n var scoreFacePosition = function scoreFacePosition(faceDetection) {\n return Math.max(0, -1 * (faceDetection.x - faceDetection.width * 0.5)) + Math.max(0, -1 * (faceDetection.y - faceDetection.height * 0.5)) + Math.max(0, -1 * (1 - (faceDetection.x + faceDetection.width) - faceDetection.width * 0.5)) + Math.max(0, -1 * (1 - (faceDetection.y + faceDetection.height) - faceDetection.height * 0.5));\n };\n\n return (this.facesFiles[faceName] || []).slice(0, 25).map(function (fileId) {\n return _this.files[fileId];\n }).map(function (file) {\n return _objectSpread(_objectSpread({}, file), {}, {\n faceDetections: JSON.parse(he.decode(file.faceDetections))\n });\n }) // sort larges face first\n .sort(function (a, b) {\n return b.faceDetections.find(function (d) {\n return d.title === faceName;\n }).width - a.faceDetections.find(function (d) {\n return d.title === faceName;\n }).width;\n }) // sort fewest face detections first\n .sort(function (a, b) {\n return a.faceDetections.length - b.faceDetections.length;\n }) // Sort faces that are at the edge last\n .sort(function (a, b) {\n return scoreFacePosition(a.faceDetections.find(function (d) {\n return d.title === faceName;\n })) - scoreFacePosition(b.faceDetections.find(function (d) {\n return d.title === faceName;\n }));\n })[0];\n },\n\n /**\n * This will produce an inline style to apply to images\n * to zoom toward the detected face\n *\n * @param faceName\n * @return {{}|{transform: string, width: string, transformOrigin: string}}\n */\n getCoverStyle: function getCoverStyle(faceName) {\n var cover = this.getFaceCover(faceName);\n\n if (!cover) {\n return {};\n }\n\n var detections = cover.faceDetections;\n var detection = detections.find(function (detection) {\n return detection.title === faceName;\n }); // Zoom into the picture so that the face fills the --photos-face-width box nicely\n // if the face is larger than the image, we don't zoom out (reason for the Math.max)\n\n var zoom = Math.max(1, 1 / detection.width * 0.4);\n var horizontalCenterOfFace = (detection.x + detection.width / 2) * 100;\n var verticalCenterOfFace = (detection.y + detection.height / 2) * 100;\n return {\n // We assume that the image is inside a div with width: var(--photos-face-width)\n width: '100%',\n // we translate the image so that the center of the detected face is in the center of the --photos-face-width box\n // and add the zoom\n transform: \"translate(calc( var(--photos-face-width)/2 - \".concat(horizontalCenterOfFace, \"% ), calc( var(--photos-face-width)/2 - \").concat(verticalCenterOfFace, \"% )) scale(\").concat(zoom, \")\"),\n // this is necessary for the zoom to zoom toward the center of the face\n transformOrigin: \"\".concat(horizontalCenterOfFace, \"% \").concat(verticalCenterOfFace, \"%\")\n };\n }\n }\n};","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\n/**\n * @copyright Copyright (c) 2022 Louis Chemineau \n *\n * @author Louis Chemineau \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 .\n *\n */\nimport { mapActions, mapGetters } from 'vuex';\nimport { showError } from '@nextcloud/dialogs';\nimport { getCurrentUser } from '@nextcloud/auth';\nimport client from '../services/DavClient.js';\nimport logger from '../services/logger.js';\nimport DavRequest from '../services/DavRequest';\nimport { genFileInfo } from '../utils/fileUtils';\nimport AbortControllerMixin from './AbortControllerMixin';\nexport default {\n name: 'FetchFacesMixin',\n data: function data() {\n return {\n errorFetchingFaces: null,\n loadingFaces: false,\n errorFetchingFiles: null,\n loadingFiles: false\n };\n },\n mixins: [AbortControllerMixin],\n beforeMount: function beforeMount() {\n var _this = this;\n\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _this.fetchFaces();\n\n case 1:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }))();\n },\n computed: _objectSpread({}, mapGetters(['faces'])),\n methods: _objectSpread(_objectSpread({}, mapActions(['appendFiles'])), {}, {\n fetchFaces: function fetchFaces() {\n var _this2 = this;\n\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {\n var _getCurrentUser, faces;\n\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!_this2.loadingFaces) {\n _context2.next = 2;\n break;\n }\n\n return _context2.abrupt(\"return\");\n\n case 2:\n if (!Object.keys(_this2.faces).length) {\n _context2.next = 4;\n break;\n }\n\n return _context2.abrupt(\"return\");\n\n case 4:\n _context2.prev = 4;\n _this2.loadingFaces = true;\n _this2.errorFetchingFaces = null;\n _context2.next = 9;\n return client.getDirectoryContents(\"/recognize/\".concat((_getCurrentUser = getCurrentUser()) === null || _getCurrentUser === void 0 ? void 0 : _getCurrentUser.uid, \"/faces/\"), {\n signal: _this2.abortController.signal\n });\n\n case 9:\n faces = _context2.sent;\n\n _this2.$store.dispatch('addFaces', {\n faces: faces\n });\n\n logger.debug(\"[FetchFacesMixin] Fetched \".concat(faces.length, \" new faces: \"), faces);\n _context2.next = 19;\n break;\n\n case 14:\n _context2.prev = 14;\n _context2.t0 = _context2[\"catch\"](4);\n\n if (_context2.t0.response && _context2.t0.response.status) {\n if (_context2.t0.response.status === 404) {\n _this2.errorFetchingFaces = 404;\n } else {\n _this2.errorFetchingFaces = _context2.t0;\n }\n }\n\n logger.error(t('photos', 'Failed to fetch faces list.'), _context2.t0);\n showError(t('photos', 'Failed to fetch faces list.'));\n\n case 19:\n _context2.prev = 19;\n _this2.loadingFaces = false;\n return _context2.finish(19);\n\n case 22:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, null, [[4, 14, 19, 22]]);\n }))();\n },\n fetchFaceContent: function fetchFaceContent(faceName, force) {\n var _this3 = this;\n\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n var _getCurrentUser2, _yield$client$getDire, fetchedFiles, fileIds;\n\n return regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!_this3.loadingFiles) {\n _context3.next = 2;\n break;\n }\n\n return _context3.abrupt(\"return\");\n\n case 2:\n if (!(!force && _this3.facesFiles[faceName] && _this3.facesFiles[faceName].length)) {\n _context3.next = 4;\n break;\n }\n\n return _context3.abrupt(\"return\");\n\n case 4:\n _context3.prev = 4;\n _this3.errorFetchingFiles = null;\n _this3.loadingFiles = true;\n _context3.next = 9;\n return client.getDirectoryContents(\"/recognize/\".concat((_getCurrentUser2 = getCurrentUser()) === null || _getCurrentUser2 === void 0 ? void 0 : _getCurrentUser2.uid, \"/faces/\").concat(faceName), {\n data: DavRequest,\n details: true,\n signal: _this3.abortController.signal\n });\n\n case 9:\n _yield$client$getDire = _context3.sent;\n fetchedFiles = _yield$client$getDire.data;\n fetchedFiles = fetchedFiles.map(function (file) {\n return genFileInfo(file);\n }).map(function (file) {\n return _objectSpread(_objectSpread({}, file), {}, {\n filename: file.realpath.replace(\"/\".concat(getCurrentUser().uid, \"/files\"), '')\n });\n });\n fileIds = fetchedFiles.map(function (file) {\n return '' + file.fileid;\n });\n\n _this3.appendFiles(fetchedFiles);\n\n if (!(fetchedFiles.length > 0)) {\n _context3.next = 17;\n break;\n }\n\n _context3.next = 17;\n return _this3.$store.commit('addFilesToFace', {\n faceName: faceName,\n fileIdsToAdd: fileIds\n });\n\n case 17:\n logger.debug(\"[FetchFacesMixin] Fetched \".concat(fileIds.length, \" new files: \"), fileIds);\n _context3.next = 24;\n break;\n\n case 20:\n _context3.prev = 20;\n _context3.t0 = _context3[\"catch\"](4);\n\n if (_context3.t0.response && _context3.t0.response.status) {\n if (_context3.t0.response.status === 404) {\n _this3.errorFetchingFiles = 404;\n } else {\n _this3.errorFetchingFiles = _context3.t0;\n }\n } // cancelled request, moving on...\n\n\n logger.error('Error fetching face files', _context3.t0);\n\n case 24:\n _context3.prev = 24;\n _this3.loadingFiles = false;\n return _context3.finish(24);\n\n case 27:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, null, [[4, 20, 24, 27]]);\n }))();\n }\n })\n};"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js b/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js
deleted file mode 100644
index 287f3fe43..000000000
--- a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! For license information please see photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js.LICENSE.txt */
-"use strict";(self.webpackChunkphotos=self.webpackChunkphotos||[]).push([["src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a"],{12945:(n,e,o)=>{o.d(e,{Z:()=>h});var a=o(20629),r=o(80351),l=o.n(r),i=o(82880),s=o(45994),c=o(81067),u=o(59537),m=o(94236);function p(t){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},p(t)}function b(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,o)}return e}function d(t){for(var n=1;n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t',details:!0,signal:n.abortController.signal});case 7:a=e.sent,r=a.data.filter((function(t){var n;return t.filename!=="/photos/".concat(null===(n=(0,s.ts)())||void 0===n?void 0:n.uid,"/albums")})).map((function(t){return""===t.props.collaborators?t.props.collaborators=[]:"object"===p(t.props.collaborators.collaborator)&&(Array.isArray(t.props.collaborators.collaborator)?t.props.collaborators=t.props.collaborators.collaborator:t.props.collaborators=[t.props.collaborators.collaborator]),t})).map((function(t){return(0,m.AX)(t)})).map((function(t){var e,o,a=JSON.parse(null!==(e=null===(o=t.dateRange)||void 0===o?void 0:o.replace(/"/g,'"'))&&void 0!==e?e:"{}");null===a.start&&(a.start=l()().unix(),a.end=l()().unix());var r={startDate:l().unix(a.start).format("MMMM YYYY"),endDate:l().unix(a.end).format("MMMM YYYY")};return d(d({},t),{},r.startDate===r.endDate?{date:r.startDate}:{date:n.t("photos","{startDate} to {endDate}",r)})})),n.$store.dispatch("addAlbums",{albums:r}),u.Z.debug("[FetchAlbumsMixin] Fetched ".concat(r.length," new files: "),r),e.next=26;break;case 13:if(e.prev=13,e.t0=e.catch(2),404!==(null===(b=e.t0.response)||void 0===b?void 0:b.status)){e.next=19;break}n.errorFetchingAlbums=404,e.next=24;break;case 19:if("ERR_CANCELED"!==e.t0.code){e.next=23;break}return e.abrupt("return");case 23:n.errorFetchingAlbums=e.t0;case 24:u.Z.error(t("photos","Failed to fetch albums list."),e.t0),(0,i.x2)(t("photos","Failed to fetch albums list."));case 26:return e.prev=26,n.loadingAlbums=!1,e.finish(26);case 29:case"end":return e.stop()}}),e,null,[[2,13,26,29]])})))()}}}},17963:(t,n,e)=>{e.d(n,{Z:()=>i});var o=e(87537),a=e.n(o),r=e(23645),l=e.n(r)()(a());l.push([t.id,".album-form[data-v-33f82244]{display:flex;flex-direction:column;height:350px;padding:16px}.album-form .form-title[data-v-33f82244]{font-weight:bold}.album-form .form-subtitle[data-v-33f82244]{color:var(--color-text-lighter)}.album-form .form-inputs[data-v-33f82244]{flex-grow:1;justify-items:flex-end}.album-form .form-inputs input[data-v-33f82244]{width:100%}.album-form .form-inputs label[data-v-33f82244]{display:flex;margin-top:16px}.album-form .form-inputs label[data-v-33f82244] svg{margin-right:12px}.album-form .form-buttons[data-v-33f82244]{display:flex;justify-content:space-between}.album-form .form-buttons .left-buttons[data-v-33f82244],.album-form .form-buttons .right-buttons[data-v-33f82244]{display:flex}.album-form .form-buttons .right-buttons[data-v-33f82244]{justify-content:flex-end}.album-form .form-buttons button[data-v-33f82244]{margin-right:16px}.left-buttons[data-v-33f82244]{flex-grow:1}","",{version:3,sources:["webpack://./src/components/AlbumForm.vue"],names:[],mappings:"AAwOA,6BACC,YAAA,CACA,qBAAA,CACA,YAAA,CACA,YAAA,CAEA,yCACC,gBAAA,CAGD,4CACC,+BAAA,CAGD,0CACC,WAAA,CACA,sBAAA,CAEA,gDACC,UAAA,CAGD,gDACC,YAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAKH,2CACC,YAAA,CACA,6BAAA,CAEA,mHACC,YAAA,CAGD,0DACC,wBAAA,CAGD,kDACC,iBAAA,CAKH,+BACC,WAAA",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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.album-form {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 350px;\n\tpadding: 16px;\n\n\t.form-title {\n\t\tfont-weight: bold;\n\t}\n\n\t.form-subtitle {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t.form-inputs {\n\t\tflex-grow: 1;\n\t\tjustify-items: flex-end;\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tlabel {\n\t\t\tdisplay: flex;\n\t\t\tmargin-top: 16px;\n\n\t\t\t::v-deep svg {\n\t\t\t\tmargin-right: 12px;\n\t\t\t}\n\t\t}\n\t}\n\n\t.form-buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\n\t\t.left-buttons, .right-buttons {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t.right-buttons {\n\t\t\tjustify-content: flex-end;\n\t\t}\n\n\t\tbutton {\n\t\t\tmargin-right: 16px;\n\t\t}\n\t}\n}\n\n.left-buttons {\n\tflex-grow: 1;\n}\n'],sourceRoot:""}]);const i=l},92575:(t,n,e)=>{e.d(n,{Z:()=>i});var o=e(87537),a=e.n(o),r=e(23645),l=e.n(r)()(a());l.push([t.id,".manage-collaborators[data-v-995bfdfc]{display:flex;flex-direction:column;padding:20px}.manage-collaborators__title[data-v-995bfdfc]{font-weight:bold}.manage-collaborators__subtitle[data-v-995bfdfc]{color:var(--color-text-lighter)}.manage-collaborators__public-link-button[data-v-995bfdfc]{margin:4px 0}.manage-collaborators__form[data-v-995bfdfc]{margin-top:4px 0;display:flex;flex-direction:column;height:500px}.manage-collaborators__form__input[data-v-995bfdfc]{flex-grow:1;justify-items:flex-end;position:relative}.manage-collaborators__form__input .magnify-icon[data-v-995bfdfc]{position:absolute;top:10px;left:8px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.manage-collaborators__form__input input[data-v-995bfdfc]{width:100%;padding-left:34px}.manage-collaborators__form__input .loader[data-v-995bfdfc]{position:absolute;top:-4px;right:4px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.manage-collaborators__form__input .loader[data-v-995bfdfc] .icon-loading::after{height:16px;width:16px}.manage-collaborators__form__selection[data-v-995bfdfc]{min-height:25px;padding:8px}.manage-collaborators__form__selection li[data-v-995bfdfc]{margin-right:4px;display:inline-block}.manage-collaborators__form__selection li .close-icon[data-v-995bfdfc]{cursor:pointer}.manage-collaborators__form__list__result[data-v-995bfdfc]{padding:8px;border-radius:100px;box-sizing:border-box}.manage-collaborators__form__list__result[data-v-995bfdfc],.manage-collaborators__form__list__result *[data-v-995bfdfc]{cursor:pointer}.manage-collaborators__form__list__result[data-v-995bfdfc]:hover,.manage-collaborators__form__list__result--selected[data-v-995bfdfc]{background:var(--color-background-dark)}.manage-collaborators .slot-buttons[data-v-995bfdfc]{display:flex;justify-content:flex-end}","",{version:3,sources:["webpack://./src/components/CollaboratorsSelectionForm.vue"],names:[],mappings:"AAiRA,uCACC,YAAA,CACA,qBAAA,CACA,YAAA,CAEA,8CACC,gBAAA,CAGD,iDACC,+BAAA,CAGD,2DACC,YAAA,CAGD,6CACC,gBAAA,CACA,YAAA,CACA,qBAAA,CACA,YAAA,CAEA,oDACC,WAAA,CACA,sBAAA,CACA,iBAAA,CAEA,kEACC,iBAAA,CACA,QAAA,CACA,QAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CAGD,0DACC,UAAA,CACA,iBAAA,CAGD,4DACC,iBAAA,CACA,QAAA,CACA,SAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CAEA,kFACC,WAAA,CACA,UAAA,CAKH,wDACC,eAAA,CACA,WAAA,CAEA,2DACC,gBAAA,CACA,oBAAA,CAEA,uEACC,cAAA,CAMF,2DACC,WAAA,CACA,mBAAA,CACA,qBAAA,CAEA,wHACC,cAAA,CAGD,sIACC,uCAAA,CAMJ,qDACC,YAAA,CACA,wBAAA",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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.manage-collaborators {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 20px;\n\n\t&__title {\n\t\tfont-weight: bold;\n\t}\n\n\t&__subtitle {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&__public-link-button {\n\t\tmargin: 4px 0;\n\t}\n\n\t&__form {\n\t\tmargin-top: 4px 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\theight: 500px;\n\n\t\t&__input {\n\t\t\tflex-grow: 1;\n\t\t\tjustify-items: flex-end;\n\t\t\tposition: relative;\n\n\t\t\t.magnify-icon {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 10px;\n\t\t\t\tleft: 8px;\n\t\t\t\twidth: fit-content;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tpadding-left: 34px;\n\t\t\t}\n\n\t\t\t.loader {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: -4px;\n\t\t\t\tright: 4px;\n\t\t\t\twidth: fit-content;\n\n\t\t\t\t::v-deep .icon-loading::after {\n\t\t\t\t\theight: 16px;\n\t\t\t\t\twidth: 16px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__selection {\n\t\t\tmin-height: 25px;\n\t\t\tpadding: 8px;\n\n\t\t\tli {\n\t\t\t\tmargin-right: 4px;\n\t\t\t\tdisplay: inline-block;\n\n\t\t\t\t.close-icon {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__list {\n\t\t\t&__result {\n\t\t\t\tpadding: 8px;\n\t\t\t\tborder-radius: 100px;\n\t\t\t\tbox-sizing: border-box;\n\n\t\t\t\t&, & * {\n\t\t\t\t\tcursor: pointer;\n\t\t\t\t}\n\n\t\t\t\t&:hover, &--selected {\n\t\t\t\t\tbackground: var(--color-background-dark);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.slot-buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: flex-end;\n\t}\n}\n'],sourceRoot:""}]);const i=l},40502:(t,n,e)=>{e.d(n,{Z:()=>a});const o={name:"PlusIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};const a=(0,e(51900).Z)(o,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon plus-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports},75400:(t,n,e)=>{e.d(n,{Z:()=>a});const o={name:"SendIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};const a=(0,e(51900).Z)(o,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon send-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M2,21L23,12L2,3V10L17,12L2,14V21Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports},14684:(t,n,e)=>{e.d(n,{Z:()=>j});var o=e(20629),a=e(93050);const r={name:"AccountMultiplePlusIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var l=e(51900);const i=(0,l.Z)(r,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon account-multiple-plus-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M19 17V19H7V17S7 13 13 13 19 17 19 17M16 8A3 3 0 1 0 13 11A3 3 0 0 0 16 8M19.2 13.06A5.6 5.6 0 0 1 21 17V19H24V17S24 13.55 19.2 13.06M18 5A2.91 2.91 0 0 0 17.11 5.14A5 5 0 0 1 17.11 10.86A2.91 2.91 0 0 0 18 11A3 3 0 0 0 18 5M8 10H5V7H3V10H0V12H3V15H5V12H8Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var s=e(75400),c=e(33476),u=e(80351),m=e.n(u),p=e(13096);function b(t,n,e,o,a,r,l){try{var i=t[r](l),s=i.value}catch(t){return void e(t)}i.done?n(s):Promise.resolve(s).then(o,a)}function d(t){return function(){var n=this,e=arguments;return new Promise((function(o,a){var r=t.apply(n,e);function l(t){b(r,o,a,l,i,"next",t)}function i(t){b(r,o,a,l,i,"throw",t)}l(void 0)}))}}function f(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,o)}return e}function A(t){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:[];""===this.albumName||this.loading||(this.editMode?this.handleUpdateAlbum():this.handleCreateAlbum(t))},handleCreateAlbum:function(){var t=arguments,n=this;return d(regeneratorRuntime.mark((function e(){var o,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=t.length>0&&void 0!==t[0]?t[0]:[],e.prev=1,n.loading=!0,e.next=5,n.createAlbum({album:{basename:n.albumName,nbItems:0,location:n.albumLocation,lastPhoto:-1,date:m()().format("MMMM YYYY"),collaborators:o}});case 5:if(a=e.sent,""===n.albumLocation&&0===o.length){e.next=10;break}return e.next=9,n.updateAlbum({albumName:n.albumName,properties:{location:n.albumLocation,collaborators:o}});case 9:a=e.sent;case 10:n.$emit("done",{album:a});case 11:return e.prev=11,n.loading=!1,e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[1,,11,14]])})))()},handleUpdateAlbum:function(){var t=this;return d(regeneratorRuntime.mark((function n(){var e;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(n.prev=0,t.loading=!0,e=A({},t.album),t.album.basename===t.albumName){n.next=7;break}return n.next=6,t.renameAlbum({currentAlbumName:t.album.basename,newAlbumName:t.albumName});case 6:e=n.sent;case 7:if(t.album.location===t.albumLocation){n.next=11;break}return n.next=10,t.updateAlbum({albumName:t.albumName,properties:{location:t.albumLocation}});case 10:e.location=n.sent;case 11:t.$emit("done",{album:e});case 12:return n.prev=12,t.loading=!1,n.finish(12);case 15:case"end":return n.stop()}}),n,null,[[0,,12,15]])})))()},back:function(){this.$emit("back")}})};var C=e(93379),v=e.n(C),_=e(7795),y=e.n(_),x=e(90569),k=e.n(x),w=e(3565),O=e.n(w),B=e(19216),S=e.n(B),N=e(44589),L=e.n(N),P=e(17963),M={};M.styleTagTransform=L(),M.setAttributes=O(),M.insert=k().bind(null,"head"),M.domAPI=y(),M.insertStyleElement=S();v()(P.Z,M);P.Z&&P.Z.locals&&P.Z.locals;const j=(0,l.Z)(h,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.showCollaboratorView?e("CollaboratorsSelectionForm",{attrs:{"album-name":t.albumName,"allow-public-link":!1},scopedSlots:t._u([{key:"default",fn:function(n){var o=n.collaborators;return[e("span",{staticClass:"left-buttons"},[e("NcButton",{attrs:{"aria-label":t.t("photos","Back to the new album form."),type:"tertiary"},on:{click:function(n){t.showCollaboratorView=!1}}},[t._v("\n\t\t\t\t"+t._s(t.t("photos","Back"))+"\n\t\t\t")])],1),t._v(" "),e("span",{staticClass:"right-buttons"},[e("NcButton",{attrs:{"aria-label":t.editMode?t.t("photos","Save."):t.t("photos","Create the album."),type:"primary",disabled:""===t.albumName.trim()||t.loading},on:{click:function(n){return t.submit(o)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("Send")]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+"\n\t\t\t")])],1)]}}])}):e("form",{staticClass:"album-form",on:{submit:function(n){return n.preventDefault(),t.submit.apply(null,arguments)}}},[e("div",{staticClass:"form-inputs"},[e("NcTextField",{ref:"nameInput",attrs:{value:t.albumName,type:"text",name:"name",required:!0,autofocus:"true",placeholder:t.t("photos","Name of the album")},on:{"update:value":function(n){t.albumName=n}}}),t._v(" "),e("label",[e("MapMarker"),e("NcTextField",{attrs:{value:t.albumLocation,name:"location",type:"text",placeholder:t.t("photos","Location of the album")},on:{"update:value":function(n){t.albumLocation=n}}})],1)],1),t._v(" "),e("div",{staticClass:"form-buttons"},[e("span",{staticClass:"left-buttons"},[t.displayBackButton?e("NcButton",{attrs:{"aria-label":t.t("photos","Go back to the previous view."),type:"tertiary"},on:{click:t.back}},[t._v("\n\t\t\t\t"+t._s(t.t("photos","Back"))+"\n\t\t\t")]):t._e()],1),t._v(" "),e("span",{staticClass:"right-buttons"},[t.editMode?t._e():e("NcButton",{attrs:{"aria-label":t.t("photos","Go to the add collaborators view."),type:"secondary",disabled:""===t.albumName.trim()||t.loading},on:{click:function(n){t.showCollaboratorView=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AccountMultiplePlus")]},proxy:!0}],null,!1,1531126728)},[t._v("\n\t\t\t\t"+t._s(t.t("photos","Add collaborators"))+"\n\t\t\t")]),t._v(" "),e("NcButton",{attrs:{"aria-label":t.editMode?t.t("photos","Save."):t.t("photos","Create the album."),type:"primary",disabled:""===t.albumName||t.loading},on:{click:function(n){return t.submit()}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("Send")]},proxy:!0}],null,!1,3914512768)},[t._v("\n\t\t\t\t"+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+"\n\t\t\t")])],1)])])}),[],!1,null,"33f82244",null).exports},13096:(n,e,o)=>{o.d(e,{Z:()=>R});const a={name:"MagnifyIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var r=o(51900);const l=(0,r.Z)(a,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon magnify-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;const i={name:"ContentCopyIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};const s=(0,r.Z)(i,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon content-copy-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var c=o(14625),u=o(31894),m=o(26937),p=o(82880),b=o(45994),d=o(79753),f=o(33476),A=o(20561),g=o(59537);function h(t,n,e,o,a,r,l){try{var i=t[r](l),s=i.value}catch(t){return void e(t)}i.done?n(s):Promise.resolve(s).then(o,a)}function C(t){return function(){var n=this,e=arguments;return new Promise((function(o,a){var r=t.apply(n,e);function l(t){h(r,o,a,l,i,"next",t)}function i(t){h(r,o,a,l,i,"throw",t)}l(void 0)}))}}function v(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,o)}return e}function _(t){for(var n=1;n
- *
- * @author Louis Chemineau
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
diff --git a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js.map b/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js.map
deleted file mode 100644
index a67e1466c..000000000
--- a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-4c933a.js?v=573555613b96f2192c91","mappings":"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","sources":["webpack:///photos/src/mixins/FetchAlbumsMixin.js","webpack:///photos/src/components/AlbumForm.vue?vue&type=style&index=0&id=33f82244&lang=scss&scoped=true&","webpack:///photos/src/components/CollaboratorsSelectionForm.vue?vue&type=style&index=0&id=995bfdfc&lang=scss&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/Plus.vue","webpack:///photos/node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/Plus.vue?80b4","webpack:///photos/node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=968bec46&","webpack:///photos/node_modules/vue-material-design-icons/Send.vue","webpack:///photos/node_modules/vue-material-design-icons/Send.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/Send.vue?0295","webpack:///photos/node_modules/vue-material-design-icons/Send.vue?vue&type=template&id=46f29e66&","webpack:///photos/src/components/AlbumForm.vue?vue&type=template&id=33f82244&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/AccountMultiplePlus.vue","webpack:///photos/node_modules/vue-material-design-icons/AccountMultiplePlus.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/AccountMultiplePlus.vue?e9b5","webpack:///photos/node_modules/vue-material-design-icons/AccountMultiplePlus.vue?vue&type=template&id=7e4925e6&","webpack:///photos/src/components/AlbumForm.vue","webpack:///photos/src/components/AlbumForm.vue?vue&type=script&lang=js&","webpack://photos/./src/components/AlbumForm.vue?1eac","webpack://photos/./src/components/AlbumForm.vue?b1d3","webpack:///photos/node_modules/vue-material-design-icons/Magnify.vue","webpack:///photos/node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/Magnify.vue?0775","webpack:///photos/node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=d480a606&","webpack:///photos/node_modules/vue-material-design-icons/ContentCopy.vue","webpack:///photos/node_modules/vue-material-design-icons/ContentCopy.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/ContentCopy.vue?c47c","webpack:///photos/node_modules/vue-material-design-icons/ContentCopy.vue?vue&type=template&id=00bbfaf7&","webpack:///photos/src/components/CollaboratorsSelectionForm.vue","webpack:///photos/src/components/CollaboratorsSelectionForm.vue?vue&type=script&lang=js&","webpack://photos/./src/components/CollaboratorsSelectionForm.vue?f5d2","webpack://photos/./src/components/CollaboratorsSelectionForm.vue?507a","webpack:///photos/src/components/CollaboratorsSelectionForm.vue?vue&type=template&id=995bfdfc&scoped=true&"],"sourcesContent":["/**\n * @copyright Copyright (c) 2022 Louis Chemineau \n *\n * @author Louis Chemineau \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 .\n *\n */\n\nimport { mapGetters } from 'vuex'\n\nimport moment from '@nextcloud/moment'\nimport { showError } from '@nextcloud/dialogs'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nimport client from '../services/DavClient.js'\nimport logger from '../services/logger.js'\nimport { genFileInfo } from '../utils/fileUtils.js'\nimport AbortControllerMixin from './AbortControllerMixin.js'\n\nexport default {\n\tname: 'FetchAlbumsMixin',\n\n\tdata() {\n\t\treturn {\n\t\t\terrorFetchingAlbums: null,\n\t\t\tloadingAlbums: false,\n\t\t}\n\t},\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t],\n\n\tasync beforeMount() {\n\t\tthis.fetchAlbums()\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'albums',\n\t\t]),\n\t},\n\n\tmethods: {\n\t\tasync fetchAlbums() {\n\t\t\tif (this.loadingAlbums) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingAlbums = true\n\t\t\t\tthis.errorFetchingAlbums = null\n\n\t\t\t\tconst response = await client.getDirectoryContents(`/photos/${getCurrentUser()?.uid}/albums`, {\n\t\t\t\t\tdata: `\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t`,\n\t\t\t\t\tdetails: true,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\n\t\t\t\tconst albums = response.data\n\t\t\t\t\t.filter(album => album.filename !== `/photos/${getCurrentUser()?.uid}/albums`)\n\t\t\t\t\t// Ensure that we have a proper collaborators array.\n\t\t\t\t\t.map(album => {\n\t\t\t\t\t\tif (album.props.collaborators === '') {\n\t\t\t\t\t\t\talbum.props.collaborators = []\n\t\t\t\t\t\t} else if (typeof album.props.collaborators.collaborator === 'object') {\n\t\t\t\t\t\t\tif (Array.isArray(album.props.collaborators.collaborator)) {\n\t\t\t\t\t\t\t\talbum.props.collaborators = album.props.collaborators.collaborator\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talbum.props.collaborators = [album.props.collaborators.collaborator]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn album\n\t\t\t\t\t})\n\t\t\t\t\t.map(album => genFileInfo(album))\n\t\t\t\t\t.map(album => {\n\t\t\t\t\t\tconst dateRange = JSON.parse(album.dateRange?.replace(/"/g, '\"') ?? '{}')\n\n\t\t\t\t\t\tif (dateRange.start === null) {\n\t\t\t\t\t\t\tdateRange.start = moment().unix()\n\t\t\t\t\t\t\tdateRange.end = moment().unix()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst dateRangeFormated = {\n\t\t\t\t\t\t\tstartDate: moment.unix(dateRange.start).format('MMMM YYYY'),\n\t\t\t\t\t\t\tendDate: moment.unix(dateRange.end).format('MMMM YYYY'),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dateRangeFormated.startDate === dateRangeFormated.endDate) {\n\t\t\t\t\t\t\treturn { ...album, date: dateRangeFormated.startDate }\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn { ...album, date: this.t('photos', '{startDate} to {endDate}', dateRangeFormated) }\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\tthis.$store.dispatch('addAlbums', { albums })\n\t\t\t\tlogger.debug(`[FetchAlbumsMixin] Fetched ${albums.length} new files: `, albums)\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tthis.errorFetchingAlbums = 404\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.errorFetchingAlbums = error\n\t\t\t\t}\n\t\t\t\tlogger.error(t('photos', 'Failed to fetch albums list.'), error)\n\t\t\t\tshowError(t('photos', 'Failed to fetch albums list.'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAlbums = false\n\t\t\t}\n\t\t},\n\t},\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/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-form[data-v-33f82244]{display:flex;flex-direction:column;height:350px;padding:16px}.album-form .form-title[data-v-33f82244]{font-weight:bold}.album-form .form-subtitle[data-v-33f82244]{color:var(--color-text-lighter)}.album-form .form-inputs[data-v-33f82244]{flex-grow:1;justify-items:flex-end}.album-form .form-inputs input[data-v-33f82244]{width:100%}.album-form .form-inputs label[data-v-33f82244]{display:flex;margin-top:16px}.album-form .form-inputs label[data-v-33f82244] svg{margin-right:12px}.album-form .form-buttons[data-v-33f82244]{display:flex;justify-content:space-between}.album-form .form-buttons .left-buttons[data-v-33f82244],.album-form .form-buttons .right-buttons[data-v-33f82244]{display:flex}.album-form .form-buttons .right-buttons[data-v-33f82244]{justify-content:flex-end}.album-form .form-buttons button[data-v-33f82244]{margin-right:16px}.left-buttons[data-v-33f82244]{flex-grow:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/AlbumForm.vue\"],\"names\":[],\"mappings\":\"AAwOA,6BACC,YAAA,CACA,qBAAA,CACA,YAAA,CACA,YAAA,CAEA,yCACC,gBAAA,CAGD,4CACC,+BAAA,CAGD,0CACC,WAAA,CACA,sBAAA,CAEA,gDACC,UAAA,CAGD,gDACC,YAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAKH,2CACC,YAAA,CACA,6BAAA,CAEA,mHACC,YAAA,CAGD,0DACC,wBAAA,CAGD,kDACC,iBAAA,CAKH,+BACC,WAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.album-form {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\theight: 350px;\\n\\tpadding: 16px;\\n\\n\\t.form-title {\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t.form-subtitle {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t.form-inputs {\\n\\t\\tflex-grow: 1;\\n\\t\\tjustify-items: flex-end;\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tmargin-top: 16px;\\n\\n\\t\\t\\t::v-deep svg {\\n\\t\\t\\t\\tmargin-right: 12px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.form-buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\n\\t\\t.left-buttons, .right-buttons {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\n\\t\\t.right-buttons {\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t}\\n\\n\\t\\tbutton {\\n\\t\\t\\tmargin-right: 16px;\\n\\t\\t}\\n\\t}\\n}\\n\\n.left-buttons {\\n\\tflex-grow: 1;\\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, \".manage-collaborators[data-v-995bfdfc]{display:flex;flex-direction:column;padding:20px}.manage-collaborators__title[data-v-995bfdfc]{font-weight:bold}.manage-collaborators__subtitle[data-v-995bfdfc]{color:var(--color-text-lighter)}.manage-collaborators__public-link-button[data-v-995bfdfc]{margin:4px 0}.manage-collaborators__form[data-v-995bfdfc]{margin-top:4px 0;display:flex;flex-direction:column;height:500px}.manage-collaborators__form__input[data-v-995bfdfc]{flex-grow:1;justify-items:flex-end;position:relative}.manage-collaborators__form__input .magnify-icon[data-v-995bfdfc]{position:absolute;top:10px;left:8px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.manage-collaborators__form__input input[data-v-995bfdfc]{width:100%;padding-left:34px}.manage-collaborators__form__input .loader[data-v-995bfdfc]{position:absolute;top:-4px;right:4px;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.manage-collaborators__form__input .loader[data-v-995bfdfc] .icon-loading::after{height:16px;width:16px}.manage-collaborators__form__selection[data-v-995bfdfc]{min-height:25px;padding:8px}.manage-collaborators__form__selection li[data-v-995bfdfc]{margin-right:4px;display:inline-block}.manage-collaborators__form__selection li .close-icon[data-v-995bfdfc]{cursor:pointer}.manage-collaborators__form__list__result[data-v-995bfdfc]{padding:8px;border-radius:100px;box-sizing:border-box}.manage-collaborators__form__list__result[data-v-995bfdfc],.manage-collaborators__form__list__result *[data-v-995bfdfc]{cursor:pointer}.manage-collaborators__form__list__result[data-v-995bfdfc]:hover,.manage-collaborators__form__list__result--selected[data-v-995bfdfc]{background:var(--color-background-dark)}.manage-collaborators .slot-buttons[data-v-995bfdfc]{display:flex;justify-content:flex-end}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/CollaboratorsSelectionForm.vue\"],\"names\":[],\"mappings\":\"AAiRA,uCACC,YAAA,CACA,qBAAA,CACA,YAAA,CAEA,8CACC,gBAAA,CAGD,iDACC,+BAAA,CAGD,2DACC,YAAA,CAGD,6CACC,gBAAA,CACA,YAAA,CACA,qBAAA,CACA,YAAA,CAEA,oDACC,WAAA,CACA,sBAAA,CACA,iBAAA,CAEA,kEACC,iBAAA,CACA,QAAA,CACA,QAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CAGD,0DACC,UAAA,CACA,iBAAA,CAGD,4DACC,iBAAA,CACA,QAAA,CACA,SAAA,CACA,yBAAA,CAAA,sBAAA,CAAA,iBAAA,CAEA,kFACC,WAAA,CACA,UAAA,CAKH,wDACC,eAAA,CACA,WAAA,CAEA,2DACC,gBAAA,CACA,oBAAA,CAEA,uEACC,cAAA,CAMF,2DACC,WAAA,CACA,mBAAA,CACA,qBAAA,CAEA,wHACC,cAAA,CAGD,sIACC,uCAAA,CAMJ,qDACC,YAAA,CACA,wBAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.manage-collaborators {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tpadding: 20px;\\n\\n\\t&__title {\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&__subtitle {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&__public-link-button {\\n\\t\\tmargin: 4px 0;\\n\\t}\\n\\n\\t&__form {\\n\\t\\tmargin-top: 4px 0;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\theight: 500px;\\n\\n\\t\\t&__input {\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tjustify-items: flex-end;\\n\\t\\t\\tposition: relative;\\n\\n\\t\\t\\t.magnify-icon {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: 10px;\\n\\t\\t\\t\\tleft: 8px;\\n\\t\\t\\t\\twidth: fit-content;\\n\\t\\t\\t}\\n\\n\\t\\t\\tinput {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\tpadding-left: 34px;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.loader {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: -4px;\\n\\t\\t\\t\\tright: 4px;\\n\\t\\t\\t\\twidth: fit-content;\\n\\n\\t\\t\\t\\t::v-deep .icon-loading::after {\\n\\t\\t\\t\\t\\theight: 16px;\\n\\t\\t\\t\\t\\twidth: 16px;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__selection {\\n\\t\\t\\tmin-height: 25px;\\n\\t\\t\\tpadding: 8px;\\n\\n\\t\\t\\tli {\\n\\t\\t\\t\\tmargin-right: 4px;\\n\\t\\t\\t\\tdisplay: inline-block;\\n\\n\\t\\t\\t\\t.close-icon {\\n\\t\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__list {\\n\\t\\t\\t&__result {\\n\\t\\t\\t\\tpadding: 8px;\\n\\t\\t\\t\\tborder-radius: 100px;\\n\\t\\t\\t\\tbox-sizing: border-box;\\n\\n\\t\\t\\t\\t&, & * {\\n\\t\\t\\t\\t\\tcursor: pointer;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:hover, &--selected {\\n\\t\\t\\t\\t\\tbackground: var(--color-background-dark);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.slot-buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: flex-end;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Plus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Plus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Plus.vue?vue&type=template&id=968bec46&\"\nimport script from \"./Plus.vue?vue&type=script&lang=js&\"\nexport * from \"./Plus.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon plus-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,13H13V19H11V13H5V11H11V5H13V11H19V13Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Send.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Send.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Send.vue?vue&type=template&id=46f29e66&\"\nimport script from \"./Send.vue?vue&type=script&lang=js&\"\nexport * from \"./Send.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon send-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\":\"M2,21L23,12L2,3V10L17,12L2,14V21Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.showCollaboratorView)?_c('form',{staticClass:\"album-form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('div',{staticClass:\"form-inputs\"},[_c('NcTextField',{ref:\"nameInput\",attrs:{\"value\":_vm.albumName,\"type\":\"text\",\"name\":\"name\",\"required\":true,\"autofocus\":\"true\",\"placeholder\":_vm.t('photos', 'Name of the album')},on:{\"update:value\":function($event){_vm.albumName=$event}}}),_vm._v(\" \"),_c('label',[_c('MapMarker'),_c('NcTextField',{attrs:{\"value\":_vm.albumLocation,\"name\":\"location\",\"type\":\"text\",\"placeholder\":_vm.t('photos', 'Location of the album')},on:{\"update:value\":function($event){_vm.albumLocation=$event}}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"form-buttons\"},[_c('span',{staticClass:\"left-buttons\"},[(_vm.displayBackButton)?_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Go back to the previous view.'),\"type\":\"tertiary\"},on:{\"click\":_vm.back}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Back'))+\"\\n\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"right-buttons\"},[(!_vm.editMode)?_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Go to the add collaborators view.'),\"type\":\"secondary\",\"disabled\":_vm.albumName.trim() === '' || _vm.loading},on:{\"click\":function($event){_vm.showCollaboratorView = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AccountMultiplePlus')]},proxy:true}],null,false,1531126728)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Add collaborators'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcButton',{attrs:{\"aria-label\":_vm.editMode ? _vm.t('photos', 'Save.') : _vm.t('photos', 'Create the album.'),\"type\":\"primary\",\"disabled\":_vm.albumName === '' || _vm.loading},on:{\"click\":function($event){return _vm.submit()}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('Send')]},proxy:true}],null,false,3914512768)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.editMode ? _vm.t('photos', 'Save') : _vm.t('photos', 'Create album'))+\"\\n\\t\\t\\t\")])],1)])]):_c('CollaboratorsSelectionForm',{attrs:{\"album-name\":_vm.albumName,\"allow-public-link\":false},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar collaborators = ref.collaborators;\nreturn [_c('span',{staticClass:\"left-buttons\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Back to the new album form.'),\"type\":\"tertiary\"},on:{\"click\":function($event){_vm.showCollaboratorView = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Back'))+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),_c('span',{staticClass:\"right-buttons\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.editMode ? _vm.t('photos', 'Save.') : _vm.t('photos', 'Create the album.'),\"type\":\"primary\",\"disabled\":_vm.albumName.trim() === '' || _vm.loading},on:{\"click\":function($event){return _vm.submit(collaborators)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('Send')]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.editMode ? _vm.t('photos', 'Save') : _vm.t('photos', 'Create album'))+\"\\n\\t\\t\\t\")])],1)]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./AccountMultiplePlus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./AccountMultiplePlus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AccountMultiplePlus.vue?vue&type=template&id=7e4925e6&\"\nimport script from \"./AccountMultiplePlus.vue?vue&type=script&lang=js&\"\nexport * from \"./AccountMultiplePlus.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon account-multiple-plus-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 17V19H7V17S7 13 13 13 19 17 19 17M16 8A3 3 0 1 0 13 11A3 3 0 0 0 16 8M19.2 13.06A5.6 5.6 0 0 1 21 17V19H24V17S24 13.55 19.2 13.06M18 5A2.91 2.91 0 0 0 17.11 5.14A5 5 0 0 1 17.11 10.86A2.91 2.91 0 0 0 18 11A3 3 0 0 0 18 5M8 10H5V7H3V10H0V12H3V15H5V12H8Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Back') }}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ editMode ? t('photos', 'Save') : t('photos', 'Create album') }}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumForm.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!./AlbumForm.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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumForm.vue?vue&type=style&index=0&id=33f82244&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumForm.vue?vue&type=style&index=0&id=33f82244&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AlbumForm.vue?vue&type=template&id=33f82244&scoped=true&\"\nimport script from \"./AlbumForm.vue?vue&type=script&lang=js&\"\nexport * from \"./AlbumForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlbumForm.vue?vue&type=style&index=0&id=33f82244&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 \"33f82244\",\n null\n \n)\n\nexport default component.exports","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Magnify.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Magnify.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Magnify.vue?vue&type=template&id=d480a606&\"\nimport script from \"./Magnify.vue?vue&type=script&lang=js&\"\nexport * from \"./Magnify.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon magnify-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\":\"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./ContentCopy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./ContentCopy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContentCopy.vue?vue&type=template&id=00bbfaf7&\"\nimport script from \"./ContentCopy.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentCopy.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon content-copy-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,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\t
\n\t\t\t{{ t('photos', 'Add users or group who can edit your album') }}\n\t\t
\n\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Public link copied!') }}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Copy public link') }}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{{ t('photos', 'Share this album via link') }}\n\t\t\t\n\t\t\n\n\t\t\n\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\n\n","import mod from \"-!../../node_modules/babel-loader/lib/index.js!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollaboratorsSelectionForm.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!./CollaboratorsSelectionForm.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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollaboratorsSelectionForm.vue?vue&type=style&index=0&id=995bfdfc&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[0].rules[0].use[3]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CollaboratorsSelectionForm.vue?vue&type=style&index=0&id=995bfdfc&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./CollaboratorsSelectionForm.vue?vue&type=template&id=995bfdfc&scoped=true&\"\nimport script from \"./CollaboratorsSelectionForm.vue?vue&type=script&lang=js&\"\nexport * from \"./CollaboratorsSelectionForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CollaboratorsSelectionForm.vue?vue&type=style&index=0&id=995bfdfc&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 \"995bfdfc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"manage-collaborators\"},[_c('h2',{staticClass:\"manage-collaborators__title\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'Add collaborators'))+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"manage-collaborators__subtitle\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('photos', 'Add users or group who can edit your album'))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.allowPublicLink)?[(_vm.publicLink)?_c('NcButton',{staticClass:\"manage-collaborators__public-link-button\",attrs:{\"type\":\"tertiary-no-background\"},on:{\"click\":_vm.copyPublicLink},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.publicLinkCopied)?_c('Check'):_c('ContentCopy')]},proxy:true}],null,false,845538853)},[(_vm.publicLinkCopied)?[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Public link copied!'))+\"\\n\\t\\t\\t\")]:[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Copy public link'))+\"\\n\\t\\t\\t\")]],2):_c('NcButton',{staticClass:\"manage-collaborators__public-link-button\",attrs:{\"type\":\"tertiary-no-background\"},on:{\"click\":_vm.createPublicLinkForAlbum}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Share this album via link'))+\"\\n\\t\\t\")])]:_vm._e(),_vm._v(\" \"),_c('form',{staticClass:\"manage-collaborators__form\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('label',{staticClass:\"manage-collaborators__form__input\"},[_c('Magnify',{attrs:{\"size\":20}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchText),expression:\"searchText\"}],attrs:{\"type\":\"search\",\"name\":\"search\",\"aria-label\":_vm.t('photos', 'Search for collaborators'),\"aria-autocomplete\":\"list\",\"aria-controls\":(\"manage-collaborators__form__selection-\" + _vm.randomId + \" manage-collaborators__form__list-\" + _vm.randomId),\"placeholder\":_vm.t('photos', 'Search users or groups')},domProps:{\"value\":(_vm.searchText)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.searchText=$event.target.value},_vm.searchCollaborators]}}),_vm._v(\" \"),(_vm.loadingCollaborators)?_c('NcLoadingIcon'):_vm._e()],1),_vm._v(\" \"),_c('ul',{staticClass:\"manage-collaborators__form__selection\"},_vm._l((_vm.selectedCollaboratorsKey),function(collaboratorKey){return _c('li',{key:collaboratorKey},[_c('NcUserBubble',{attrs:{\"user\":_vm.availableCollaborators[collaboratorKey].source === 'users' ? _vm.availableCollaborators[collaboratorKey].id : undefined,\"display-name\":_vm.availableCollaborators[collaboratorKey].label}},[_c('template',{slot:\"title\"},[_c('Close',{attrs:{\"size\":20,\"role\":\"button\",\"aria-label\":_vm.t('photos', 'Remove {collaboratorLabel} from the collaborators list', {collaboratorLabel: _vm.availableCollaborators[collaboratorKey].label})},on:{\"click\":function($event){return _vm.unselectEntity(collaboratorKey)}}})],1)],2)],1)}),0),_vm._v(\" \"),_c('VirtualScrolling',{staticClass:\"manage-collaborators__form__list\",attrs:{\"rows\":_vm.vsItems},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar renderedRows = ref.renderedRows;\nreturn _c('ul',{attrs:{\"id\":(\"manage-collaborators__form__list-\" + _vm.randomId)}},_vm._l((renderedRows),function(collaborator){return _c('li',{key:collaborator.key,style:({height: ((collaborator.height) + \"px\")})},[_c('NcListItemIcon',{staticClass:\"manage-collaborators__form__list__result\",class:{'manage-collaborators__form__list__result--selected': collaborator.key in _vm.selectedCollaboratorsKey},attrs:{\"id\":_vm.availableCollaborators[collaborator.key].id,\"title\":_vm.availableCollaborators[collaborator.key].id,\"search\":_vm.searchText,\"display-name\":_vm.availableCollaborators[collaborator.key].label,\"is-selected\":collaborator.key in _vm.selectedCollaboratorsKey,\"aria-label\":_vm.t('photos', 'Add {collaboratorLabel} to the collaborators list', {collaboratorLabel: _vm.availableCollaborators[collaborator.key].label})},on:{\"click\":function($event){return _vm.selectEntity(collaborator.key)}}})],1)}),0)}}])})],1),_vm._v(\" \"),_c('div',{staticClass:\"slot-buttons\"},[_vm._t(\"default\",null,{\"collaborators\":_vm.selectedCollaborators})],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }"],"names":["name","data","errorFetchingAlbums","loadingAlbums","mixins","AbortControllerMixin","beforeMount","fetchAlbums","computed","mapGetters","methods","client","getCurrentUser","uid","details","signal","abortController","response","albums","filter","album","filename","map","props","collaborators","collaborator","Array","isArray","genFileInfo","dateRange","JSON","parse","replace","start","moment","unix","end","dateRangeFormated","startDate","format","endDate","date","t","$store","dispatch","logger","length","status","code","showError","___CSS_LOADER_EXPORT___","push","module","id","emits","title","type","String","fillColor","default","size","Number","_vm","this","_h","$createElement","_c","_self","_b","staticClass","attrs","on","$event","$emit","$attrs","_v","_s","_e","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","showCollaboratorView","albumName","scopedSlots","_u","key","fn","ref","editMode","trim","loading","submit","proxy","preventDefault","apply","arguments","albumLocation","back","copyPublicLink","createPublicLinkForAlbum","directives","rawName","value","expression","randomId","domProps","target","composing","searchText","searchCollaborators","_l","collaboratorKey","availableCollaborators","source","undefined","label","slot","collaboratorLabel","unselectEntity","vsItems","renderedRows","style","height","class","selectedCollaboratorsKey","selectEntity","_t","selectedCollaborators"],"sourceRoot":""}
\ No newline at end of file
diff --git a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js b/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js
deleted file mode 100644
index b7ce1877b..000000000
--- a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! For license information please see photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js.LICENSE.txt */
-"use strict";(self.webpackChunkphotos=self.webpackChunkphotos||[]).push([["src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774"],{12945:(n,e,o)=>{o.d(e,{Z:()=>h});var a=o(20629),r=o(80351),l=o.n(r),i=o(82880),s=o(45994),c=o(81067),u=o(59537),p=o(94236);function b(t){return b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},b(t)}function m(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,o)}return e}function d(t){for(var n=1;n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t',details:!0,signal:n.abortController.signal});case 7:a=e.sent,r=a.data.filter((function(t){var n;return t.filename!=="/photos/".concat(null===(n=(0,s.ts)())||void 0===n?void 0:n.uid,"/albums")})).map((function(t){return""===t.props.collaborators?t.props.collaborators=[]:"object"===b(t.props.collaborators.collaborator)&&(Array.isArray(t.props.collaborators.collaborator)?t.props.collaborators=t.props.collaborators.collaborator:t.props.collaborators=[t.props.collaborators.collaborator]),t})).map((function(t){return(0,p.AX)(t)})).map((function(t){var e,o,a=JSON.parse(null!==(e=null===(o=t.dateRange)||void 0===o?void 0:o.replace(/"/g,'"'))&&void 0!==e?e:"{}");null===a.start&&(a.start=l()().unix(),a.end=l()().unix());var r={startDate:l().unix(a.start).format("MMMM YYYY"),endDate:l().unix(a.end).format("MMMM YYYY")};return d(d({},t),{},r.startDate===r.endDate?{date:r.startDate}:{date:n.t("photos","{startDate} to {endDate}",r)})})),n.$store.dispatch("addAlbums",{albums:r}),u.Z.debug("[FetchAlbumsMixin] Fetched ".concat(r.length," new files: "),r),e.next=26;break;case 13:if(e.prev=13,e.t0=e.catch(2),404!==(null===(m=e.t0.response)||void 0===m?void 0:m.status)){e.next=19;break}n.errorFetchingAlbums=404,e.next=24;break;case 19:if("ERR_CANCELED"!==e.t0.code){e.next=23;break}return e.abrupt("return");case 23:n.errorFetchingAlbums=e.t0;case 24:u.Z.error(t("photos","Failed to fetch albums list."),e.t0),(0,i.showError)(t("photos","Failed to fetch albums list."));case 26:return e.prev=26,n.loadingAlbums=!1,e.finish(26);case 29:case"end":return e.stop()}}),e,null,[[2,13,26,29]])})))()}}}},90224:(t,n,e)=>{e.d(n,{Z:()=>i});var o=e(87537),a=e.n(o),r=e(23645),l=e.n(r)()(a());l.push([t.id,".album-form[data-v-4b45ca79]{display:flex;flex-direction:column;height:350px;padding:16px}.album-form .form-title[data-v-4b45ca79]{font-weight:bold}.album-form .form-subtitle[data-v-4b45ca79]{color:var(--color-text-lighter)}.album-form .form-inputs[data-v-4b45ca79]{flex-grow:1;justify-items:flex-end}.album-form .form-inputs input[data-v-4b45ca79]{width:100%}.album-form .form-inputs label[data-v-4b45ca79]{display:flex;margin-top:16px}.album-form .form-inputs label[data-v-4b45ca79] svg{margin-right:12px}.album-form .form-buttons[data-v-4b45ca79]{display:flex;justify-content:space-between}.album-form .form-buttons .left-buttons[data-v-4b45ca79],.album-form .form-buttons .right-buttons[data-v-4b45ca79]{display:flex}.album-form .form-buttons .right-buttons[data-v-4b45ca79]{justify-content:flex-end}.album-form .form-buttons button[data-v-4b45ca79]{margin-right:16px}.left-buttons[data-v-4b45ca79]{flex-grow:1}","",{version:3,sources:["webpack://./src/components/Albums/AlbumForm.vue"],names:[],mappings:"AAkPA,6BACC,YAAA,CACA,qBAAA,CACA,YAAA,CACA,YAAA,CAEA,yCACC,gBAAA,CAGD,4CACC,+BAAA,CAGD,0CACC,WAAA,CACA,sBAAA,CAEA,gDACC,UAAA,CAGD,gDACC,YAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAKH,2CACC,YAAA,CACA,6BAAA,CAEA,mHACC,YAAA,CAGD,0DACC,wBAAA,CAGD,kDACC,iBAAA,CAKH,+BACC,WAAA",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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.album-form {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 350px;\n\tpadding: 16px;\n\n\t.form-title {\n\t\tfont-weight: bold;\n\t}\n\n\t.form-subtitle {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t.form-inputs {\n\t\tflex-grow: 1;\n\t\tjustify-items: flex-end;\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tlabel {\n\t\t\tdisplay: flex;\n\t\t\tmargin-top: 16px;\n\n\t\t\t::v-deep svg {\n\t\t\t\tmargin-right: 12px;\n\t\t\t}\n\t\t}\n\t}\n\n\t.form-buttons {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\n\t\t.left-buttons, .right-buttons {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t.right-buttons {\n\t\t\tjustify-content: flex-end;\n\t\t}\n\n\t\tbutton {\n\t\t\tmargin-right: 16px;\n\t\t}\n\t}\n}\n\n.left-buttons {\n\tflex-grow: 1;\n}\n'],sourceRoot:""}]);const i=l},17226:(t,n,e)=>{e.d(n,{Z:()=>i});var o=e(87537),a=e.n(o),r=e(23645),l=e.n(r)()(a());l.push([t.id,".manage-collaborators[data-v-34521066]{display:flex;flex-direction:column;padding:20px;height:500px}.manage-collaborators__title[data-v-34521066]{font-weight:bold}.manage-collaborators__subtitle[data-v-34521066]{color:var(--color-text-lighter)}.manage-collaborators__public-link-button[data-v-34521066]{margin:4px 0}.manage-collaborators__form[data-v-34521066]{margin-top:4px 0;display:flex;flex-direction:column}.manage-collaborators__form__input[data-v-34521066]{position:relative;display:block}.manage-collaborators__form__input input[data-v-34521066]{width:100%;padding-left:34px}.manage-collaborators__form__input .loading-icon[data-v-34521066]{position:absolute;top:8px;right:8px}.manage-collaborators__form__list[data-v-34521066]{padding:8px}.manage-collaborators__form__list__result[data-v-34521066]{padding:8px;border-radius:100px;box-sizing:border-box}.manage-collaborators__form__list__result[data-v-34521066],.manage-collaborators__form__list__result *[data-v-34521066]{cursor:pointer !important}.manage-collaborators__form__list__result[data-v-34521066]:hover{background:var(--color-background-dark)}.manage-collaborators__selection[data-v-34521066]{display:flex;flex-direction:column;margin-top:8px;flex-grow:1}.manage-collaborators__selection__item[data-v-34521066]{border-radius:var(--border-radius-pill);padding:0 8px}.manage-collaborators__selection__item[data-v-34521066]:hover{background:var(--color-background-dark)}.manage-collaborators .actions[data-v-34521066]{display:flex;margin-top:8px}.manage-collaborators .actions__public-link[data-v-34521066]{display:flex;align-items:center}.manage-collaborators .actions__slot[data-v-34521066]{flex-grow:1;display:flex;justify-content:flex-end;align-items:center}","",{version:3,sources:["webpack://./src/components/Albums/CollaboratorsSelectionForm.vue"],names:[],mappings:"AA+SA,uCACC,YAAA,CACA,qBAAA,CACA,YAAA,CACA,YAAA,CAEA,8CACC,gBAAA,CAGD,iDACC,+BAAA,CAGD,2DACC,YAAA,CAGD,6CACC,gBAAA,CACA,YAAA,CACA,qBAAA,CAEA,oDACC,iBAAA,CACA,aAAA,CAEA,0DACC,UAAA,CACA,iBAAA,CAGD,kEACC,iBAAA,CACA,OAAA,CACA,SAAA,CAIF,mDACC,WAAA,CAEA,2DACC,WAAA,CACA,mBAAA,CACA,qBAAA,CAEA,wHACC,yBAAA,CAGD,iEACC,uCAAA,CAMJ,kDACC,YAAA,CACA,qBAAA,CACA,cAAA,CACA,WAAA,CAEA,wDACC,uCAAA,CACA,aAAA,CAEA,8DACC,uCAAA,CAKH,gDACC,YAAA,CACA,cAAA,CAEA,6DACC,YAAA,CACA,kBAAA,CAGD,sDACC,WAAA,CACA,YAAA,CACA,wBAAA,CACA,kBAAA",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\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.manage-collaborators {\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 20px;\n\theight: 500px;\n\n\t&__title {\n\t\tfont-weight: bold;\n\t}\n\n\t&__subtitle {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&__public-link-button {\n\t\tmargin: 4px 0;\n\t}\n\n\t&__form {\n\t\tmargin-top: 4px 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\n\t\t&__input {\n\t\t\tposition: relative;\n\t\t\tdisplay: block;\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tpadding-left: 34px;\n\t\t\t}\n\n\t\t\t.loading-icon {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: calc(36px / 2 - 20px / 2);\n\t\t\t\tright: 8px;\n\t\t\t}\n\t\t}\n\n\t\t&__list {\n\t\t\tpadding: 8px;\n\n\t\t\t&__result {\n\t\t\t\tpadding: 8px;\n\t\t\t\tborder-radius: 100px;\n\t\t\t\tbox-sizing: border-box;\n\n\t\t\t\t&, & * {\n\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t}\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: var(--color-background-dark);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&__selection {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tmargin-top: 8px;\n\t\tflex-grow: 1;\n\n\t\t&__item {\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tpadding: 0 8px;\n\n\t\t\t&:hover {\n\t\t\t\tbackground: var(--color-background-dark);\n\t\t\t}\n\t\t}\n\t}\n\n\t.actions {\n\t\tdisplay: flex;\n\t\tmargin-top: 8px;\n\n\t\t&__public-link {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t}\n\n\t\t&__slot {\n\t\t\tflex-grow: 1;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: flex-end;\n\t\t\talign-items: center;\n\t\t}\n\t}\n}\n'],sourceRoot:""}]);const i=l},40502:(t,n,e)=>{e.d(n,{Z:()=>a});const o={name:"PlusIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};const a=(0,e(51900).Z)(o,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon plus-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports},75400:(t,n,e)=>{e.d(n,{Z:()=>a});const o={name:"SendIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};const a=(0,e(51900).Z)(o,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon send-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M2,21L23,12L2,3V10L17,12L2,14V21Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports},81196:(t,n,e)=>{e.d(n,{Z:()=>E});var o=e(20629),a=e(93050);const r={name:"AccountMultiplePlusIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var l=e(51900);const i=(0,l.Z)(r,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon account-multiple-plus-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M19 17V19H7V17S7 13 13 13 19 17 19 17M16 8A3 3 0 1 0 13 11A3 3 0 0 0 16 8M19.2 13.06A5.6 5.6 0 0 1 21 17V19H24V17S24 13.55 19.2 13.06M18 5A2.91 2.91 0 0 0 17.11 5.14A5 5 0 0 1 17.11 10.86A2.91 2.91 0 0 0 18 11A3 3 0 0 0 18 5M8 10H5V7H3V10H0V12H3V15H5V12H8Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var s=e(75400),c=e(33476),u=e(80351),p=e.n(u),b=e(25503);function m(t,n,e,o,a,r,l){try{var i=t[r](l),s=i.value}catch(t){return void e(t)}i.done?n(s):Promise.resolve(s).then(o,a)}function d(t){return function(){var n=this,e=arguments;return new Promise((function(o,a){var r=t.apply(n,e);function l(t){m(r,o,a,l,i,"next",t)}function i(t){m(r,o,a,l,i,"throw",t)}l(void 0)}))}}function f(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,o)}return e}function A(t){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:[];""===this.albumName||this.loading||(this.editMode?this.handleUpdateAlbum():this.handleCreateAlbum(t))},handleCreateAlbum:function(){var t=arguments,n=this;return d(regeneratorRuntime.mark((function e(){var o,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=t.length>0&&void 0!==t[0]?t[0]:[],e.prev=1,n.loading=!0,e.next=5,n.createAlbum({album:{basename:n.albumName,nbItems:0,location:n.albumLocation,lastPhoto:-1,date:p()().format("MMMM YYYY"),collaborators:o}});case 5:if(a=e.sent,""===n.albumLocation&&0===o.length){e.next=10;break}return e.next=9,n.updateAlbum({albumName:n.albumName,properties:{location:n.albumLocation,collaborators:o}});case 9:a=e.sent;case 10:n.$emit("done",{album:a});case 11:return e.prev=11,n.loading=!1,e.finish(11);case 14:case"end":return e.stop()}}),e,null,[[1,,11,14]])})))()},handleUpdateAlbum:function(){var t=this;return d(regeneratorRuntime.mark((function n(){var e;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(n.prev=0,t.loading=!0,e=A({},t.album),t.album.basename===t.albumName){n.next=7;break}return n.next=6,t.renameAlbum({currentAlbumName:t.album.basename,newAlbumName:t.albumName});case 6:e=n.sent;case 7:if(t.album.location===t.albumLocation){n.next=11;break}return n.next=10,t.updateAlbum({albumName:t.albumName,properties:{location:t.albumLocation}});case 10:e.location=n.sent;case 11:t.$emit("done",{album:e});case 12:return n.prev=12,t.loading=!1,n.finish(12);case 15:case"end":return n.stop()}}),n,null,[[0,,12,15]])})))()},back:function(){this.$emit("back")}})};var C=e(93379),v=e.n(C),_=e(7795),y=e.n(_),x=e(90569),k=e.n(x),w=e(3565),O=e.n(w),S=e(19216),N=e.n(S),P=e(44589),L=e.n(P),B=e(90224),D={};D.styleTagTransform=L(),D.setAttributes=O(),D.insert=k().bind(null,"head"),D.domAPI=y(),D.insertStyleElement=N();v()(B.Z,D);B.Z&&B.Z.locals&&B.Z.locals;const E=(0,l.Z)(h,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.showCollaboratorView?e("CollaboratorsSelectionForm",{attrs:{"album-name":t.albumName,"allow-public-link":!1},scopedSlots:t._u([{key:"default",fn:function(n){var o=n.collaborators;return[e("span",{staticClass:"left-buttons"},[e("NcButton",{attrs:{"aria-label":t.t("photos","Back to the new album form."),type:"tertiary"},on:{click:function(n){t.showCollaboratorView=!1}}},[t._v("\n\t\t\t\t"+t._s(t.t("photos","Back"))+"\n\t\t\t")])],1),t._v(" "),e("span",{staticClass:"right-buttons"},[e("NcButton",{attrs:{"aria-label":t.editMode?t.t("photos","Save."):t.t("photos","Create the album."),type:"primary",disabled:""===t.albumName.trim()||t.loading},on:{click:function(n){return t.submit(o)}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("Send")]},proxy:!0}],null,!0)},[t._v("\n\t\t\t\t"+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+"\n\t\t\t")])],1)]}}])}):e("form",{staticClass:"album-form",on:{submit:function(n){return n.preventDefault(),t.submit.apply(null,arguments)}}},[e("div",{staticClass:"form-inputs"},[e("NcTextField",{ref:"nameInput",attrs:{value:t.albumName,type:"text",name:"name",required:!0,autofocus:"true",placeholder:t.t("photos","Name of the album")},on:{"update:value":function(n){t.albumName=n}}}),t._v(" "),e("label",[e("MapMarker"),e("NcTextField",{attrs:{value:t.albumLocation,name:"location",type:"text",placeholder:t.t("photos","Location of the album")},on:{"update:value":function(n){t.albumLocation=n}}})],1)],1),t._v(" "),e("div",{staticClass:"form-buttons"},[e("span",{staticClass:"left-buttons"},[t.displayBackButton?e("NcButton",{attrs:{"aria-label":t.t("photos","Go back to the previous view."),type:"tertiary"},on:{click:t.back}},[t._v("\n\t\t\t\t"+t._s(t.t("photos","Back"))+"\n\t\t\t")]):t._e()],1),t._v(" "),e("span",{staticClass:"right-buttons"},[t.sharingEnabled&&!t.editMode?e("NcButton",{attrs:{"aria-label":t.t("photos","Go to the add collaborators view."),type:"secondary",disabled:""===t.albumName.trim()||t.loading},on:{click:function(n){t.showCollaboratorView=!0}},scopedSlots:t._u([{key:"icon",fn:function(){return[e("AccountMultiplePlus")]},proxy:!0}],null,!1,1531126728)},[t._v("\n\t\t\t\t"+t._s(t.t("photos","Add collaborators"))+"\n\t\t\t")]):t._e(),t._v(" "),e("NcButton",{attrs:{"aria-label":t.editMode?t.t("photos","Save."):t.t("photos","Create the album."),type:"primary",disabled:""===t.albumName||t.loading},on:{click:function(n){return t.submit()}},scopedSlots:t._u([{key:"icon",fn:function(){return[t.loading?e("NcLoadingIcon"):e("Send")]},proxy:!0}],null,!1,3914512768)},[t._v("\n\t\t\t\t"+t._s(t.editMode?t.t("photos","Save"):t.t("photos","Create album"))+"\n\t\t\t")])],1)])])}),[],!1,null,"4b45ca79",null).exports},25503:(n,e,o)=>{o.d(e,{Z:()=>M});const a={name:"MagnifyIcon",emits:["click"],props:{title:{type:String},fillColor:{type:String,default:"currentColor"},size:{type:Number,default:24}}};var r=o(51900);const l=(0,r.Z)(a,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("span",t._b({staticClass:"material-design-icon magnify-icon",attrs:{"aria-hidden":!t.title,"aria-label":t.title,role:"img"},on:{click:function(n){return t.$emit("click",n)}}},"span",t.$attrs,!1),[e("svg",{staticClass:"material-design-icon__svg",attrs:{fill:t.fillColor,width:t.size,height:t.size,viewBox:"0 0 24 24"}},[e("path",{attrs:{d:"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z"}},[t.title?e("title",[t._v(t._s(t.title))]):t._e()])])])}),[],!1,null,null,null).exports;var i=o(31894),s=o(26937),c=o(82880),u=o(45994),p=o(79753),b=o(33476),m=o(59537);function d(t,n,e,o,a,r,l){try{var i=t[r](l),s=i.value}catch(t){return void e(t)}i.done?n(s):Promise.resolve(s).then(o,a)}function f(t){return function(){var n=this,e=arguments;return new Promise((function(o,a){var r=t.apply(n,e);function l(t){d(r,o,a,l,i,"next",t)}function i(t){d(r,o,a,l,i,"throw",t)}l(void 0)}))}}function A(t,n){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),e.push.apply(e,o)}return e}function g(t){for(var n=1;n
- *
- * @author Louis Chemineau
- *
- * @license AGPL-3.0-or-later
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- *
- */
diff --git a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js.map b/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js.map
deleted file mode 100644
index 03c0b9b41..000000000
--- a/js/photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"photos-src_mixins_FetchAlbumsMixin_js-node_modules_vue-material-design-icons_Plus_vue-src_components-f20774.js?v=af5453c2b2464303d149","mappings":"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","sources":["webpack:///photos/src/mixins/FetchAlbumsMixin.js","webpack:///photos/src/components/Albums/AlbumForm.vue?vue&type=style&index=0&id=4b45ca79&lang=scss&scoped=true&","webpack:///photos/src/components/Albums/CollaboratorsSelectionForm.vue?vue&type=style&index=0&id=34521066&lang=scss&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/Plus.vue","webpack:///photos/node_modules/vue-material-design-icons/Plus.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/Plus.vue?80b4","webpack:///photos/node_modules/vue-material-design-icons/Plus.vue?vue&type=template&id=968bec46&","webpack:///photos/node_modules/vue-material-design-icons/Send.vue","webpack:///photos/node_modules/vue-material-design-icons/Send.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/Send.vue?0295","webpack:///photos/node_modules/vue-material-design-icons/Send.vue?vue&type=template&id=46f29e66&","webpack:///photos/src/components/Albums/AlbumForm.vue?vue&type=template&id=4b45ca79&scoped=true&","webpack:///photos/node_modules/vue-material-design-icons/AccountMultiplePlus.vue","webpack:///photos/node_modules/vue-material-design-icons/AccountMultiplePlus.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/AccountMultiplePlus.vue?e9b5","webpack:///photos/node_modules/vue-material-design-icons/AccountMultiplePlus.vue?vue&type=template&id=7e4925e6&","webpack:///photos/src/components/Albums/AlbumForm.vue","webpack:///photos/src/components/Albums/AlbumForm.vue?vue&type=script&lang=js&","webpack://photos/./src/components/Albums/AlbumForm.vue?ca78","webpack://photos/./src/components/Albums/AlbumForm.vue?8dc6","webpack:///photos/node_modules/vue-material-design-icons/Magnify.vue","webpack:///photos/node_modules/vue-material-design-icons/Magnify.vue?vue&type=script&lang=js&","webpack://photos/./node_modules/vue-material-design-icons/Magnify.vue?0775","webpack:///photos/node_modules/vue-material-design-icons/Magnify.vue?vue&type=template&id=d480a606&","webpack:///photos/src/components/Albums/CollaboratorsSelectionForm.vue","webpack:///photos/src/components/Albums/CollaboratorsSelectionForm.vue?vue&type=script&lang=js&","webpack://photos/./src/components/Albums/CollaboratorsSelectionForm.vue?b889","webpack://photos/./src/components/Albums/CollaboratorsSelectionForm.vue?e975","webpack:///photos/src/components/Albums/CollaboratorsSelectionForm.vue?vue&type=template&id=34521066&scoped=true&"],"sourcesContent":["/**\n * @copyright Copyright (c) 2022 Louis Chemineau \n *\n * @author Louis Chemineau \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 .\n *\n */\n\nimport { mapGetters } from 'vuex'\n\nimport moment from '@nextcloud/moment'\nimport { showError } from '@nextcloud/dialogs'\nimport { getCurrentUser } from '@nextcloud/auth'\n\nimport client from '../services/DavClient.js'\nimport logger from '../services/logger.js'\nimport { genFileInfo } from '../utils/fileUtils.js'\nimport AbortControllerMixin from './AbortControllerMixin.js'\n\nexport default {\n\tname: 'FetchAlbumsMixin',\n\n\tdata() {\n\t\treturn {\n\t\t\terrorFetchingAlbums: null,\n\t\t\tloadingAlbums: false,\n\t\t}\n\t},\n\n\tmixins: [\n\t\tAbortControllerMixin,\n\t],\n\n\tasync beforeMount() {\n\t\tthis.fetchAlbums()\n\t},\n\n\tcomputed: {\n\t\t...mapGetters([\n\t\t\t'albums',\n\t\t]),\n\t},\n\n\tmethods: {\n\t\tasync fetchAlbums() {\n\t\t\tif (this.loadingAlbums) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingAlbums = true\n\t\t\t\tthis.errorFetchingAlbums = null\n\n\t\t\t\tconst response = await client.getDirectoryContents(`/photos/${getCurrentUser()?.uid}/albums`, {\n\t\t\t\t\tdata: `\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t`,\n\t\t\t\t\tdetails: true,\n\t\t\t\t\tsignal: this.abortController.signal,\n\t\t\t\t})\n\n\t\t\t\tconst albums = response.data\n\t\t\t\t\t.filter(album => album.filename !== `/photos/${getCurrentUser()?.uid}/albums`)\n\t\t\t\t\t// Ensure that we have a proper collaborators array.\n\t\t\t\t\t.map(album => {\n\t\t\t\t\t\tif (album.props.collaborators === '') {\n\t\t\t\t\t\t\talbum.props.collaborators = []\n\t\t\t\t\t\t} else if (typeof album.props.collaborators.collaborator === 'object') {\n\t\t\t\t\t\t\tif (Array.isArray(album.props.collaborators.collaborator)) {\n\t\t\t\t\t\t\t\talbum.props.collaborators = album.props.collaborators.collaborator\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talbum.props.collaborators = [album.props.collaborators.collaborator]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn album\n\t\t\t\t\t})\n\t\t\t\t\t.map(album => genFileInfo(album))\n\t\t\t\t\t.map(album => {\n\t\t\t\t\t\tconst dateRange = JSON.parse(album.dateRange?.replace(/"/g, '\"') ?? '{}')\n\n\t\t\t\t\t\tif (dateRange.start === null) {\n\t\t\t\t\t\t\tdateRange.start = moment().unix()\n\t\t\t\t\t\t\tdateRange.end = moment().unix()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst dateRangeFormated = {\n\t\t\t\t\t\t\tstartDate: moment.unix(dateRange.start).format('MMMM YYYY'),\n\t\t\t\t\t\t\tendDate: moment.unix(dateRange.end).format('MMMM YYYY'),\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (dateRangeFormated.startDate === dateRangeFormated.endDate) {\n\t\t\t\t\t\t\treturn { ...album, date: dateRangeFormated.startDate }\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn { ...album, date: this.t('photos', '{startDate} to {endDate}', dateRangeFormated) }\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\tthis.$store.dispatch('addAlbums', { albums })\n\t\t\t\tlogger.debug(`[FetchAlbumsMixin] Fetched ${albums.length} new files: `, albums)\n\t\t\t} catch (error) {\n\t\t\t\tif (error.response?.status === 404) {\n\t\t\t\t\tthis.errorFetchingAlbums = 404\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.errorFetchingAlbums = error\n\t\t\t\t}\n\t\t\t\tlogger.error(t('photos', 'Failed to fetch albums list.'), error)\n\t\t\t\tshowError(t('photos', 'Failed to fetch albums list.'))\n\t\t\t} finally {\n\t\t\t\tthis.loadingAlbums = false\n\t\t\t}\n\t\t},\n\t},\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/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-form[data-v-4b45ca79]{display:flex;flex-direction:column;height:350px;padding:16px}.album-form .form-title[data-v-4b45ca79]{font-weight:bold}.album-form .form-subtitle[data-v-4b45ca79]{color:var(--color-text-lighter)}.album-form .form-inputs[data-v-4b45ca79]{flex-grow:1;justify-items:flex-end}.album-form .form-inputs input[data-v-4b45ca79]{width:100%}.album-form .form-inputs label[data-v-4b45ca79]{display:flex;margin-top:16px}.album-form .form-inputs label[data-v-4b45ca79] svg{margin-right:12px}.album-form .form-buttons[data-v-4b45ca79]{display:flex;justify-content:space-between}.album-form .form-buttons .left-buttons[data-v-4b45ca79],.album-form .form-buttons .right-buttons[data-v-4b45ca79]{display:flex}.album-form .form-buttons .right-buttons[data-v-4b45ca79]{justify-content:flex-end}.album-form .form-buttons button[data-v-4b45ca79]{margin-right:16px}.left-buttons[data-v-4b45ca79]{flex-grow:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Albums/AlbumForm.vue\"],\"names\":[],\"mappings\":\"AAkPA,6BACC,YAAA,CACA,qBAAA,CACA,YAAA,CACA,YAAA,CAEA,yCACC,gBAAA,CAGD,4CACC,+BAAA,CAGD,0CACC,WAAA,CACA,sBAAA,CAEA,gDACC,UAAA,CAGD,gDACC,YAAA,CACA,eAAA,CAEA,qDACC,iBAAA,CAKH,2CACC,YAAA,CACA,6BAAA,CAEA,mHACC,YAAA,CAGD,0DACC,wBAAA,CAGD,kDACC,iBAAA,CAKH,+BACC,WAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.album-form {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\theight: 350px;\\n\\tpadding: 16px;\\n\\n\\t.form-title {\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t.form-subtitle {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t.form-inputs {\\n\\t\\tflex-grow: 1;\\n\\t\\tjustify-items: flex-end;\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tmargin-top: 16px;\\n\\n\\t\\t\\t::v-deep svg {\\n\\t\\t\\t\\tmargin-right: 12px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.form-buttons {\\n\\t\\tdisplay: flex;\\n\\t\\tjustify-content: space-between;\\n\\n\\t\\t.left-buttons, .right-buttons {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t}\\n\\n\\t\\t.right-buttons {\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t}\\n\\n\\t\\tbutton {\\n\\t\\t\\tmargin-right: 16px;\\n\\t\\t}\\n\\t}\\n}\\n\\n.left-buttons {\\n\\tflex-grow: 1;\\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, \".manage-collaborators[data-v-34521066]{display:flex;flex-direction:column;padding:20px;height:500px}.manage-collaborators__title[data-v-34521066]{font-weight:bold}.manage-collaborators__subtitle[data-v-34521066]{color:var(--color-text-lighter)}.manage-collaborators__public-link-button[data-v-34521066]{margin:4px 0}.manage-collaborators__form[data-v-34521066]{margin-top:4px 0;display:flex;flex-direction:column}.manage-collaborators__form__input[data-v-34521066]{position:relative;display:block}.manage-collaborators__form__input input[data-v-34521066]{width:100%;padding-left:34px}.manage-collaborators__form__input .loading-icon[data-v-34521066]{position:absolute;top:8px;right:8px}.manage-collaborators__form__list[data-v-34521066]{padding:8px}.manage-collaborators__form__list__result[data-v-34521066]{padding:8px;border-radius:100px;box-sizing:border-box}.manage-collaborators__form__list__result[data-v-34521066],.manage-collaborators__form__list__result *[data-v-34521066]{cursor:pointer !important}.manage-collaborators__form__list__result[data-v-34521066]:hover{background:var(--color-background-dark)}.manage-collaborators__selection[data-v-34521066]{display:flex;flex-direction:column;margin-top:8px;flex-grow:1}.manage-collaborators__selection__item[data-v-34521066]{border-radius:var(--border-radius-pill);padding:0 8px}.manage-collaborators__selection__item[data-v-34521066]:hover{background:var(--color-background-dark)}.manage-collaborators .actions[data-v-34521066]{display:flex;margin-top:8px}.manage-collaborators .actions__public-link[data-v-34521066]{display:flex;align-items:center}.manage-collaborators .actions__slot[data-v-34521066]{flex-grow:1;display:flex;justify-content:flex-end;align-items:center}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/Albums/CollaboratorsSelectionForm.vue\"],\"names\":[],\"mappings\":\"AA+SA,uCACC,YAAA,CACA,qBAAA,CACA,YAAA,CACA,YAAA,CAEA,8CACC,gBAAA,CAGD,iDACC,+BAAA,CAGD,2DACC,YAAA,CAGD,6CACC,gBAAA,CACA,YAAA,CACA,qBAAA,CAEA,oDACC,iBAAA,CACA,aAAA,CAEA,0DACC,UAAA,CACA,iBAAA,CAGD,kEACC,iBAAA,CACA,OAAA,CACA,SAAA,CAIF,mDACC,WAAA,CAEA,2DACC,WAAA,CACA,mBAAA,CACA,qBAAA,CAEA,wHACC,yBAAA,CAGD,iEACC,uCAAA,CAMJ,kDACC,YAAA,CACA,qBAAA,CACA,cAAA,CACA,WAAA,CAEA,wDACC,uCAAA,CACA,aAAA,CAEA,8DACC,uCAAA,CAKH,gDACC,YAAA,CACA,cAAA,CAEA,6DACC,YAAA,CACA,kBAAA,CAGD,sDACC,WAAA,CACA,YAAA,CACA,wBAAA,CACA,kBAAA\",\"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\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.manage-collaborators {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tpadding: 20px;\\n\\theight: 500px;\\n\\n\\t&__title {\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&__subtitle {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&__public-link-button {\\n\\t\\tmargin: 4px 0;\\n\\t}\\n\\n\\t&__form {\\n\\t\\tmargin-top: 4px 0;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\n\\t\\t&__input {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tdisplay: block;\\n\\n\\t\\t\\tinput {\\n\\t\\t\\t\\twidth: 100%;\\n\\t\\t\\t\\tpadding-left: 34px;\\n\\t\\t\\t}\\n\\n\\t\\t\\t.loading-icon {\\n\\t\\t\\t\\tposition: absolute;\\n\\t\\t\\t\\ttop: calc(36px / 2 - 20px / 2);\\n\\t\\t\\t\\tright: 8px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&__list {\\n\\t\\t\\tpadding: 8px;\\n\\n\\t\\t\\t&__result {\\n\\t\\t\\t\\tpadding: 8px;\\n\\t\\t\\t\\tborder-radius: 100px;\\n\\t\\t\\t\\tbox-sizing: border-box;\\n\\n\\t\\t\\t\\t&, & * {\\n\\t\\t\\t\\t\\tcursor: pointer !important;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\t&:hover {\\n\\t\\t\\t\\t\\tbackground: var(--color-background-dark);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&__selection {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-direction: column;\\n\\t\\tmargin-top: 8px;\\n\\t\\tflex-grow: 1;\\n\\n\\t\\t&__item {\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tpadding: 0 8px;\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground: var(--color-background-dark);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t.actions {\\n\\t\\tdisplay: flex;\\n\\t\\tmargin-top: 8px;\\n\\n\\t\\t&__public-link {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t}\\n\\n\\t\\t&__slot {\\n\\t\\t\\tflex-grow: 1;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tjustify-content: flex-end;\\n\\t\\t\\talign-items: center;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Plus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Plus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Plus.vue?vue&type=template&id=968bec46&\"\nimport script from \"./Plus.vue?vue&type=script&lang=js&\"\nexport * from \"./Plus.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon plus-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,13H13V19H11V13H5V11H11V5H13V11H19V13Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Send.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Send.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Send.vue?vue&type=template&id=46f29e66&\"\nimport script from \"./Send.vue?vue&type=script&lang=js&\"\nexport * from \"./Send.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon send-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\":\"M2,21L23,12L2,3V10L17,12L2,14V21Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.showCollaboratorView)?_c('form',{staticClass:\"album-form\",on:{\"submit\":function($event){$event.preventDefault();return _vm.submit.apply(null, arguments)}}},[_c('div',{staticClass:\"form-inputs\"},[_c('NcTextField',{ref:\"nameInput\",attrs:{\"value\":_vm.albumName,\"type\":\"text\",\"name\":\"name\",\"required\":true,\"autofocus\":\"true\",\"placeholder\":_vm.t('photos', 'Name of the album')},on:{\"update:value\":function($event){_vm.albumName=$event}}}),_vm._v(\" \"),_c('label',[_c('MapMarker'),_c('NcTextField',{attrs:{\"value\":_vm.albumLocation,\"name\":\"location\",\"type\":\"text\",\"placeholder\":_vm.t('photos', 'Location of the album')},on:{\"update:value\":function($event){_vm.albumLocation=$event}}})],1)],1),_vm._v(\" \"),_c('div',{staticClass:\"form-buttons\"},[_c('span',{staticClass:\"left-buttons\"},[(_vm.displayBackButton)?_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Go back to the previous view.'),\"type\":\"tertiary\"},on:{\"click\":_vm.back}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Back'))+\"\\n\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),_c('span',{staticClass:\"right-buttons\"},[(_vm.sharingEnabled && !_vm.editMode)?_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Go to the add collaborators view.'),\"type\":\"secondary\",\"disabled\":_vm.albumName.trim() === '' || _vm.loading},on:{\"click\":function($event){_vm.showCollaboratorView = true}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AccountMultiplePlus')]},proxy:true}],null,false,1531126728)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Add collaborators'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('NcButton',{attrs:{\"aria-label\":_vm.editMode ? _vm.t('photos', 'Save.') : _vm.t('photos', 'Create the album.'),\"type\":\"primary\",\"disabled\":_vm.albumName === '' || _vm.loading},on:{\"click\":function($event){return _vm.submit()}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('Send')]},proxy:true}],null,false,3914512768)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.editMode ? _vm.t('photos', 'Save') : _vm.t('photos', 'Create album'))+\"\\n\\t\\t\\t\")])],1)])]):_c('CollaboratorsSelectionForm',{attrs:{\"album-name\":_vm.albumName,\"allow-public-link\":false},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar collaborators = ref.collaborators;\nreturn [_c('span',{staticClass:\"left-buttons\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.t('photos', 'Back to the new album form.'),\"type\":\"tertiary\"},on:{\"click\":function($event){_vm.showCollaboratorView = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('photos', 'Back'))+\"\\n\\t\\t\\t\")])],1),_vm._v(\" \"),_c('span',{staticClass:\"right-buttons\"},[_c('NcButton',{attrs:{\"aria-label\":_vm.editMode ? _vm.t('photos', 'Save.') : _vm.t('photos', 'Create the album.'),\"type\":\"primary\",\"disabled\":_vm.albumName.trim() === '' || _vm.loading},on:{\"click\":function($event){return _vm.submit(collaborators)}},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('NcLoadingIcon'):_c('Send')]},proxy:true}],null,true)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.editMode ? _vm.t('photos', 'Save') : _vm.t('photos', 'Create album'))+\"\\n\\t\\t\\t\")])],1)]}}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./AccountMultiplePlus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./AccountMultiplePlus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AccountMultiplePlus.vue?vue&type=template&id=7e4925e6&\"\nimport script from \"./AccountMultiplePlus.vue?vue&type=script&lang=js&\"\nexport * from \"./AccountMultiplePlus.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon account-multiple-plus-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 17V19H7V17S7 13 13 13 19 17 19 17M16 8A3 3 0 1 0 13 11A3 3 0 0 0 16 8M19.2 13.06A5.6 5.6 0 0 1 21 17V19H24V17S24 13.55 19.2 13.06M18 5A2.91 2.91 0 0 0 17.11 5.14A5 5 0 0 1 17.11 10.86A2.91 2.91 0 0 0 18 11A3 3 0 0 0 18 5M8 10H5V7H3V10H0V12H3V15H5V12H8Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\t\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Back') }}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ editMode ? t('photos', 'Save') : t('photos', 'Create album') }}\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n\n\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumForm.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!./AlbumForm.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[0].rules[0].use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumForm.vue?vue&type=style&index=0&id=4b45ca79&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[0].rules[0].use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AlbumForm.vue?vue&type=style&index=0&id=4b45ca79&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AlbumForm.vue?vue&type=template&id=4b45ca79&scoped=true&\"\nimport script from \"./AlbumForm.vue?vue&type=script&lang=js&\"\nexport * from \"./AlbumForm.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlbumForm.vue?vue&type=style&index=0&id=4b45ca79&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 \"4b45ca79\",\n null\n \n)\n\nexport default component.exports","\n \n \n \n\n\n","import mod from \"-!../vue-loader/lib/index.js??vue-loader-options!./Magnify.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../vue-loader/lib/index.js??vue-loader-options!./Magnify.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Magnify.vue?vue&type=template&id=d480a606&\"\nimport script from \"./Magnify.vue?vue&type=script&lang=js&\"\nexport * from \"./Magnify.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._b({staticClass:\"material-design-icon magnify-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\":\"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z\"}},[(_vm.title)?_c('title',[_vm._v(_vm._s(_vm.title))]):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Public link copied!') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ t('photos', 'Copy public link') }}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{{ t('photos', 'Share via public link') }}\n\t\t\t\t\n\t\t\t