photos/js/photos-src_mixins_FilesSele...

1 line
25 KiB
Plaintext

{"version":3,"file":"photos-src_mixins_FilesSelectionMixin_js-src_utils_CancelableRequest_js-src_components_Loader_vue-sr-84f266.js?v=c580f004c2fa72a3011f","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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC/DA;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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/Loader.vue?vue&type=script&lang=js&","webpack:///photos/src/components/VirtualScrolling.vue?vue&type=script&lang=js&","webpack:///photos/src/mixins/FilesSelectionMixin.js","webpack:///photos/src/utils/CancelableRequest.js","webpack:///photos/src/components/Loader.vue?vue&type=style&index=0&lang=scss&","webpack:///photos/src/components/VirtualScrolling.vue?vue&type=style&index=0&id=3d9f7b4c&scoped=true&lang=scss&","webpack://photos/./src/components/Loader.vue?eb1b","webpack://photos/./src/components/VirtualScrolling.vue?38b9","webpack:///photos/src/components/Loader.vue","webpack:///photos/src/components/VirtualScrolling.vue","webpack://photos/./src/components/Loader.vue?5453","webpack://photos/./src/components/VirtualScrolling.vue?de60","webpack:///photos/src/components/Loader.vue?vue&type=template&id=04a0d67a&","webpack:///photos/src/components/VirtualScrolling.vue?vue&type=template&id=3d9f7b4c&scoped=true&"],"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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\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.classList.contains('vs-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) 2019 Louis Chemineau <louis@chmn.me>\n *\n * @author Louis Chemineau <louis@chmn.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nexport default {\n name: 'FilesSelectionMixin',\n\n data() {\n return {\n /** @type {Object<string, boolean>} */\n selection: {}\n };\n },\n\n methods: {\n onFileSelectToggle(_ref) {\n let {\n id,\n value\n } = _ref;\n this.$set(this.selection, id, value);\n },\n\n /**\n * @param {string[]} filesIds - The ids of the files to uncheck.\n */\n onUncheckFiles(filesIds) {\n filesIds.forEach((\n /** @type {string} */\n filesId) => this.$set(this.selection, filesId, false));\n },\n\n resetSelection() {\n this.selection = {};\n }\n\n },\n computed: {\n /**\n * @return {string[]}\n */\n selectedFileIds() {\n return Object.keys(this.selection).filter(fileId => this.selection[fileId]);\n }\n\n }\n};","/**\n * @copyright Copyright (c) 2019 Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @author Marco Ambrosini <marcoambrosini@pm.me>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport axios from '@nextcloud/axios';\n/**\n * Create a cancel token\n *\n * @return {CancelTokenSource}\n */\n\nconst createCancelToken = () => axios.CancelToken.source();\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {Function} request the axios promise request\n * @return {object}\n */\n\n\nconst CancelableRequest = function (request) {\n /**\n * Generate an axios cancel token\n */\n const cancelToken = createCancelToken();\n /**\n * Execute the request\n *\n * @param {string} url the url to send the request to\n * @param {object} [options] optional config for the request\n */\n\n const fetch = async function (url, options) {\n return request(url, Object.assign({\n cancelToken: cancelToken.token\n }, options));\n };\n\n return {\n request: fetch,\n cancel: cancelToken.cancel\n };\n};\n\nexport default CancelableRequest;","// 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","// 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!./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","\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 \"./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 { 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!./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&\"","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&\"","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 }","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":""}