1 line
23 KiB
Plaintext
1 line
23 KiB
Plaintext
{"version":3,"file":"FileComponent-Z0cvFFM3.chunk.mjs","sources":["../node_modules/blurhash/dist/esm/index.js","../node_modules/@mdi/svg/svg/star.svg?raw","../src/components/FavoriteIcon.vue","../src/services/PreviewService.ts","../src/components/FileComponent.vue"],"sourcesContent":["var q=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"#\",\"$\",\"%\",\"*\",\"+\",\",\",\"-\",\".\",\":\",\";\",\"=\",\"?\",\"@\",\"[\",\"]\",\"^\",\"_\",\"{\",\"|\",\"}\",\"~\"],x=t=>{let e=0;for(let r=0;r<t.length;r++){let n=t[r],l=q.indexOf(n);e=e*83+l}return e},p=(t,e)=>{var r=\"\";for(let n=1;n<=e;n++){let l=Math.floor(t)/Math.pow(83,e-n)%83;r+=q[Math.floor(l)]}return r};var f=t=>{let e=t/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},h=t=>{let e=Math.max(0,Math.min(1,t));return e<=.0031308?Math.trunc(e*12.92*255+.5):Math.trunc((1.055*Math.pow(e,.4166666666666667)-.055)*255+.5)},F=t=>t<0?-1:1,M=(t,e)=>F(t)*Math.pow(Math.abs(t),e);var d=class extends Error{constructor(e){super(e),this.name=\"ValidationError\",this.message=e}};var C=t=>{if(!t||t.length<6)throw new d(\"The blurhash string must be at least 6 characters\");let e=x(t[0]),r=Math.floor(e/9)+1,n=e%9+1;if(t.length!==4+2*n*r)throw new d(`blurhash length mismatch: length is ${t.length} but it should be ${4+2*n*r}`)},N=t=>{try{C(t)}catch(e){return{result:!1,errorReason:e.message}}return{result:!0}},z=t=>{let e=t>>16,r=t>>8&255,n=t&255;return[f(e),f(r),f(n)]},L=(t,e)=>{let r=Math.floor(t/361),n=Math.floor(t/19)%19,l=t%19;return[M((r-9)/9,2)*e,M((n-9)/9,2)*e,M((l-9)/9,2)*e]},U=(t,e,r,n)=>{C(t),n=n|1;let l=x(t[0]),m=Math.floor(l/9)+1,b=l%9+1,i=(x(t[1])+1)/166,u=new Array(b*m);for(let o=0;o<u.length;o++)if(o===0){let a=x(t.substring(2,6));u[o]=z(a)}else{let a=x(t.substring(4+o*2,6+o*2));u[o]=L(a,i*n)}let c=e*4,s=new Uint8ClampedArray(c*r);for(let o=0;o<r;o++)for(let a=0;a<e;a++){let y=0,B=0,R=0;for(let w=0;w<m;w++)for(let P=0;P<b;P++){let G=Math.cos(Math.PI*a*P/e)*Math.cos(Math.PI*o*w/r),T=u[P+w*b];y+=T[0]*G,B+=T[1]*G,R+=T[2]*G}let V=h(y),I=h(B),E=h(R);s[4*a+0+o*c]=V,s[4*a+1+o*c]=I,s[4*a+2+o*c]=E,s[4*a+3+o*c]=255}return s},j=U;var A=4,D=(t,e,r,n)=>{let l=0,m=0,b=0,g=e*A;for(let u=0;u<e;u++){let c=A*u;for(let s=0;s<r;s++){let o=c+s*g,a=n(u,s);l+=a*f(t[o]),m+=a*f(t[o+1]),b+=a*f(t[o+2])}}let i=1/(e*r);return[l*i,m*i,b*i]},$=t=>{let e=h(t[0]),r=h(t[1]),n=h(t[2]);return(e<<16)+(r<<8)+n},H=(t,e)=>{let r=Math.floor(Math.max(0,Math.min(18,Math.floor(M(t[0]/e,.5)*9+9.5)))),n=Math.floor(Math.max(0,Math.min(18,Math.floor(M(t[1]/e,.5)*9+9.5)))),l=Math.floor(Math.max(0,Math.min(18,Math.floor(M(t[2]/e,.5)*9+9.5))));return r*19*19+n*19+l},O=(t,e,r,n,l)=>{if(n<1||n>9||l<1||l>9)throw new d(\"BlurHash must have between 1 and 9 components\");if(e*r*4!==t.length)throw new d(\"Width and height must match the pixels array\");let m=[];for(let s=0;s<l;s++)for(let o=0;o<n;o++){let a=o==0&&s==0?1:2,y=D(t,e,r,(B,R)=>a*Math.cos(Math.PI*o*B/e)*Math.cos(Math.PI*s*R/r));m.push(y)}let b=m[0],g=m.slice(1),i=\"\",u=n-1+(l-1)*9;i+=p(u,1);let c;if(g.length>0){let s=Math.max(...g.map(a=>Math.max(...a))),o=Math.floor(Math.max(0,Math.min(82,Math.floor(s*166-.5))));c=(o+1)/166,i+=p(o,1)}else c=1,i+=p(0,1);return i+=p($(b),4),g.forEach(s=>{i+=p(H(s,c),2)}),i},S=O;export{d as ValidationError,j as decode,S as encode,N as isBlurhashValid};\n//# sourceMappingURL=index.js.map","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" id=\\\"mdi-star\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\\\" /></svg>\"","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<NcIconSvgWrapper class=\"favorite-marker-icon\" :name=\"t('photos', 'Favorite')\" :svg=\"StarSvg\" />\n</template>\n\n<script lang='ts'>\nimport StarSvg from '@mdi/svg/svg/star.svg?raw'\nimport { t } from '@nextcloud/l10n'\nimport { defineComponent } from 'vue'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\n\n/**\n * A favorite icon to be used for overlaying favorite entries like the file preview / icon\n * It has a stroke around the star icon to ensure enough contrast for accessibility.\n *\n * If the background has a hover state you might want to also apply it to the stroke like this:\n * ```scss\n * .parent:hover :deep(.favorite-marker-icon svg path) {\n * stroke: var(--color-background-hover);\n * }\n * ```\n */\nexport default defineComponent({\n\tname: 'FavoriteIcon',\n\tcomponents: {\n\t\tNcIconSvgWrapper,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tStarSvg,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tthis.$nextTick(() => {\n\t\t\t// MDI default viewbox is \"0 0 24 24\" but we add a stroke of 10px so we must adjust it\n\t\t\tconst el = this.$el.querySelector('svg')\n\t\t\tel?.setAttribute?.('viewBox', '-4 -4 30 30')\n\t\t})\n\t},\n\n\tmethods: {\n\t\tt,\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.favorite-marker-icon {\n\tcolor: #a08b00;\n\t// Override NcIconSvgWrapper defaults (clickable area)\n\tmin-width: unset !important;\n\tmin-height: unset !important;\n\n\t:deep() {\n\t\tsvg {\n\t\t\t// We added a stroke for a11y so we must increase the size to include the stroke\n\t\t\twidth: 32px !important;\n\t\t\theight: 32px !important;\n\n\t\t\t// Override NcIconSvgWrapper defaults of 20px\n\t\t\tmax-width: unset !important;\n\t\t\tmax-height: unset !important;\n\n\t\t\t// Sow a border around the icon for better contrast\n\t\t\tpath {\n\t\t\t\tstroke: var(--color-main-background);\n\t\t\t\tstroke-width: 10px;\n\t\t\t\tstroke-linejoin: round;\n\t\t\t\tpaint-order: stroke;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n// The preview service worker cache name (see webpack config)\nconst SWCacheName = 'images'\nconst hotCache = []\n\n/**\n * Check if the preview is already cached by the service worker\n *\n * @param previewUrl\n */\nexport const isCachedPreview = async function(previewUrl: string): Promise<boolean> {\n\ttry {\n\t\t// Browser's cache take ~100ms to check, hot cache ~10ms.\n\t\tif (!hotCache[previewUrl]) {\n\t\t\tconst cache = await window.caches?.open(SWCacheName)\n\t\t\tconst response = await cache?.match(previewUrl)\n\t\t\thotCache[previewUrl] = response !== undefined\n\t\t}\n\n\t\treturn hotCache[previewUrl]\n\t} catch {\n\t\treturn false\n\t}\n}\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div\n\t\tclass=\"file-container\"\n\t\tdata-test=\"media\"\n\t\t:class=\"{ selected }\">\n\t\t<a\n\t\t\tclass=\"file\"\n\t\t\t:href=\"file.source\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t@click.stop.prevent=\"emitClick\">\n\n\t\t\t<!-- image and loading placeholder -->\n\t\t\t<div class=\"file__images\">\n\t\t\t\t<VideoOutline v-if=\"file.mime?.includes('video')\" class=\"icon-overlay\" :size=\"64\" />\n\t\t\t\t<PlayCircleOutlineIcon v-else-if=\"file.attributes['metadata-files-live-photo'] !== undefined\" class=\"icon-overlay\" :size=\"64\" />\n\n\t\t\t\t<!-- We have two img elements to load the small and large preview -->\n\t\t\t\t<!-- Do not show the small preview if the larger one is loaded -->\n\t\t\t\t<!-- Prioritize visible files -->\n\t\t\t\t<!-- Load small preview first, then the larger one -->\n\t\t\t\t<!-- Preload large preview for near visible files -->\n\t\t\t\t<!-- Preload small preview for further away files -->\n\t\t\t\t<template v-if=\"initialized\">\n\t\t\t\t\t<canvas\n\t\t\t\t\t\tv-if=\"hasBlurhash && !loadedSmall && !loadedLarge\"\n\t\t\t\t\t\tref=\"canvas\"\n\t\t\t\t\t\tclass=\"file__blurhash\"\n\t\t\t\t\t\taria-hidden=\"true\" />\n\n\t\t\t\t\t<img\n\t\t\t\t\t\tv-if=\"!loadedLarge && (loadedSmall || (distance < 5 && !errorSmall))\"\n\t\t\t\t\t\tref=\"imgSmall\"\n\t\t\t\t\t\t:key=\"`${file.basename}-small`\"\n\t\t\t\t\t\t:src=\"srcSmall\"\n\t\t\t\t\t\t:alt=\"file.basename\"\n\t\t\t\t\t\t:decoding=\"loadedSmall || isVisible ? 'sync' : 'async'\"\n\t\t\t\t\t\t:fetchpriority=\"loadedSmall || isVisible ? 'high' : 'low'\"\n\t\t\t\t\t\t:loading=\"loadedSmall || isVisible ? 'eager' : distance < 2 ? 'auto' : 'lazy'\"\n\t\t\t\t\t\t@load=\"onLoadSmall\"\n\t\t\t\t\t\t@error=\"onErrorSmall\">\n\n\t\t\t\t\t<img\n\t\t\t\t\t\tv-if=\"loadedLarge || ((isVisible || (distance < 2 && (loadedSmall || errorSmall))) && !errorLarge)\"\n\t\t\t\t\t\tref=\"imgLarge\"\n\t\t\t\t\t\t:key=\"`${file.basename}-large`\"\n\t\t\t\t\t\t:src=\"srcLarge\"\n\t\t\t\t\t\t:alt=\"file.basename\"\n\t\t\t\t\t\t:decoding=\"loadedLarge || isVisible ? 'sync' : 'async'\"\n\t\t\t\t\t\t:fetchpriority=\"loadedLarge || isVisible ? 'high' : 'low'\"\n\t\t\t\t\t\t:loading=\"loadedLarge || isVisible ? 'auto' : 'lazy'\"\n\t\t\t\t\t\t@load=\"onLoadLarge\"\n\t\t\t\t\t\t@error=\"onErrorLarge\">\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</a>\n\n\t\t<NcCheckboxRadioSwitch\n\t\t\tv-if=\"allowSelection\"\n\t\t\tclass=\"selection-checkbox\"\n\t\t\t:aria-label=\"t('photos', 'Select image {imageName}', { imageName: file.basename })\"\n\t\t\t:checked=\"selected\"\n\t\t\t@update:checked=\"onToggle\" />\n\n\t\t<FavoriteIcon\n\t\t\tv-if=\"file.attributes.favorite === 1\"\n\t\t\tv-once\n\t\t\tclass=\"favorite-state\" />\n\t</div>\n</template>\n\n<script lang='ts'>\nimport type { PropType } from 'vue'\nimport type { PhotoFile } from '../store/files.js'\n\nimport { t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { decode } from 'blurhash'\nimport NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'\nimport PlayCircleOutlineIcon from 'vue-material-design-icons/PlayCircleOutline.vue'\nimport VideoOutline from 'vue-material-design-icons/VideoOutline.vue'\nimport FavoriteIcon from './FavoriteIcon.vue'\nimport { isCachedPreview } from '../services/PreviewService.js'\n\nexport default {\n\tname: 'FileComponent',\n\tcomponents: {\n\t\tFavoriteIcon,\n\t\tNcCheckboxRadioSwitch,\n\t\tVideoOutline,\n\t\tPlayCircleOutlineIcon,\n\t},\n\n\tinheritAttrs: false,\n\tprops: {\n\t\tfile: {\n\t\t\ttype: Object as PropType<PhotoFile>,\n\t\t\trequired: true,\n\t\t},\n\n\t\tselected: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\tallowSelection: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\tdistance: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tinitialized: false,\n\t\t\tloadedSmall: false,\n\t\t\terrorSmall: false,\n\t\t\tloadedLarge: false,\n\t\t\terrorLarge: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tariaLabel(): string {\n\t\t\tif (this.file.attributes.favorite) {\n\t\t\t\treturn t('photos', 'Favorite image, open the full size \"{name}\" image', { name: this.file.basename })\n\t\t\t}\n\t\t\treturn t('photos', 'Open the full size \"{name}\" image', { name: this.file.basename })\n\t\t},\n\n\t\tisImage(): boolean {\n\t\t\treturn this.file.mime?.startsWith('image') ?? false\n\t\t},\n\n\t\tdecodedEtag(): string {\n\t\t\treturn this.file.attributes.etag.replace('"', '').replace('"', '')\n\t\t},\n\n\t\tsrcLarge(): string {\n\t\t\treturn this.getItemURL(512)\n\t\t},\n\n\t\tsrcSmall(): string {\n\t\t\treturn this.getItemURL(64)\n\t\t},\n\n\t\tisVisible(): boolean {\n\t\t\treturn this.distance === 0\n\t\t},\n\n\t\thasBlurhash() {\n\t\t\treturn this.file.attributes.metadataBlurhash !== undefined\n\t\t},\n\t},\n\n\twatch: {\n\t\tasync file() {\n\t\t\tthis.initialized = false\n\t\t\tthis.loadedSmall = false\n\t\t\tthis.errorSmall = false\n\t\t\tthis.loadedLarge = false\n\t\t\tthis.errorLarge = false\n\n\t\t\tawait this.init()\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\tawait this.init()\n\t},\n\n\tbeforeDestroy() {\n\t\t// cancel any pending load\n\t\tif (this.$refs.imgSmall !== undefined) {\n\t\t\t(this.$refs.imgSmall as HTMLImageElement).src = ''\n\t\t}\n\t\tif (this.$refs.srcLarge !== undefined) {\n\t\t\t(this.$refs.srcLarge as HTMLImageElement).src = ''\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasync init() {\n\t\t\t[this.loadedSmall, this.loadedLarge] = await Promise.all([\n\t\t\t\tawait isCachedPreview(this.srcSmall),\n\t\t\t\tawait isCachedPreview(this.srcLarge),\n\t\t\t])\n\n\t\t\tthis.initialized = true\n\n\t\t\tawait this.$nextTick() // Wait for next tick to have the canvas in the DOM\n\n\t\t\tthis.drawBlurhash()\n\t\t},\n\n\t\temitClick() {\n\t\t\tthis.$emit('click', this.file.fileid)\n\t\t},\n\n\t\tonLoadSmall() {\n\t\t\tthis.loadedSmall = true\n\t\t},\n\n\t\tonLoadLarge() {\n\t\t\tthis.loadedLarge = true\n\t\t},\n\n\t\tonErrorSmall() {\n\t\t\tthis.errorSmall = true\n\t\t},\n\n\t\tonErrorLarge() {\n\t\t\tthis.errorLarge = true\n\t\t},\n\n\t\tonToggle(value) {\n\t\t\tthis.$emit('select-toggled', { id: this.file.fileid, value })\n\t\t},\n\n\t\tgetItemURL(size) {\n\t\t\tconst token = this.$route?.params.token\n\t\t\tif (token) {\n\t\t\t\treturn generateUrl(`/apps/photos/api/v1/publicPreview/${this.file.fileid}?etag=${this.decodedEtag}&x=${size}&y=${size}&token=${token}`)\n\t\t\t} else {\n\t\t\t\treturn generateUrl(`/apps/photos/api/v1/preview/${this.file.fileid}?etag=${this.decodedEtag}&x=${size}&y=${size}`)\n\t\t\t}\n\t\t},\n\n\t\tdrawBlurhash() {\n\t\t\tif (!this.hasBlurhash || !this.$refs.canvas) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst width = (this.$refs.canvas as HTMLCanvasElement).width\n\t\t\tconst height = (this.$refs.canvas as HTMLCanvasElement).height\n\n\t\t\tconst pixels = decode(this.file.attributes.metadataBlurhash, width, height)\n\n\t\t\tconst ctx = (this.$refs.canvas as HTMLCanvasElement).getContext('2d') as CanvasRenderingContext2D\n\t\t\tconst imageData = ctx.createImageData(width, height) as ImageData\n\t\t\timageData.data.set(pixels)\n\t\t\tctx.putImageData(imageData, 0, 0)\n\t\t},\n\n\t\tt,\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.file-container {\n\tcontain: strict;\n\tbackground: var(--color-primary-element-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,\n\t&:focus-within,\n\t&:has(:focus) {\n\t\t&::after {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tinset-inline-start: 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-element) solid 4px;\n\t\t\toutline-offset: -4px;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t.selection-checkbox {\n\t\t\topacity: 1;\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\t\tdisplay: flex; // Fill parent size\n\n\t\t&__blurhash {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\theight: 100%;\n\t\t\twidth: 100%;\n\t\t\tobject-fit: cover;\n\t\t}\n\n\t\t&__images {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\n\t\t\t.icon-overlay {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0px;\n\t\t\t\tinset-inline-end: 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: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\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\topacity: 1;\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\topacity: 0;\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\tinset-inline-end: min(22px, calc(50% - 7px));\n\t\tz-index: 1;\n\t\twidth: fit-content;\n\n\t\t:deep .checkbox-radio-switch__input:focus-visible + .checkbox-radio-switch__content,\n\t\t.checkbox-radio-switch__input:focus-visible {\n\t\t\toutline: 2px solid var(--color-main-text);\n\t\t\tbox-shadow: 0 0 0 3px var(--color-main-background);\n\t\t\toutline-offset: 0px;\n\t\t}\n\n\t\t:deep(.checkbox-radio-switch__content) {\n\t\t\tpadding: 10px;\n\t\t\tbox-sizing: border-box;\n\t\t\tbackground: var(--color-main-background);\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\twidth: 16px;\n\t\t\t\theight: 16px;\n\t\t\t\tposition: absolute;\n\t\t\t\tinset-inline-start: 14px;\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\tinset-inline-start: -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\tinset-inline-end: min(2px, calc(50% - 7px));\n\t}\n}\n</style>\n"],"names":["q","x","t","e","r","n","f","h","F","M","d","C","z","L","U","m","b","i","u","o","a","c","s","y","B","R","w","P","G","T","I","E","j","StarSvg","_sfc_main$1","defineComponent","NcIconSvgWrapper","SWCacheName","hotCache","isCachedPreview","previewUrl","response","_sfc_main","FavoriteIcon","NcCheckboxRadioSwitch","VideoOutline","PlayCircleOutlineIcon","value","size","token","generateUrl","width","height","pixels","decode","ctx","imageData"],"mappings":"2PAAG,IAACA,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EAAEC,EAAEC,GAAG,CAAC,IAAIC,EAAE,EAAE,QAAQC,EAAE,EAAEA,EAAEF,EAAE,OAAOE,IAAI,CAAC,IAAIC,EAAEH,EAAEE,CAAC,EAAE,EAAEJ,EAAE,QAAQK,CAAC,EAAEF,EAAEA,EAAE,GAAG,CAAC,CAAC,OAAOA,CAAC,EAAqHG,EAAEJ,GAAG,CAAC,IAAIC,EAAED,EAAE,IAAI,OAAOC,GAAG,OAAOA,EAAE,MAAM,KAAK,KAAKA,EAAE,MAAM,MAAM,GAAG,CAAC,EAAEI,EAAEL,GAAG,CAAC,IAAIC,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAED,CAAC,CAAC,EAAE,OAAOC,GAAG,SAAS,KAAK,MAAMA,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,OAAO,MAAM,KAAK,IAAIA,EAAE,iBAAiB,EAAE,MAAM,IAAI,EAAE,CAAC,EAAEK,EAAEN,GAAGA,EAAE,EAAE,GAAG,EAAEO,EAAE,CAACP,EAAEC,IAAIK,EAAEN,CAAC,EAAE,KAAK,IAAI,KAAK,IAAIA,CAAC,EAAEC,CAAC,EAAMO,EAAE,cAAc,KAAK,CAAC,YAAYP,EAAE,CAAC,MAAMA,CAAC,EAAE,KAAK,KAAK,kBAAkB,KAAK,QAAQA,CAAC,CAAC,EAAMQ,EAAET,GAAG,CAAC,GAAG,CAACA,GAAGA,EAAE,OAAO,EAAE,MAAM,IAAIQ,EAAE,mDAAmD,EAAE,IAAIP,EAAEF,EAAEC,EAAE,CAAC,CAAC,EAAEE,EAAE,KAAK,MAAMD,EAAE,CAAC,EAAE,EAAEE,EAAEF,EAAE,EAAE,EAAE,GAAGD,EAAE,SAAS,EAAE,EAAEG,EAAED,EAAE,MAAM,IAAIM,EAAE,uCAAuCR,EAAE,MAAM,qBAAqB,EAAE,EAAEG,EAAED,CAAC,EAAE,CAAC,EAAqFQ,EAAEV,GAAG,CAAC,IAAIC,EAAED,GAAG,GAAGE,EAAEF,GAAG,EAAE,IAAIG,EAAEH,EAAE,IAAI,MAAM,CAACI,EAAEH,CAAC,EAAEG,EAAEF,CAAC,EAAEE,EAAED,CAAC,CAAC,CAAC,EAAEQ,EAAE,CAACX,EAAEC,IAAI,CAAC,IAAIC,EAAE,KAAK,MAAMF,EAAE,GAAG,EAAEG,EAAE,KAAK,MAAMH,EAAE,EAAE,EAAE,GAAG,EAAEA,EAAE,GAAG,MAAM,CAACO,GAAGL,EAAE,GAAG,EAAE,CAAC,EAAED,EAAEM,GAAGJ,EAAE,GAAG,EAAE,CAAC,EAAEF,EAAEM,GAAG,EAAE,GAAG,EAAE,CAAC,EAAEN,CAAC,CAAC,EAAEW,EAAE,CAACZ,EAAEC,EAAEC,EAAEC,IAAI,CAACM,EAAET,CAAC,EAAEG,EAAEA,EAAE,EAAE,IAAI,EAAEJ,EAAEC,EAAE,CAAC,CAAC,EAAEa,EAAE,KAAK,MAAM,EAAE,CAAC,EAAE,EAAEC,EAAE,EAAE,EAAE,EAAEC,GAAGhB,EAAEC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAIgB,EAAE,IAAI,MAAMF,EAAED,CAAC,EAAE,QAAQI,EAAE,EAAEA,EAAED,EAAE,OAAOC,IAAI,GAAGA,IAAI,EAAE,CAAC,IAAIC,EAAEnB,EAAEC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAEgB,EAAEC,CAAC,EAAEP,EAAEQ,CAAC,CAAC,KAAK,CAAC,IAAIA,EAAEnB,EAAEC,EAAE,UAAU,EAAEiB,EAAE,EAAE,EAAEA,EAAE,CAAC,CAAC,EAAED,EAAEC,CAAC,EAAEN,EAAEO,EAAEH,EAAEZ,CAAC,CAAC,CAAC,IAAIgB,EAAElB,EAAE,EAAEmB,EAAE,IAAI,kBAAkBD,EAAEjB,CAAC,EAAE,QAAQe,EAAE,EAAEA,EAAEf,EAAEe,IAAI,QAAQC,EAAE,EAAEA,EAAEjB,EAAEiB,IAAI,CAAC,IAAIG,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAE,QAAQC,EAAE,EAAEA,EAAEX,EAAEW,IAAI,QAAQC,EAAE,EAAEA,EAAEX,EAAEW,IAAI,CAAC,IAAIC,EAAE,KAAK,IAAI,KAAK,GAAGR,EAAEO,EAAExB,CAAC,EAAE,KAAK,IAAI,KAAK,GAAGgB,EAAEO,EAAEtB,CAAC,EAAEyB,EAAEX,EAAES,EAAED,EAAEV,CAAC,EAAEO,GAAGM,EAAE,CAAC,EAAED,EAAEJ,GAAGK,EAAE,CAAC,EAAED,EAAEH,GAAGI,EAAE,CAAC,EAAED,CAAC,CAAC,IAAI,EAAErB,EAAEgB,CAAC,EAAEO,EAAEvB,EAAEiB,CAAC,EAAEO,EAAExB,EAAEkB,CAAC,EAAEH,EAAE,EAAEF,EAAE,EAAED,EAAEE,CAAC,EAAE,EAAEC,EAAE,EAAEF,EAAE,EAAED,EAAEE,CAAC,EAAES,EAAER,EAAE,EAAEF,EAAE,EAAED,EAAEE,CAAC,EAAEU,EAAET,EAAE,EAAEF,EAAE,EAAED,EAAEE,CAAC,EAAE,GAAG,CAAC,OAAOC,CAAC,EAAEU,EAAElB,ECA17D,MAAemB,EAAA,oMCyBfC,EAAAC,EAAA,CACA,KAAA,eACA,WAAA,CACA,iBAAAC,CACA,EAEA,MAAA,CACA,MAAA,CACA,QAAAH,CACA,CACA,EAEA,SAAA,CACA,KAAA,UAAA,IAAA,CAEA,KAAA,IAAA,cAAA,KAAA,GACA,eAAA,UAAA,aAAA,CAAA,CACA,CACA,EAEA,QAAA,CACA/B,EAAAA,CAAA,CAEA,CAAA,2OC1CMmC,EAAc,SACdC,EAAW,CAAC,EAOLC,EAAkB,eAAeC,EAAsC,CAC/E,GAAA,CAEC,GAAA,CAACF,EAASE,CAAU,EAAG,CAE1B,MAAMC,EAAW,MADH,MAAM,OAAO,QAAQ,KAAKJ,CAAW,IACrB,MAAMG,CAAU,EACrCF,EAAAE,CAAU,EAAIC,IAAa,MAAA,CAGrC,OAAOH,EAASE,CAAU,CAAA,MACnB,CACA,MAAA,EAAA,CAET,EC6DAE,EAAA,CACA,KAAA,gBACA,WAAA,CACA,aAAAC,EACA,sBAAAC,EACA,aAAAC,EACA,sBAAAC,CACA,EAEA,aAAA,GACA,MAAA,CACA,KAAA,CACA,KAAA,OACA,SAAA,EACA,EAEA,SAAA,CACA,KAAA,QACA,QAAA,EACA,EAEA,eAAA,CACA,KAAA,QACA,QAAA,EACA,EAEA,SAAA,CACA,KAAA,OACA,QAAA,CAAA,CAEA,EAEA,MAAA,CACA,MAAA,CACA,YAAA,GACA,YAAA,GACA,WAAA,GACA,YAAA,GACA,WAAA,EACA,CACA,EAEA,SAAA,CACA,WAAA,CACA,OAAA,KAAA,KAAA,WAAA,SACA5C,EAAA,SAAA,oDAAA,CAAA,KAAA,KAAA,KAAA,SAAA,EAEAA,EAAA,SAAA,oCAAA,CAAA,KAAA,KAAA,KAAA,SAAA,CACA,EAEA,SAAA,CACA,OAAA,KAAA,KAAA,MAAA,WAAA,OAAA,GAAA,EACA,EAEA,aAAA,CACA,OAAA,KAAA,KAAA,WAAA,KAAA,QAAA,SAAA,EAAA,EAAA,QAAA,SAAA,EAAA,CACA,EAEA,UAAA,CACA,OAAA,KAAA,WAAA,GAAA,CACA,EAEA,UAAA,CACA,OAAA,KAAA,WAAA,EAAA,CACA,EAEA,WAAA,CACA,OAAA,KAAA,WAAA,CACA,EAEA,aAAA,CACA,OAAA,KAAA,KAAA,WAAA,mBAAA,MAAA,CAEA,EAEA,MAAA,CACA,MAAA,MAAA,CACA,KAAA,YAAA,GACA,KAAA,YAAA,GACA,KAAA,WAAA,GACA,KAAA,YAAA,GACA,KAAA,WAAA,GAEA,MAAA,KAAA,KAAA,CAAA,CAEA,EAEA,MAAA,SAAA,CACA,MAAA,KAAA,KAAA,CACA,EAEA,eAAA,CAEA,KAAA,MAAA,WAAA,SACA,KAAA,MAAA,SAAA,IAAA,IAEA,KAAA,MAAA,WAAA,SACA,KAAA,MAAA,SAAA,IAAA,GAEA,EAEA,QAAA,CACA,MAAA,MAAA,CACA,CAAA,KAAA,YAAA,KAAA,WAAA,EAAA,MAAA,QAAA,IAAA,CACA,MAAAqC,EAAA,KAAA,QAAA,EACA,MAAAA,EAAA,KAAA,QAAA,CAAA,CACA,EAEA,KAAA,YAAA,GAEA,MAAA,KAAA,UAAA,EAEA,KAAA,aAAA,CACA,EAEA,WAAA,CACA,KAAA,MAAA,QAAA,KAAA,KAAA,MAAA,CACA,EAEA,aAAA,CACA,KAAA,YAAA,EACA,EAEA,aAAA,CACA,KAAA,YAAA,EACA,EAEA,cAAA,CACA,KAAA,WAAA,EACA,EAEA,cAAA,CACA,KAAA,WAAA,EACA,EAEA,SAAAQ,EAAA,CACA,KAAA,MAAA,iBAAA,CAAA,GAAA,KAAA,KAAA,OAAA,MAAAA,EAAA,CACA,EAEA,WAAAC,EAAA,CACA,MAAAC,EAAA,KAAA,QAAA,OAAA,MACA,OAAAA,EACAC,EAAA,qCAAA,KAAA,KAAA,MAAA,SAAA,KAAA,WAAA,MAAAF,CAAA,MAAAA,CAAA,UAAAC,CAAA,EAAA,EAEAC,EAAA,+BAAA,KAAA,KAAA,MAAA,SAAA,KAAA,WAAA,MAAAF,CAAA,MAAAA,CAAA,EAAA,CAEA,EAEA,cAAA,CACA,GAAA,CAAA,KAAA,aAAA,CAAA,KAAA,MAAA,OACA,OAGA,MAAAG,EAAA,KAAA,MAAA,OAAA,MACAC,EAAA,KAAA,MAAA,OAAA,OAEAC,EAAAC,EAAA,KAAA,KAAA,WAAA,iBAAAH,EAAAC,CAAA,EAEAG,EAAA,KAAA,MAAA,OAAA,WAAA,IAAA,EACAC,EAAAD,EAAA,gBAAAJ,EAAAC,CAAA,EACAI,EAAA,KAAA,IAAAH,CAAA,EACAE,EAAA,aAAAC,EAAA,EAAA,CAAA,CACA,EAEAtD,EAAAA,CAAA,CAGA","x_google_ignoreList":[0,1]} |