@robot-admin/naive-ui-components 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +2 -0
- package/README_EN.md +2 -0
- package/SECURITY.md +10 -0
- package/THIRD_PARTY_NOTICES.md +10 -0
- package/dist/C_AntV2.cjs +1 -1
- package/dist/C_Barcode2.cjs +1 -1
- package/dist/C_Editor.css +18 -18
- package/dist/C_Editor2.cjs +1 -1
- package/dist/C_Editor2.js +1 -1
- package/dist/C_FilePreview.css +60 -60
- package/dist/C_FilePreview2.cjs +1 -1
- package/dist/C_FilePreview2.js +1 -1
- package/dist/C_Form.css +18 -18
- package/dist/C_FullCalendar2.cjs +1 -1
- package/dist/C_Markdown.css +38 -39
- package/dist/C_Markdown2.cjs +1 -1
- package/dist/C_Markdown2.js +1 -1
- package/dist/C_QRCode2.cjs +1 -1
- package/dist/C_Table.css +18 -18
- package/dist/C_Upload2.cjs +1 -1
- package/dist/C_WaterFall.css +49 -31
- package/dist/C_WaterFall2.cjs +1 -1
- package/dist/C_WaterFall2.js +1 -1
- package/dist/C_WorkFlow.css +112 -111
- package/dist/C_WorkFlow2.cjs +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/chunk.cjs +1 -1
- package/dist/constants.d.cts +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants3.d.cts +1 -1
- package/dist/constants3.d.ts +1 -1
- package/dist/constants4.d.cts +5 -5
- package/dist/constants4.d.ts +5 -5
- package/dist/constants5.d.cts +2 -2
- package/dist/constants5.d.ts +2 -2
- package/dist/data.cjs +1 -1
- package/dist/data.d.cts +7 -7
- package/dist/data.d.ts +7 -7
- package/dist/data.js +1 -1
- package/dist/graphics.d.cts +17 -11
- package/dist/graphics.d.ts +17 -11
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.js +1 -1
- package/dist/html.cjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.vue.d.cts +2 -2
- package/dist/index.vue.d.ts +2 -2
- package/dist/index10.vue.d.cts +4 -4
- package/dist/index10.vue.d.ts +5 -5
- package/dist/index11.vue.d.cts +5 -5
- package/dist/index12.vue.d.ts +3 -3
- package/dist/index13.vue.d.cts +3 -3
- package/dist/index13.vue.d.ts +9 -9
- package/dist/index14.vue.d.cts +9 -9
- package/dist/index16.vue.d.ts +1 -1
- package/dist/index17.vue.d.cts +1 -1
- package/dist/index17.vue.d.ts +1 -1
- package/dist/index18.vue.d.cts +1 -1
- package/dist/index19.vue.d.cts +2 -2
- package/dist/index19.vue.d.ts +2 -2
- package/dist/index2.vue.d.cts +2 -2
- package/dist/index2.vue.d.ts +2 -2
- package/dist/index20.vue.d.cts +1 -1
- package/dist/index20.vue.d.ts +1 -1
- package/dist/index21.vue.d.cts +1 -1
- package/dist/index21.vue.d.ts +1 -1
- package/dist/index24.vue.d.cts +1 -1
- package/dist/index24.vue.d.ts +1 -1
- package/dist/index25.vue.d.cts +2 -2
- package/dist/index25.vue.d.ts +2 -2
- package/dist/index26.vue.d.cts +2 -2
- package/dist/index26.vue.d.ts +2 -2
- package/dist/index3.vue.d.cts +4 -4
- package/dist/index3.vue.d.ts +4 -4
- package/dist/index6.vue.d.ts +2 -2
- package/dist/index7.vue.d.cts +2 -2
- package/dist/index8.vue.d.ts +1 -1
- package/dist/index9.vue.d.cts +1 -1
- package/dist/index9.vue.d.ts +4 -4
- package/dist/mapUtils.d.cts +1 -1
- package/dist/mapUtils.d.ts +1 -1
- package/dist/style.css +277 -259
- package/dist/types.d.ts +5 -0
- package/dist/types2.d.cts +5 -0
- package/dist/useCalendarEvents.d.cts +1 -1
- package/dist/useCalendarEvents.d.ts +1 -1
- package/dist/useCollapsePanel.d.cts +1 -1
- package/dist/useCollapsePanel.d.ts +1 -1
- package/dist/useCropperCore.d.cts +9 -9
- package/dist/useCropperCore.d.ts +9 -9
- package/dist/useDynamicFormState.d.cts +2 -2
- package/dist/useDynamicFormState.d.ts +2 -2
- package/dist/useEdgeInteraction.d.cts +2 -2
- package/dist/useEdgeInteraction.d.ts +2 -2
- package/dist/useFullscreen.d.cts +1 -1
- package/dist/useFullscreen.d.ts +1 -1
- package/dist/useInfiniteScroll.d.cts +17 -18
- package/dist/useInfiniteScroll.d.ts +17 -18
- package/dist/useQRCode.d.cts +3 -3
- package/dist/useQRCode.d.ts +3 -3
- package/dist/useSignatureHistory.d.cts +4 -4
- package/dist/useSignatureHistory.d.ts +4 -4
- package/dist/useSplitResize.d.cts +4 -4
- package/dist/useSplitResize.d.ts +4 -4
- package/dist/useTableQuery.cjs +1 -1
- package/dist/useTableQuery.d.cts +15 -13
- package/dist/useTableQuery.d.ts +15 -13
- package/dist/useTableQuery.js +1 -1
- package/dist/useWorkflowValidation.d.cts +35 -35
- package/dist/useWorkflowValidation.d.ts +35 -35
- package/dist/verification.d.cts +3 -3
- package/dist/verification.d.ts +3 -3
- package/dist/xlsx.js +143 -0
- package/dist/xlsx2.cjs +143 -0
- package/docs/architecture.en.md +1 -0
- package/docs/architecture.md +1 -0
- package/docs/guides/api-migration.md +111 -0
- package/docs/guides/runtime-performance.md +16 -1
- package/docs/guides/waterfall.md +113 -0
- package/docs/runtime-review-20261019.md +2 -0
- package/licenses/SheetJS.txt +201 -0
- package/package.json +13 -9
package/dist/C_Table.css
CHANGED
|
@@ -298,7 +298,7 @@ html.dark .action-divider[data-v-48eb3073]:hover {
|
|
|
298
298
|
.w-e-video{box-sizing:border-box;display:flex;margin:0;max-width:100%;width:100%}.w-e-video>iframe,.w-e-video>video{display:block;max-width:100%}.w-e-textarea-video-container{background-image:linear-gradient(45deg,#eee 25%,transparent 0,transparent 75%,#eee 0,#eee),linear-gradient(45deg,#eee 25%,#fff 0,#fff 75%,#eee 0,#eee);background-position:0 0,10px 10px;background-size:20px 20px;border:1px dashed var(--w-e-textarea-border-color);border-radius:5px;margin-top:10px;overflow:auto;padding:10px 0}.w-e-video-align-left{justify-content:flex-start}.w-e-video-align-center{justify-content:center}.w-e-video-align-right{justify-content:flex-end}
|
|
299
299
|
|
|
300
300
|
/* CSS 变量 — 支持外部主题覆盖 */
|
|
301
|
-
.c-editor[data-v-
|
|
301
|
+
.c-editor[data-v-2625824a] {
|
|
302
302
|
--c-editor-toolbar-bg: #ffffff;
|
|
303
303
|
--c-editor-toolbar-border: #e5e7eb;
|
|
304
304
|
--c-editor-menu-color: #333333;
|
|
@@ -316,7 +316,7 @@ html.dark .action-divider[data-v-48eb3073]:hover {
|
|
|
316
316
|
}
|
|
317
317
|
|
|
318
318
|
/* 暗色主题 — 覆盖 CSS 变量 */
|
|
319
|
-
.editor-dark[data-v-
|
|
319
|
+
.editor-dark[data-v-2625824a] {
|
|
320
320
|
--c-editor-toolbar-bg: #1f2937;
|
|
321
321
|
--c-editor-toolbar-border: #374151;
|
|
322
322
|
--c-editor-menu-color: #e5e7eb;
|
|
@@ -329,60 +329,60 @@ html.dark .action-divider[data-v-48eb3073]:hover {
|
|
|
329
329
|
--c-editor-text-focus-bg: #111827;
|
|
330
330
|
--c-editor-text-focus-color: #e5e7eb;
|
|
331
331
|
}
|
|
332
|
-
.editor-dark[data-v-
|
|
332
|
+
.editor-dark[data-v-2625824a] .w-e-toolbar {
|
|
333
333
|
background-color: var(--c-editor-toolbar-bg) !important;
|
|
334
334
|
border-color: var(--c-editor-toolbar-border) !important;
|
|
335
335
|
}
|
|
336
|
-
.editor-dark[data-v-
|
|
336
|
+
.editor-dark[data-v-2625824a] .w-e-toolbar .w-e-menu .w-e-menu-item {
|
|
337
337
|
color: var(--c-editor-menu-color) !important;
|
|
338
338
|
}
|
|
339
|
-
.editor-dark[data-v-
|
|
339
|
+
.editor-dark[data-v-2625824a] .w-e-toolbar .w-e-menu .w-e-menu-item:hover {
|
|
340
340
|
background-color: var(--c-editor-menu-hover-bg) !important;
|
|
341
341
|
color: var(--c-editor-menu-hover-color) !important;
|
|
342
342
|
}
|
|
343
|
-
.editor-dark[data-v-
|
|
343
|
+
.editor-dark[data-v-2625824a] .w-e-toolbar .w-e-menu .w-e-menu-item.w-e-active {
|
|
344
344
|
background-color: var(--c-editor-menu-active-bg) !important;
|
|
345
345
|
color: var(--c-editor-menu-active-color) !important;
|
|
346
346
|
}
|
|
347
|
-
.editor-dark[data-v-
|
|
347
|
+
.editor-dark[data-v-2625824a] .w-e-text-container {
|
|
348
348
|
background-color: var(--c-editor-container-bg) !important;
|
|
349
349
|
border-color: var(--c-editor-container-border) !important;
|
|
350
350
|
}
|
|
351
|
-
.editor-dark[data-v-
|
|
351
|
+
.editor-dark[data-v-2625824a] .w-e-text-container .w-e-text {
|
|
352
352
|
background-color: var(--c-editor-text-bg) !important;
|
|
353
353
|
color: var(--c-editor-text-color) !important;
|
|
354
354
|
}
|
|
355
|
-
.editor-dark[data-v-
|
|
355
|
+
.editor-dark[data-v-2625824a] .w-e-text-container .w-e-text:focus {
|
|
356
356
|
background-color: var(--c-editor-text-focus-bg) !important;
|
|
357
357
|
color: var(--c-editor-text-focus-color) !important;
|
|
358
358
|
}
|
|
359
|
-
[data-v-
|
|
359
|
+
[data-v-2625824a] .w-e-toolbar,[data-v-2625824a] .w-e-text-container {
|
|
360
360
|
max-width: 100% !important;
|
|
361
361
|
overflow-x: auto !important;
|
|
362
362
|
box-sizing: border-box !important;
|
|
363
363
|
}
|
|
364
|
-
[data-v-
|
|
364
|
+
[data-v-2625824a] .w-e-text {
|
|
365
365
|
max-width: 100% !important;
|
|
366
366
|
word-wrap: break-word !important;
|
|
367
367
|
overflow-wrap: break-word !important;
|
|
368
368
|
}
|
|
369
|
-
[data-v-
|
|
369
|
+
[data-v-2625824a] .w-e-toolbar,[data-v-2625824a] .w-e-text-container,[data-v-2625824a] .w-e-text {
|
|
370
370
|
transition:
|
|
371
371
|
background-color var(--c-editor-transition-duration) ease,
|
|
372
372
|
border-color var(--c-editor-transition-duration) ease,
|
|
373
373
|
color var(--c-editor-transition-duration) ease !important;
|
|
374
374
|
}
|
|
375
|
-
.editor-focused[data-v-
|
|
375
|
+
.editor-focused[data-v-2625824a] {
|
|
376
376
|
max-width: 100% !important;
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
|
|
380
380
|
/* layer: default */
|
|
381
|
-
.hidden[data-v-
|
|
382
|
-
.w-full[data-v-
|
|
383
|
-
.px[data-v-
|
|
384
|
-
.transition[data-v-
|
|
385
|
-
.ease[data-v-
|
|
381
|
+
.hidden[data-v-2625824a]{display:none;}
|
|
382
|
+
.w-full[data-v-2625824a]{width:100%;}
|
|
383
|
+
.px[data-v-2625824a]{padding-left:1rem;padding-right:1rem;}
|
|
384
|
+
.transition[data-v-2625824a]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
|
|
385
|
+
.ease[data-v-2625824a]{transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);}
|
|
386
386
|
|
|
387
387
|
.c-form .c-form-actions[data-v-37ca39aa] {
|
|
388
388
|
margin-top: var(--c-form-row-gap, 20px);
|
package/dist/C_Upload2.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./chunk.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`),a=require(`spark-md5`);a=e.t(a);const o=2*1024*1024,s={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},c={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},l={"image/":`mdi:file-image-outline`,"video/":`mdi:file-video-outline`,"audio/":`mdi:file-music-outline`,"application/pdf":`mdi:file-pdf-box`,"application/zip":`mdi:folder-zip-outline`,"application/x-rar":`mdi:folder-zip-outline`,"application/vnd.ms-excel":`mdi:file-excel-outline`,"application/vnd.openxmlformats-officedocument.spreadsheetml":`mdi:file-excel-outline`,"application/msword":`mdi:file-word-outline`,"application/vnd.openxmlformats-officedocument.wordprocessingml":`mdi:file-word-outline`,"text/":`mdi:file-document-outline`,default:`mdi:file-outline`};function u(e){for(let[t,n]of Object.entries(l))if(t!==`default`&&e.startsWith(t))return n;return l.default}function d(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**n).toFixed(n>0?1:0)} ${t[n]}`}function f(e){let t=[],n=new Set,i=0,a=!1,o=()=>{if(!a){a=!0;try{let n=Math.max(1,Math.trunc(e.value)||1);for(;i<n&&t.length;)t.shift()()}finally{a=!1}}};return(0,r.watch)(e,o),Object.assign((e,r)=>{let a=!1,s=!1,c,l=(e=!0)=>a?!1:(a=!0,n.delete(d),s&&--i,e&&o(),!0),u=()=>{if(!a){s=!0,i+=1;try{c=e({...r,onProgress:e=>{a||r.onProgress?.(e)},onSuccess:e=>{l()&&r.onSuccess?.(e)},onError:e=>{l()&&r.onError?.(e)}})}catch(e){l()&&r.onError?.(e instanceof Error?e:Error(String(e)))}}},d=()=>{let e=t.indexOf(u);if(e>=0&&t.splice(e,1),l(!1))try{c?.abort()}catch{}finally{o()}};return n.add(d),t.push(u),o(),{abort:d}},{abortAll(){let e=a;a=!0,t.length=0;try{for(let e of n)e()}finally{a=e}}})}const p=e=>new Promise((t,n)=>{let r,i,a=()=>{e?.removeEventListener(`abort`,o),r!==void 0&&cancelAnimationFrame(r),i!==void 0&&clearTimeout(i)},o=()=>{a(),n(e?.reason??new DOMException(`Hash cancelled`,`AbortError`))},s=()=>{a(),t()};if(e?.addEventListener(`abort`,o,{once:!0}),e?.aborted){o();return}typeof requestAnimationFrame==`function`?r=requestAnimationFrame(s):i=setTimeout(s,0)});function m(e){let t=(0,r.ref)(0),n=(0,r.ref)(0),i=(0,r.computed)(()=>t.value>0),o=Promise.resolve();async function s(e,t,n){let r=o,i;o=new Promise(e=>{i=e}),await r;try{return await c(e,t,n)}finally{i()}}async function c(r,i,o){o?.throwIfAborted(),t.value+=1,n.value=0,i?.(0);let s=new a.default.ArrayBuffer,c=Math.max(1,Math.trunc(Number(e.value)||1)),l=Math.max(1,Math.ceil(r.size/c));try{for(let e=0;e<l;e+=1){o?.throwIfAborted();let t=e*c,a=await r.slice(t,t+c).arrayBuffer();o?.throwIfAborted(),s.append(a),n.value=Math.round((e+1)/l*100),i?.(n.value),await p(o)}return o?.throwIfAborted(),s.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:i,hashProgress:(0,r.readonly)(n),calculateHash:s}}function h(e){let t=new Map,n=new Map;function r(t){let n=Math.max(1,Math.trunc(Number(e.chunkSize.value)||1)),r=[],i=0,a=0;for(;a<t.size;){let e=Math.min(a+n,t.size);r.push({index:i,blob:t.slice(a,e),size:e-a,uploaded:!1}),a=e,i++}return r}async function i(t,n){if(e.uploadedChunksQuery?.value)try{let r=await e.uploadedChunksQuery.value(t);for(let e of r){let t=n[e];t&&(t.uploaded=!0)}}catch{}}function a(t){return new Promise((n,r)=>{let i=!1,a=()=>{i||(i=!0,n())},o=e=>{i||(i=!0,t.setError(),r(e instanceof Error?e:Error(String(e))))},s={action:e.action.value,headers:e.headers.value,data:{...e.data.value,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,filename:t.file.name},file:t.chunk.blob,filename:t.file.name,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,onProgress:()=>{},onSuccess:()=>{if(!i){if(t.isCancelled()){a();return}t.chunk.uploaded=!0,t.setUploadedBytes(t.chunk.size),t.onProgress({uploadedChunks:t.chunks.filter(e=>e.uploaded).length,totalChunks:t.totalChunks,uploadedBytes:t.chunks.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),totalBytes:t.totalBytes}),a()}},onError:o};try{let n=e.customRequest?.value??g,r=e.scheduler?e.scheduler(n,s):n(s);t.abortControllers.push(()=>{try{r.abort()}catch{}finally{a()}})}catch(e){o(e)}})}async function o(o){let{uid:c,file:l,hash:u,onProgress:d,onSuccess:f,onError:p,isPaused:m}=o,h=Symbol(c);n.set(c,h);let g=()=>n.get(c)!==h,_=()=>{g()||n.delete(c)},v=r(l),y=v.length,b=l.size,x=0;if(await i(u,v),g()||m()){_();return}x=v.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),d({uploadedChunks:v.filter(e=>e.uploaded).length,totalChunks:y,uploadedBytes:x,totalBytes:b});let S=v.filter(e=>!e.uploaded);if(S.length===0){try{g()||await s(u,l.name,y,f,p,g)}finally{_()}return}let C=[];t.set(c,C);let w=Math.max(1,Math.trunc(Number(e.concurrency.value)||1)),T=0,E=!1;async function D(){for(;T<S.length&&!E&&!m()&&!g();){let e=S[T++];await a({chunk:e,hash:u,file:l,totalChunks:y,chunks:v,totalBytes:b,abortControllers:C,onProgress:e=>{g()||d(e)},setUploadedBytes:e=>{x+=e},setError:()=>{E=!0},isCancelled:g})}}let O=Array.from({length:Math.min(w,S.length)},()=>D());try{let e=(await Promise.allSettled(O)).find(e=>e.status===`rejected`);e&&!g()?p(e.reason instanceof Error?e.reason:Error(String(e.reason))):!E&&!m()&&!g()&&await s(u,l.name,y,f,p,g)}finally{g()||t.delete(c),_()}}async function s(t,n,r,i,a,o){if(e.mergeChunks?.value)try{let a=await e.mergeChunks.value(t,n,r);o()||i(a)}catch(e){o()||a(e instanceof Error?e:Error(`分片合并失败`))}else o()||i({message:`分片上传完成(未配置合并函数)`})}function c(e){n.delete(e),t.get(e)?.forEach(e=>e()),t.delete(e)}function l(){n.clear(),t.forEach(e=>{e.forEach(e=>e())}),t.clear()}return{createChunks:r,uploadChunks:o,abortUpload:c,abortAll:l}}function g(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n;try{n=JSON.parse(t.responseText)}catch{n=t.responseText}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>{e.onError?.(Error(`网络错误`))}),t.addEventListener(`abort`,()=>{e.onError?.(new DOMException(`上传已取消`,`AbortError`))});let n=new FormData;return n.append(`file`,e.file,e.filename),e.data&&Object.entries(e.data).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function _(e){return e instanceof Error?e:Error(String(e))}function v(e){let t=[],n=(0,r.ref)(0),i=new Map,a=()=>{n.value=i.size},o=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function s(){for(;i.size<o()&&t.length>0;){let n=t.shift(),{file:r}=n;if(!r.raw||i.has(r.uid))continue;let o=!1,c=e=>{o||(o=!0,i.delete(r.uid),a(),e?.error?n.onError(r.uid,e.error):e&&`response`in e&&n.onSuccess(r.uid,e.response),s())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:r.raw,filename:r.name,onProgress:e=>n.onProgress(r.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};i.set(r.uid,{abort:()=>void 0,settle:c}),a();try{let t=e.customRequest?.value??y,n=e.scheduler?e.scheduler(t,l):t(l),a=i.get(r.uid);a&&(a.abort=n.abort)}catch(e){c({error:_(e)})}}}function c(e,n,r,i){l(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),s()}function l(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=i.get(e);if(n){n.settle();try{n.abort()}catch{}}}function u(){t.length=0;let e=[...i.values()];i.clear(),a(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return(0,r.watch)(e.concurrency,s),{activeCount:(0,r.readonly)(n),enqueue:c,abort:l,abortAll:u}}function y(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),Object.entries(e.headers??{}).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n=t.responseText;try{n=JSON.parse(t.responseText)}catch{}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>e.onError?.(Error(`网络错误`)));let n=new FormData;return n.append(`file`,e.file,e.filename),Object.entries(e.data??{}).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function b(e){let t=(0,r.computed)(()=>e.action??``),n=(0,r.computed)(()=>e.headers??{}),i=(0,r.computed)(()=>e.data??{}),a=(0,r.computed)(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:o}),s=(0,r.computed)(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),c=(0,r.computed)(()=>e.customRequest),l=(0,r.computed)(()=>e.instantCheck),u=(0,r.computed)(()=>e.uploadedChunksQuery),d=(0,r.computed)(()=>e.mergeChunks),p=(0,r.ref)((e.defaultFileList??[]).map(e=>({...e}))),g=(0,r.reactive)(new Set),_=new Map,y=new Set,{hashing:b,hashProgress:x,calculateHash:S}=m(a),C=f(s),w=new Map,T=e=>{w.get(e)?.abort(),w.delete(e)},E=()=>{w.forEach(e=>e.abort()),w.clear()},D=h({scheduler:C,chunkSize:a,concurrency:s,action:t,headers:n,data:i,customRequest:c,uploadedChunksQuery:u,mergeChunks:d}),O=v({scheduler:C,concurrency:s,action:t,headers:n,data:i,customRequest:c}),k=(0,r.computed)(()=>{let e=p.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function A(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function j(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return y.add(t),t}}function M(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&p.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:A(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:j(r)};n.push(t)}return p.value.push(...n),n}function N(e,t){let n=p.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function P(e){T(e),_.set(e,Symbol(e)),D.abortUpload(e),O.abort(e),g.delete(e);let t=p.value.findIndex(t=>t.uid===e);if(t!==-1){let e=p.value[t];L(e.thumbUrl),p.value.splice(t,1)}}function F(){C.abortAll(),E(),D.abortAll(),O.abortAll(),g.clear(),p.value.forEach(e=>{L(e.thumbUrl)}),p.value=[],_.clear()}async function I(t){if((e.maxSize??0)>0&&t.size>e.maxSize)return null;if(e.beforeUpload){let n=await e.beforeUpload(t);if(n===!1)return null;if(n instanceof File)return(e.maxSize??0)>0&&n.size>e.maxSize?null:n}return t}function L(e){!e||!y.has(e)||(URL.revokeObjectURL(e),y.delete(e))}function R(e,t){return _.get(e)===t&&!g.has(e)&&p.value.some(t=>t.uid===e)}async function z(e,t){T(e.uid);let n=new AbortController;w.set(e.uid,n);try{return await S(e.raw,n=>{R(e.uid,t)&&N(e.uid,{percent:n})},n.signal)}finally{w.get(e.uid)===n&&w.delete(e.uid)}}async function B(n){if(!n.raw)return;let r=Symbol(n.uid);_.set(n.uid,r),N(n.uid,{status:`validating`,error:void 0});let i;try{i=await I(n.raw)}catch(e){R(n.uid,r)&&N(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(R(n.uid,r)){if(!i){N(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(L(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:j(i)})),!c.value&&!t.value.trim()){N(n.uid,{status:`error`,error:`未配置上传地址`});return}if(l.value&&!n.hash){N(n.uid,{status:`hashing`});try{let e=await z(n,r);if(!R(n.uid,r))return;N(n.uid,{hash:e});let t=await l.value(e,n.raw.name);if(!R(n.uid,r))return;if(t.exists){N(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!R(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await V(n,r):H(n,r)}}async function V(e,t){let n=e.raw,{hash:r}=e;if(!r){N(e.uid,{status:`hashing`});try{if(r=await z(e,t),!R(e.uid,t))return;N(e.uid,{hash:r})}catch{R(e.uid,t)&&N(e.uid,{status:`error`,error:`Hash 计算失败`});return}}N(e.uid,{status:`uploading`,percent:0}),await D.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!R(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);N(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{R(e.uid,t)&&N(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{R(e.uid,t)&&N(e.uid,{status:`error`,error:n.message})},isPaused:()=>g.has(e.uid)})}function H(e,t){N(e.uid,{status:`uploading`,percent:0}),O.enqueue(e,(e,n)=>{R(e,t)&&N(e,{percent:n})},(e,n)=>{R(e,t)&&N(e,{status:`success`,percent:100,response:n})},(e,n)=>{R(e,t)&&N(e,{status:`error`,error:n.message})})}function U(){p.value.filter(e=>e.status===`pending`).forEach(e=>void B(e))}function W(){C.abortAll(),p.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(T(e.uid),g.add(e.uid),_.set(e.uid,Symbol(e.uid)),D.abortUpload(e.uid),O.abort(e.uid),N(e.uid,{status:`paused`}))})}function G(){p.value.forEach(e=>{e.status===`paused`&&(g.delete(e.uid),N(e.uid,{status:`pending`}))}),U()}function K(e){let t=p.value.find(t=>t.uid===e);t&&t.status===`error`&&(N(e,{status:`pending`,percent:0,error:void 0}),B(t))}function q(){return p.value.filter(e=>e.status===`success`||e.status===`instant`)}return(0,r.onBeforeUnmount)(()=>{C.abortAll(),E(),D.abortAll(),O.abortAll(),_.clear(),p.value.forEach(e=>{L(e.thumbUrl)})}),{fileList:p,totalPercent:k,hashing:b,hashProgress:x,addFiles:M,removeFile:P,clearAll:F,startUpload:U,pauseAll:W,resumeAll:G,retryFile:K,processFile:B,getSuccessList:q}}function x(e,t,n,i,a){let o=(0,r.ref)(!1),s=null,c=!1;function l(e){t.value&&(e.preventDefault(),o.value=!0)}function u(e){t.value&&(e.preventDefault(),o.value=!0)}function d(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(o.value=!1)}async function f(e){if(!t.value)return;e.preventDefault(),o.value=!1;let n=e.dataTransfer?.items;if(!n)return;let r=await S(n,e.dataTransfer);if(c||!t.value)return;let s=w(r,i.value);s.length>0&&a(s)}function p(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&r.push(e)}}let o=w(r,i.value);o.length>0&&(e.preventDefault(),a(o))}function m(){let t=e.value;!t||s===t||(s=t,t.addEventListener(`dragenter`,l),t.addEventListener(`dragover`,u),t.addEventListener(`dragleave`,d),t.addEventListener(`drop`,f),n.value&&t.addEventListener(`paste`,p))}function h(){let e=s;e&&(e.removeEventListener(`dragenter`,l),e.removeEventListener(`dragover`,u),e.removeEventListener(`dragleave`,d),e.removeEventListener(`drop`,f)),e?.removeEventListener(`paste`,p),s=null}return(0,r.onMounted)(()=>{c=!1,m()}),(0,r.onBeforeUnmount)(()=>{c=!0,h()}),(0,r.watch)([e,t,n],()=>{h(),m()}),{isDragOver:(0,r.readonly)(o)}}async function S(e,t){let n=[];for(let t=0;t<e.length;t++){let r=e[t].webkitGetAsEntry?.();r&&n.push(r)}if(n.length>0)return(await Promise.all(n.map(C))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function C(e){if(e.isFile)return new Promise(t=>{e.file(e=>t([e]),()=>t([]))});if(e.isDirectory){let t=e.createReader(),n=[];for(;;){let e=await new Promise(e=>{t.readEntries(t=>e(t),()=>e([]))});if(e.length===0)break;n.push(...e)}return(await Promise.all(n.map(C))).flat()}return[]}function w(e,t){if(!t)return e;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);return n.length===0?e:e.filter(e=>n.some(t=>{if(t.startsWith(`.`))return e.name.toLowerCase().endsWith(t);if(t.endsWith(`/*`)){let n=t.replace(`/*`,``);return e.type.toLowerCase().startsWith(`${n}/`)}return e.type.toLowerCase()===t}))}const T=[`tabindex`,`aria-disabled`,`onKeydown`],E=[`accept`,`multiple`,`webkitdirectory`,`disabled`],D={class:`upload-area__default`},O={class:`upload-area__text`},k={key:0},A={key:1},j={key:0,class:`upload-area__tip`},M=(0,r.defineComponent)({__name:`UploadArea`,props:{accept:{default:``},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},tip:{default:``}},emits:[`files`],setup(e,{expose:n,emit:i}){let a=e,o=i,s=(0,r.ref)(),c=(0,r.ref)(),{isDragOver:l}=x(s,(0,r.computed)(()=>a.draggable&&!a.disabled),(0,r.computed)(()=>a.pasteable&&!a.disabled),(0,r.computed)(()=>a.accept),e=>o(`files`,e));function u(){a.disabled||c.value?.click()}function d(e){let t=e.target,n=a.disabled?[]:w(Array.from(t.files??[]),a.accept);n.length>0&&o(`files`,n),t.value=``}return n({triggerSelect:u}),(n,i)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{ref_key:`areaRef`,ref:s,class:(0,r.normalizeClass)([`upload-area`,{"upload-area--drag-over":(0,r.unref)(l),"upload-area--disabled":e.disabled}]),role:`button`,tabindex:e.disabled?-1:0,"aria-disabled":e.disabled,onClick:u,onKeydown:[(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`enter`]),(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`space`])]},[(0,r.createElementVNode)(`input`,{ref_key:`inputRef`,ref:c,type:`file`,class:`upload-area__input`,accept:e.accept,multiple:e.multiple,webkitdirectory:e.directory||void 0,disabled:e.disabled,onClick:i[0]||=(0,r.withModifiers)(()=>{},[`stop`]),onChange:d},null,40,E),(0,r.renderSlot)(n.$slots,`default`,{},()=>[(0,r.createElementVNode)(`div`,D,[(0,r.createVNode)(t.t,{name:(0,r.unref)(l)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),(0,r.createElementVNode)(`div`,O,[(0,r.unref)(l)?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,k,`释放文件到此处`)):((0,r.openBlock)(),(0,r.createElementBlock)(`span`,A,[i[4]||=(0,r.createTextVNode)(` 点击或拖拽文件到此区域上传 `,-1),e.pasteable?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[i[1]||=(0,r.createTextVNode)(` ,支持 `,-1),i[2]||=(0,r.createElementVNode)(`kbd`,null,`Ctrl+V`,-1),i[3]||=(0,r.createTextVNode)(` 粘贴 `,-1)],64)):(0,r.createCommentVNode)(`v-if`,!0)]))]),e.tip?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,j,(0,r.toDisplayString)(e.tip),1)):(0,r.createCommentVNode)(`v-if`,!0)])],!0)],42,T))}});var N=n.t(M,[[`__scopeId`,`data-v-705892ab`]]);const P={class:`file-list__thumb`},F=[`src`,`alt`],I={class:`file-list__info`},L={class:`file-list__name`},R={class:`file-list__meta`},z={class:`file-list__size`},B={key:0,class:`file-list__instant`},V={key:1,class:`file-list__chunk-info`},H={key:2,class:`file-list__error`},U={class:`file-list__actions`},W=(0,r.defineComponent)({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=n;return(n,o)=>((0,r.openBlock)(),(0,r.createBlock)(r.TransitionGroup,{name:`file-list`,tag:`div`,class:`file-list`},{default:(0,r.withCtx)(()=>[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.fileList,n=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:n.uid,class:(0,r.normalizeClass)([`file-list__item`,`file-list__item--${n.status}`])},[(0,r.createCommentVNode)(` 缩略图 / 图标 `),(0,r.createElementVNode)(`div`,P,[e.showThumbnail&&n.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,F)):((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:1,name:(0,r.unref)(u)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),(0,r.createCommentVNode)(` 文件信息 `),(0,r.createElementVNode)(`div`,I,[(0,r.createElementVNode)(`div`,L,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(n.name),1)]),_:2},1024)]),(0,r.createElementVNode)(`div`,R,[(0,r.createElementVNode)(`span`,z,(0,r.toDisplayString)((0,r.unref)(d)(n.size)),1),(0,r.createVNode)((0,r.unref)(i.NTag),{type:(0,r.unref)(c)[n.status]||`default`,size:`tiny`,bordered:!1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)((0,r.unref)(s)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,B,` ⚡ `)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 进度条 `),n.status===`uploading`||n.status===`hashing`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NProgress),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,V,` 分片 `+(0,r.toDisplayString)(n.chunkProgress.uploadedChunks)+`/`+(0,r.toDisplayString)(n.chunkProgress.totalChunks),1)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 错误信息 `),n.status===`error`&&n.error?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,H,(0,r.toDisplayString)(n.error),1)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 操作按钮 `),(0,r.createElementVNode)(`div`,U,[n.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>a(`retry`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>a(`remove`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}});var G=n.t(W,[[`__scopeId`,`data-v-04f26012`]]);const K={key:0,class:`image-preview`},q=[`src`,`alt`],J={class:`image-preview__overlay`},Y={key:0,class:`image-preview__progress`},X={class:`image-preview__actions`},Z={class:`image-preview__name`},Q=(0,r.defineComponent)({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=e,o=n,s=(0,r.computed)(()=>a.fileList.filter(e=>e.type?.startsWith(`image/`)));return(e,n)=>s.value.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,K,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(s.value,e=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:e.uid,class:(0,r.normalizeClass)([`image-preview__item`,`image-preview__item--${e.status}`])},[e.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:e.thumbUrl,alt:e.name,class:`image-preview__img`},null,8,q)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 遮罩层 `),(0,r.createElementVNode)(`div`,J,[(0,r.createCommentVNode)(` 上传中进度 `),e.status===`uploading`||e.status===`hashing`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,Y,[(0,r.createVNode)((0,r.unref)(i.NProgress),{type:`circle`,percentage:e.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):e.status===`success`||e.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[(0,r.createCommentVNode)(` 状态图标 `),(0,r.createVNode)(t.t,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 操作 `),(0,r.createElementVNode)(`div`,X,[e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:t=>o(`retry`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:t=>o(`remove`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),(0,r.createCommentVNode)(` 文件名 `),(0,r.createElementVNode)(`div`,Z,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(e.name),1)]),_:2},1024)])],2))),128))])):(0,r.createCommentVNode)(`v-if`,!0)}});var $=n.t(Q,[[`__scopeId`,`data-v-32d39ae9`]]);const ee={class:`c-upload`},te={key:0,class:`c-upload__total-progress`},ne={class:`c-upload__total-label`},re=(0,r.defineComponent)({__name:`index`,props:{action:{default:``},headers:{default:()=>({})},data:{default:()=>({})},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},accept:{default:``},maxSize:{default:0},maxCount:{default:0},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},chunked:{type:Boolean,default:!1},chunkSize:{default:o},concurrency:{default:3},showFileList:{type:Boolean,default:!0},listType:{default:`text`},showThumbnail:{type:Boolean,default:!0},customRequest:{},instantCheck:{},uploadedChunksQuery:{},mergeChunks:{},beforeUpload:{},tip:{default:``},defaultFileList:{default:()=>[]}},emits:[`change`,`success`,`error`,`progress`,`remove`,`finish`,`exceed`],setup(e,{expose:t,emit:n}){let a=e,o=n,s=(0,r.ref)(),{fileList:c,totalPercent:l,addFiles:u,removeFile:d,clearAll:f,startUpload:p,pauseAll:m,resumeAll:h,retryFile:g,processFile:_,getSuccessList:v}=b(a),y=(0,r.computed)(()=>c.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),x=e=>({...e}),S=()=>c.value.map(x);function C(e){let t=Math.max(0,Math.trunc(Number(a.maxCount)||0));if(t>0&&c.value.length+e.length>t){o(`exceed`,e,S());let n=t-c.value.length;if(n<=0)return;e=e.slice(0,n)}let n=u(e);o(`change`,S()),n.forEach(e=>void _(e))}function w(e){let t=c.value.find(t=>t.uid===e);t&&(o(`remove`,x(t)),d(e),o(`change`,S()))}function T(e){g(e)}let E=new Map,D=!1;return(0,r.watch)(c,e=>{let t=new Set(e.map(e=>e.uid));E.forEach((e,n)=>{t.has(n)||E.delete(n)}),e.forEach(e=>{let t=E.get(e.uid);t&&t.percent!==e.percent&&o(`progress`,x(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&o(`success`,x(e),e.response),t&&t.status!==`error`&&e.status===`error`&&o(`error`,x(e),Error(e.error||`上传失败`)),E.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(D||o(`finish`,S()),D=!0):D=!1,o(`change`,S())},{deep:!0}),t({selectFiles:()=>s.value?.triggerSelect(),startUpload:p,pauseAll:m,resumeAll:h,clearAll:()=>{f(),o(`change`,S())},removeFile:e=>{w(e)},retryFile:g,getFileList:S,getSuccessList:()=>v().map(x),get totalPercent(){return l.value}}),(e,t)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,ee,[(0,r.createCommentVNode)(` 上传区域 `),(0,r.createVNode)(N,{ref_key:`uploadAreaRef`,ref:s,accept:a.accept,multiple:a.multiple,directory:a.directory,disabled:a.disabled,draggable:a.draggable,pasteable:a.pasteable,tip:a.tip,onFiles:C},{default:(0,r.withCtx)(()=>[(0,r.renderSlot)(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),(0,r.createCommentVNode)(` 总进度条 `),y.value?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,te,[(0,r.createElementVNode)(`div`,ne,[t[0]||=(0,r.createElementVNode)(`span`,null,`总进度`,-1),(0,r.createElementVNode)(`span`,null,(0,r.toDisplayString)((0,r.unref)(l))+`%`,1)]),(0,r.createVNode)((0,r.unref)(i.NProgress),{percentage:(0,r.unref)(l),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 图片预览模式 `),a.listType===`image`?((0,r.openBlock)(),(0,r.createBlock)($,{key:1,"file-list":(0,r.unref)(c),onRemove:w,onRetry:T},null,8,[`file-list`])):a.showFileList&&(0,r.unref)(c).length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:2},[(0,r.createCommentVNode)(` 文件列表模式 `),(0,r.createVNode)(G,{"file-list":(0,r.unref)(c),"show-thumbnail":a.showThumbnail,onRemove:w,onRetry:T},null,8,[`file-list`,`show-thumbnail`])],2112)):(0,r.createCommentVNode)(`v-if`,!0)]))}});var ie=n.t(re,[[`__scopeId`,`data-v-58ca8e42`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ie}});
|
|
1
|
+
const e=require(`./chunk.cjs`),t=require(`./C_Icon2.cjs`),n=require(`./export-helper.cjs`);let r=require(`vue`),i=require(`naive-ui`),a=require(`spark-md5`);a=e.n(a);const o=2*1024*1024,s={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},c={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},l={"image/":`mdi:file-image-outline`,"video/":`mdi:file-video-outline`,"audio/":`mdi:file-music-outline`,"application/pdf":`mdi:file-pdf-box`,"application/zip":`mdi:folder-zip-outline`,"application/x-rar":`mdi:folder-zip-outline`,"application/vnd.ms-excel":`mdi:file-excel-outline`,"application/vnd.openxmlformats-officedocument.spreadsheetml":`mdi:file-excel-outline`,"application/msword":`mdi:file-word-outline`,"application/vnd.openxmlformats-officedocument.wordprocessingml":`mdi:file-word-outline`,"text/":`mdi:file-document-outline`,default:`mdi:file-outline`};function u(e){for(let[t,n]of Object.entries(l))if(t!==`default`&&e.startsWith(t))return n;return l.default}function d(e){if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`],n=Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**n).toFixed(n>0?1:0)} ${t[n]}`}function f(e){let t=[],n=new Set,i=0,a=!1,o=()=>{if(!a){a=!0;try{let n=Math.max(1,Math.trunc(e.value)||1);for(;i<n&&t.length;)t.shift()()}finally{a=!1}}};return(0,r.watch)(e,o),Object.assign((e,r)=>{let a=!1,s=!1,c,l=(e=!0)=>a?!1:(a=!0,n.delete(d),s&&--i,e&&o(),!0),u=()=>{if(!a){s=!0,i+=1;try{c=e({...r,onProgress:e=>{a||r.onProgress?.(e)},onSuccess:e=>{l()&&r.onSuccess?.(e)},onError:e=>{l()&&r.onError?.(e)}})}catch(e){l()&&r.onError?.(e instanceof Error?e:Error(String(e)))}}},d=()=>{let e=t.indexOf(u);if(e>=0&&t.splice(e,1),l(!1))try{c?.abort()}catch{}finally{o()}};return n.add(d),t.push(u),o(),{abort:d}},{abortAll(){let e=a;a=!0,t.length=0;try{for(let e of n)e()}finally{a=e}}})}const p=e=>new Promise((t,n)=>{let r,i,a=()=>{e?.removeEventListener(`abort`,o),r!==void 0&&cancelAnimationFrame(r),i!==void 0&&clearTimeout(i)},o=()=>{a(),n(e?.reason??new DOMException(`Hash cancelled`,`AbortError`))},s=()=>{a(),t()};if(e?.addEventListener(`abort`,o,{once:!0}),e?.aborted){o();return}typeof requestAnimationFrame==`function`?r=requestAnimationFrame(s):i=setTimeout(s,0)});function m(e){let t=(0,r.ref)(0),n=(0,r.ref)(0),i=(0,r.computed)(()=>t.value>0),o=Promise.resolve();async function s(e,t,n){let r=o,i;o=new Promise(e=>{i=e}),await r;try{return await c(e,t,n)}finally{i()}}async function c(r,i,o){o?.throwIfAborted(),t.value+=1,n.value=0,i?.(0);let s=new a.default.ArrayBuffer,c=Math.max(1,Math.trunc(Number(e.value)||1)),l=Math.max(1,Math.ceil(r.size/c));try{for(let e=0;e<l;e+=1){o?.throwIfAborted();let t=e*c,a=await r.slice(t,t+c).arrayBuffer();o?.throwIfAborted(),s.append(a),n.value=Math.round((e+1)/l*100),i?.(n.value),await p(o)}return o?.throwIfAborted(),s.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:i,hashProgress:(0,r.readonly)(n),calculateHash:s}}function h(e){let t=new Map,n=new Map;function r(t){let n=Math.max(1,Math.trunc(Number(e.chunkSize.value)||1)),r=[],i=0,a=0;for(;a<t.size;){let e=Math.min(a+n,t.size);r.push({index:i,blob:t.slice(a,e),size:e-a,uploaded:!1}),a=e,i++}return r}async function i(t,n){if(e.uploadedChunksQuery?.value)try{let r=await e.uploadedChunksQuery.value(t);for(let e of r){let t=n[e];t&&(t.uploaded=!0)}}catch{}}function a(t){return new Promise((n,r)=>{let i=!1,a=()=>{i||(i=!0,n())},o=e=>{i||(i=!0,t.setError(),r(e instanceof Error?e:Error(String(e))))},s={action:e.action.value,headers:e.headers.value,data:{...e.data.value,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,filename:t.file.name},file:t.chunk.blob,filename:t.file.name,hash:t.hash,chunkIndex:t.chunk.index,totalChunks:t.totalChunks,onProgress:()=>{},onSuccess:()=>{if(!i){if(t.isCancelled()){a();return}t.chunk.uploaded=!0,t.setUploadedBytes(t.chunk.size),t.onProgress({uploadedChunks:t.chunks.filter(e=>e.uploaded).length,totalChunks:t.totalChunks,uploadedBytes:t.chunks.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),totalBytes:t.totalBytes}),a()}},onError:o};try{let n=e.customRequest?.value??g,r=e.scheduler?e.scheduler(n,s):n(s);t.abortControllers.push(()=>{try{r.abort()}catch{}finally{a()}})}catch(e){o(e)}})}async function o(o){let{uid:c,file:l,hash:u,onProgress:d,onSuccess:f,onError:p,isPaused:m}=o,h=Symbol(c);n.set(c,h);let g=()=>n.get(c)!==h,_=()=>{g()||n.delete(c)},v=r(l),y=v.length,b=l.size,x=0;if(await i(u,v),g()||m()){_();return}x=v.filter(e=>e.uploaded).reduce((e,t)=>e+t.size,0),d({uploadedChunks:v.filter(e=>e.uploaded).length,totalChunks:y,uploadedBytes:x,totalBytes:b});let S=v.filter(e=>!e.uploaded);if(S.length===0){try{g()||await s(u,l.name,y,f,p,g)}finally{_()}return}let C=[];t.set(c,C);let w=Math.max(1,Math.trunc(Number(e.concurrency.value)||1)),T=0,E=!1;async function D(){for(;T<S.length&&!E&&!m()&&!g();){let e=S[T++];await a({chunk:e,hash:u,file:l,totalChunks:y,chunks:v,totalBytes:b,abortControllers:C,onProgress:e=>{g()||d(e)},setUploadedBytes:e=>{x+=e},setError:()=>{E=!0},isCancelled:g})}}let O=Array.from({length:Math.min(w,S.length)},()=>D());try{let e=(await Promise.allSettled(O)).find(e=>e.status===`rejected`);e&&!g()?p(e.reason instanceof Error?e.reason:Error(String(e.reason))):!E&&!m()&&!g()&&await s(u,l.name,y,f,p,g)}finally{g()||t.delete(c),_()}}async function s(t,n,r,i,a,o){if(e.mergeChunks?.value)try{let a=await e.mergeChunks.value(t,n,r);o()||i(a)}catch(e){o()||a(e instanceof Error?e:Error(`分片合并失败`))}else o()||i({message:`分片上传完成(未配置合并函数)`})}function c(e){n.delete(e),t.get(e)?.forEach(e=>e()),t.delete(e)}function l(){n.clear(),t.forEach(e=>{e.forEach(e=>e())}),t.clear()}return{createChunks:r,uploadChunks:o,abortUpload:c,abortAll:l}}function g(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),e.headers&&Object.entries(e.headers).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n;try{n=JSON.parse(t.responseText)}catch{n=t.responseText}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>{e.onError?.(Error(`网络错误`))}),t.addEventListener(`abort`,()=>{e.onError?.(new DOMException(`上传已取消`,`AbortError`))});let n=new FormData;return n.append(`file`,e.file,e.filename),e.data&&Object.entries(e.data).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function _(e){return e instanceof Error?e:Error(String(e))}function v(e){let t=[],n=(0,r.ref)(0),i=new Map,a=()=>{n.value=i.size},o=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function s(){for(;i.size<o()&&t.length>0;){let n=t.shift(),{file:r}=n;if(!r.raw||i.has(r.uid))continue;let o=!1,c=e=>{o||(o=!0,i.delete(r.uid),a(),e?.error?n.onError(r.uid,e.error):e&&`response`in e&&n.onSuccess(r.uid,e.response),s())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:r.raw,filename:r.name,onProgress:e=>n.onProgress(r.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};i.set(r.uid,{abort:()=>void 0,settle:c}),a();try{let t=e.customRequest?.value??y,n=e.scheduler?e.scheduler(t,l):t(l),a=i.get(r.uid);a&&(a.abort=n.abort)}catch(e){c({error:_(e)})}}}function c(e,n,r,i){l(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),s()}function l(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=i.get(e);if(n){n.settle();try{n.abort()}catch{}}}function u(){t.length=0;let e=[...i.values()];i.clear(),a(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return(0,r.watch)(e.concurrency,s),{activeCount:(0,r.readonly)(n),enqueue:c,abort:l,abortAll:u}}function y(e){let t=new XMLHttpRequest;t.open(`POST`,e.action),Object.entries(e.headers??{}).forEach(([e,n])=>{t.setRequestHeader(e,n)}),t.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e.onProgress?.(Math.round(t.loaded/t.total*100))}),t.addEventListener(`load`,()=>{if(t.status>=200&&t.status<300){let n=t.responseText;try{n=JSON.parse(t.responseText)}catch{}e.onSuccess?.(n)}else e.onError?.(Error(`上传失败: HTTP ${t.status}`))}),t.addEventListener(`error`,()=>e.onError?.(Error(`网络错误`)));let n=new FormData;return n.append(`file`,e.file,e.filename),Object.entries(e.data??{}).forEach(([e,t])=>{n.append(e,String(t))}),t.send(n),{abort:()=>t.abort()}}function b(e){let t=(0,r.computed)(()=>e.action??``),n=(0,r.computed)(()=>e.headers??{}),i=(0,r.computed)(()=>e.data??{}),a=(0,r.computed)(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:o}),s=(0,r.computed)(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),c=(0,r.computed)(()=>e.customRequest),l=(0,r.computed)(()=>e.instantCheck),u=(0,r.computed)(()=>e.uploadedChunksQuery),d=(0,r.computed)(()=>e.mergeChunks),p=(0,r.ref)((e.defaultFileList??[]).map(e=>({...e}))),g=(0,r.reactive)(new Set),_=new Map,y=new Set,{hashing:b,hashProgress:x,calculateHash:S}=m(a),C=f(s),w=new Map,T=e=>{w.get(e)?.abort(),w.delete(e)},E=()=>{w.forEach(e=>e.abort()),w.clear()},D=h({scheduler:C,chunkSize:a,concurrency:s,action:t,headers:n,data:i,customRequest:c,uploadedChunksQuery:u,mergeChunks:d}),O=v({scheduler:C,concurrency:s,action:t,headers:n,data:i,customRequest:c}),k=(0,r.computed)(()=>{let e=p.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function A(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function j(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return y.add(t),t}}function M(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&p.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:A(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:j(r)};n.push(t)}return p.value.push(...n),n}function N(e,t){let n=p.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function P(e){T(e),_.set(e,Symbol(e)),D.abortUpload(e),O.abort(e),g.delete(e);let t=p.value.findIndex(t=>t.uid===e);if(t!==-1){let e=p.value[t];L(e.thumbUrl),p.value.splice(t,1)}}function F(){C.abortAll(),E(),D.abortAll(),O.abortAll(),g.clear(),p.value.forEach(e=>{L(e.thumbUrl)}),p.value=[],_.clear()}async function I(t){if((e.maxSize??0)>0&&t.size>e.maxSize)return null;if(e.beforeUpload){let n=await e.beforeUpload(t);if(n===!1)return null;if(n instanceof File)return(e.maxSize??0)>0&&n.size>e.maxSize?null:n}return t}function L(e){!e||!y.has(e)||(URL.revokeObjectURL(e),y.delete(e))}function R(e,t){return _.get(e)===t&&!g.has(e)&&p.value.some(t=>t.uid===e)}async function z(e,t){T(e.uid);let n=new AbortController;w.set(e.uid,n);try{return await S(e.raw,n=>{R(e.uid,t)&&N(e.uid,{percent:n})},n.signal)}finally{w.get(e.uid)===n&&w.delete(e.uid)}}async function B(n){if(!n.raw)return;let r=Symbol(n.uid);_.set(n.uid,r),N(n.uid,{status:`validating`,error:void 0});let i;try{i=await I(n.raw)}catch(e){R(n.uid,r)&&N(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(R(n.uid,r)){if(!i){N(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(L(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:j(i)})),!c.value&&!t.value.trim()){N(n.uid,{status:`error`,error:`未配置上传地址`});return}if(l.value&&!n.hash){N(n.uid,{status:`hashing`});try{let e=await z(n,r);if(!R(n.uid,r))return;N(n.uid,{hash:e});let t=await l.value(e,n.raw.name);if(!R(n.uid,r))return;if(t.exists){N(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!R(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await V(n,r):H(n,r)}}async function V(e,t){let n=e.raw,{hash:r}=e;if(!r){N(e.uid,{status:`hashing`});try{if(r=await z(e,t),!R(e.uid,t))return;N(e.uid,{hash:r})}catch{R(e.uid,t)&&N(e.uid,{status:`error`,error:`Hash 计算失败`});return}}N(e.uid,{status:`uploading`,percent:0}),await D.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!R(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);N(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{R(e.uid,t)&&N(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{R(e.uid,t)&&N(e.uid,{status:`error`,error:n.message})},isPaused:()=>g.has(e.uid)})}function H(e,t){N(e.uid,{status:`uploading`,percent:0}),O.enqueue(e,(e,n)=>{R(e,t)&&N(e,{percent:n})},(e,n)=>{R(e,t)&&N(e,{status:`success`,percent:100,response:n})},(e,n)=>{R(e,t)&&N(e,{status:`error`,error:n.message})})}function U(){p.value.filter(e=>e.status===`pending`).forEach(e=>void B(e))}function W(){C.abortAll(),p.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(T(e.uid),g.add(e.uid),_.set(e.uid,Symbol(e.uid)),D.abortUpload(e.uid),O.abort(e.uid),N(e.uid,{status:`paused`}))})}function G(){p.value.forEach(e=>{e.status===`paused`&&(g.delete(e.uid),N(e.uid,{status:`pending`}))}),U()}function K(e){let t=p.value.find(t=>t.uid===e);t&&t.status===`error`&&(N(e,{status:`pending`,percent:0,error:void 0}),B(t))}function q(){return p.value.filter(e=>e.status===`success`||e.status===`instant`)}return(0,r.onBeforeUnmount)(()=>{C.abortAll(),E(),D.abortAll(),O.abortAll(),_.clear(),p.value.forEach(e=>{L(e.thumbUrl)})}),{fileList:p,totalPercent:k,hashing:b,hashProgress:x,addFiles:M,removeFile:P,clearAll:F,startUpload:U,pauseAll:W,resumeAll:G,retryFile:K,processFile:B,getSuccessList:q}}function x(e,t,n,i,a){let o=(0,r.ref)(!1),s=null,c=!1;function l(e){t.value&&(e.preventDefault(),o.value=!0)}function u(e){t.value&&(e.preventDefault(),o.value=!0)}function d(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(o.value=!1)}async function f(e){if(!t.value)return;e.preventDefault(),o.value=!1;let n=e.dataTransfer?.items;if(!n)return;let r=await S(n,e.dataTransfer);if(c||!t.value)return;let s=w(r,i.value);s.length>0&&a(s)}function p(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let r=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&r.push(e)}}let o=w(r,i.value);o.length>0&&(e.preventDefault(),a(o))}function m(){let t=e.value;!t||s===t||(s=t,t.addEventListener(`dragenter`,l),t.addEventListener(`dragover`,u),t.addEventListener(`dragleave`,d),t.addEventListener(`drop`,f),n.value&&t.addEventListener(`paste`,p))}function h(){let e=s;e&&(e.removeEventListener(`dragenter`,l),e.removeEventListener(`dragover`,u),e.removeEventListener(`dragleave`,d),e.removeEventListener(`drop`,f)),e?.removeEventListener(`paste`,p),s=null}return(0,r.onMounted)(()=>{c=!1,m()}),(0,r.onBeforeUnmount)(()=>{c=!0,h()}),(0,r.watch)([e,t,n],()=>{h(),m()}),{isDragOver:(0,r.readonly)(o)}}async function S(e,t){let n=[];for(let t=0;t<e.length;t++){let r=e[t].webkitGetAsEntry?.();r&&n.push(r)}if(n.length>0)return(await Promise.all(n.map(C))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function C(e){if(e.isFile)return new Promise(t=>{e.file(e=>t([e]),()=>t([]))});if(e.isDirectory){let t=e.createReader(),n=[];for(;;){let e=await new Promise(e=>{t.readEntries(t=>e(t),()=>e([]))});if(e.length===0)break;n.push(...e)}return(await Promise.all(n.map(C))).flat()}return[]}function w(e,t){if(!t)return e;let n=t.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);return n.length===0?e:e.filter(e=>n.some(t=>{if(t.startsWith(`.`))return e.name.toLowerCase().endsWith(t);if(t.endsWith(`/*`)){let n=t.replace(`/*`,``);return e.type.toLowerCase().startsWith(`${n}/`)}return e.type.toLowerCase()===t}))}const T=[`tabindex`,`aria-disabled`,`onKeydown`],E=[`accept`,`multiple`,`webkitdirectory`,`disabled`],D={class:`upload-area__default`},O={class:`upload-area__text`},k={key:0},A={key:1},j={key:0,class:`upload-area__tip`},M=(0,r.defineComponent)({__name:`UploadArea`,props:{accept:{default:``},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},tip:{default:``}},emits:[`files`],setup(e,{expose:n,emit:i}){let a=e,o=i,s=(0,r.ref)(),c=(0,r.ref)(),{isDragOver:l}=x(s,(0,r.computed)(()=>a.draggable&&!a.disabled),(0,r.computed)(()=>a.pasteable&&!a.disabled),(0,r.computed)(()=>a.accept),e=>o(`files`,e));function u(){a.disabled||c.value?.click()}function d(e){let t=e.target,n=a.disabled?[]:w(Array.from(t.files??[]),a.accept);n.length>0&&o(`files`,n),t.value=``}return n({triggerSelect:u}),(n,i)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{ref_key:`areaRef`,ref:s,class:(0,r.normalizeClass)([`upload-area`,{"upload-area--drag-over":(0,r.unref)(l),"upload-area--disabled":e.disabled}]),role:`button`,tabindex:e.disabled?-1:0,"aria-disabled":e.disabled,onClick:u,onKeydown:[(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`enter`]),(0,r.withKeys)((0,r.withModifiers)(u,[`prevent`]),[`space`])]},[(0,r.createElementVNode)(`input`,{ref_key:`inputRef`,ref:c,type:`file`,class:`upload-area__input`,accept:e.accept,multiple:e.multiple,webkitdirectory:e.directory||void 0,disabled:e.disabled,onClick:i[0]||=(0,r.withModifiers)(()=>{},[`stop`]),onChange:d},null,40,E),(0,r.renderSlot)(n.$slots,`default`,{},()=>[(0,r.createElementVNode)(`div`,D,[(0,r.createVNode)(t.t,{name:(0,r.unref)(l)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),(0,r.createElementVNode)(`div`,O,[(0,r.unref)(l)?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,k,`释放文件到此处`)):((0,r.openBlock)(),(0,r.createElementBlock)(`span`,A,[i[4]||=(0,r.createTextVNode)(` 点击或拖拽文件到此区域上传 `,-1),e.pasteable?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:0},[i[1]||=(0,r.createTextVNode)(` ,支持 `,-1),i[2]||=(0,r.createElementVNode)(`kbd`,null,`Ctrl+V`,-1),i[3]||=(0,r.createTextVNode)(` 粘贴 `,-1)],64)):(0,r.createCommentVNode)(`v-if`,!0)]))]),e.tip?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,j,(0,r.toDisplayString)(e.tip),1)):(0,r.createCommentVNode)(`v-if`,!0)])],!0)],42,T))}});var N=n.t(M,[[`__scopeId`,`data-v-705892ab`]]);const P={class:`file-list__thumb`},F=[`src`,`alt`],I={class:`file-list__info`},L={class:`file-list__name`},R={class:`file-list__meta`},z={class:`file-list__size`},B={key:0,class:`file-list__instant`},V={key:1,class:`file-list__chunk-info`},H={key:2,class:`file-list__error`},U={class:`file-list__actions`},W=(0,r.defineComponent)({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=n;return(n,o)=>((0,r.openBlock)(),(0,r.createBlock)(r.TransitionGroup,{name:`file-list`,tag:`div`,class:`file-list`},{default:(0,r.withCtx)(()=>[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(e.fileList,n=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:n.uid,class:(0,r.normalizeClass)([`file-list__item`,`file-list__item--${n.status}`])},[(0,r.createCommentVNode)(` 缩略图 / 图标 `),(0,r.createElementVNode)(`div`,P,[e.showThumbnail&&n.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,F)):((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:1,name:(0,r.unref)(u)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),(0,r.createCommentVNode)(` 文件信息 `),(0,r.createElementVNode)(`div`,I,[(0,r.createElementVNode)(`div`,L,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(n.name),1)]),_:2},1024)]),(0,r.createElementVNode)(`div`,R,[(0,r.createElementVNode)(`span`,z,(0,r.toDisplayString)((0,r.unref)(d)(n.size)),1),(0,r.createVNode)((0,r.unref)(i.NTag),{type:(0,r.unref)(c)[n.status]||`default`,size:`tiny`,bordered:!1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)((0,r.unref)(s)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(`span`,B,` ⚡ `)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 进度条 `),n.status===`uploading`||n.status===`hashing`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NProgress),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,V,` 分片 `+(0,r.toDisplayString)(n.chunkProgress.uploadedChunks)+`/`+(0,r.toDisplayString)(n.chunkProgress.totalChunks),1)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 错误信息 `),n.status===`error`&&n.error?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,H,(0,r.toDisplayString)(n.error),1)):(0,r.createCommentVNode)(`v-if`,!0)]),(0,r.createCommentVNode)(` 操作按钮 `),(0,r.createElementVNode)(`div`,U,[n.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>a(`retry`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>a(`remove`,n.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}});var G=n.t(W,[[`__scopeId`,`data-v-04f26012`]]);const K={key:0,class:`image-preview`},q=[`src`,`alt`],J={class:`image-preview__overlay`},Y={key:0,class:`image-preview__progress`},X={class:`image-preview__actions`},Z={class:`image-preview__name`},Q=(0,r.defineComponent)({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(e,{emit:n}){let a=e,o=n,s=(0,r.computed)(()=>a.fileList.filter(e=>e.type?.startsWith(`image/`)));return(e,n)=>s.value.length>0?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,K,[((0,r.openBlock)(!0),(0,r.createElementBlock)(r.Fragment,null,(0,r.renderList)(s.value,e=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,{key:e.uid,class:(0,r.normalizeClass)([`image-preview__item`,`image-preview__item--${e.status}`])},[e.thumbUrl?((0,r.openBlock)(),(0,r.createElementBlock)(`img`,{key:0,src:e.thumbUrl,alt:e.name,class:`image-preview__img`},null,8,q)):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 遮罩层 `),(0,r.createElementVNode)(`div`,J,[(0,r.createCommentVNode)(` 上传中进度 `),e.status===`uploading`||e.status===`hashing`?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,Y,[(0,r.createVNode)((0,r.unref)(i.NProgress),{type:`circle`,percentage:e.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):e.status===`success`||e.status===`instant`?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:1},[(0,r.createCommentVNode)(` 状态图标 `),(0,r.createVNode)(t.t,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)(t.t,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 操作 `),(0,r.createElementVNode)(`div`,X,[e.status===`error`?((0,r.openBlock)(),(0,r.createBlock)((0,r.unref)(i.NButton),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:t=>o(`retry`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createVNode)((0,r.unref)(i.NButton),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:t=>o(`remove`,e.uid)},{icon:(0,r.withCtx)(()=>[(0,r.createVNode)(t.t,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),(0,r.createCommentVNode)(` 文件名 `),(0,r.createElementVNode)(`div`,Z,[(0,r.createVNode)((0,r.unref)(i.NEllipsis),{"line-clamp":1},{default:(0,r.withCtx)(()=>[(0,r.createTextVNode)((0,r.toDisplayString)(e.name),1)]),_:2},1024)])],2))),128))])):(0,r.createCommentVNode)(`v-if`,!0)}});var $=n.t(Q,[[`__scopeId`,`data-v-32d39ae9`]]);const ee={class:`c-upload`},te={key:0,class:`c-upload__total-progress`},ne={class:`c-upload__total-label`},re=(0,r.defineComponent)({__name:`index`,props:{action:{default:``},headers:{default:()=>({})},data:{default:()=>({})},multiple:{type:Boolean,default:!1},directory:{type:Boolean,default:!1},accept:{default:``},maxSize:{default:0},maxCount:{default:0},disabled:{type:Boolean,default:!1},draggable:{type:Boolean,default:!0},pasteable:{type:Boolean,default:!1},chunked:{type:Boolean,default:!1},chunkSize:{default:o},concurrency:{default:3},showFileList:{type:Boolean,default:!0},listType:{default:`text`},showThumbnail:{type:Boolean,default:!0},customRequest:{},instantCheck:{},uploadedChunksQuery:{},mergeChunks:{},beforeUpload:{},tip:{default:``},defaultFileList:{default:()=>[]}},emits:[`change`,`success`,`error`,`progress`,`remove`,`finish`,`exceed`],setup(e,{expose:t,emit:n}){let a=e,o=n,s=(0,r.ref)(),{fileList:c,totalPercent:l,addFiles:u,removeFile:d,clearAll:f,startUpload:p,pauseAll:m,resumeAll:h,retryFile:g,processFile:_,getSuccessList:v}=b(a),y=(0,r.computed)(()=>c.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),x=e=>({...e}),S=()=>c.value.map(x);function C(e){let t=Math.max(0,Math.trunc(Number(a.maxCount)||0));if(t>0&&c.value.length+e.length>t){o(`exceed`,e,S());let n=t-c.value.length;if(n<=0)return;e=e.slice(0,n)}let n=u(e);o(`change`,S()),n.forEach(e=>void _(e))}function w(e){let t=c.value.find(t=>t.uid===e);t&&(o(`remove`,x(t)),d(e),o(`change`,S()))}function T(e){g(e)}let E=new Map,D=!1;return(0,r.watch)(c,e=>{let t=new Set(e.map(e=>e.uid));E.forEach((e,n)=>{t.has(n)||E.delete(n)}),e.forEach(e=>{let t=E.get(e.uid);t&&t.percent!==e.percent&&o(`progress`,x(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&o(`success`,x(e),e.response),t&&t.status!==`error`&&e.status===`error`&&o(`error`,x(e),Error(e.error||`上传失败`)),E.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(D||o(`finish`,S()),D=!0):D=!1,o(`change`,S())},{deep:!0}),t({selectFiles:()=>s.value?.triggerSelect(),startUpload:p,pauseAll:m,resumeAll:h,clearAll:()=>{f(),o(`change`,S())},removeFile:e=>{w(e)},retryFile:g,getFileList:S,getSuccessList:()=>v().map(x),get totalPercent(){return l.value}}),(e,t)=>((0,r.openBlock)(),(0,r.createElementBlock)(`div`,ee,[(0,r.createCommentVNode)(` 上传区域 `),(0,r.createVNode)(N,{ref_key:`uploadAreaRef`,ref:s,accept:a.accept,multiple:a.multiple,directory:a.directory,disabled:a.disabled,draggable:a.draggable,pasteable:a.pasteable,tip:a.tip,onFiles:C},{default:(0,r.withCtx)(()=>[(0,r.renderSlot)(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),(0,r.createCommentVNode)(` 总进度条 `),y.value?((0,r.openBlock)(),(0,r.createElementBlock)(`div`,te,[(0,r.createElementVNode)(`div`,ne,[t[0]||=(0,r.createElementVNode)(`span`,null,`总进度`,-1),(0,r.createElementVNode)(`span`,null,(0,r.toDisplayString)((0,r.unref)(l))+`%`,1)]),(0,r.createVNode)((0,r.unref)(i.NProgress),{percentage:(0,r.unref)(l),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):(0,r.createCommentVNode)(`v-if`,!0),(0,r.createCommentVNode)(` 图片预览模式 `),a.listType===`image`?((0,r.openBlock)(),(0,r.createBlock)($,{key:1,"file-list":(0,r.unref)(c),onRemove:w,onRetry:T},null,8,[`file-list`])):a.showFileList&&(0,r.unref)(c).length>0?((0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,{key:2},[(0,r.createCommentVNode)(` 文件列表模式 `),(0,r.createVNode)(G,{"file-list":(0,r.unref)(c),"show-thumbnail":a.showThumbnail,onRemove:w,onRetry:T},null,8,[`file-list`,`show-thumbnail`])],2112)):(0,r.createCommentVNode)(`v-if`,!0)]))}});var ie=n.t(re,[[`__scopeId`,`data-v-58ca8e42`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ie}});
|
package/dist/C_WaterFall.css
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
:root{--c-primary: var(--primary-color, #2080f0);--c-primary-hover: var(--primary-color-hover, #4098fc);--c-primary-pressed: var(--primary-color-pressed, #1060c9);--c-success: var(--success-color, #18a058);--c-warning: var(--warning-color, #f0a020);--c-error: var(--error-color, #d03050);--c-info: var(--info-color, #2080f0);--c-bg-body: var(--body-color, #ffffff);--c-bg-card: var(--card-color, #ffffff);--c-bg-surface: var(--popover-color, #ffffff);--c-text-1: var(--text-color-1, #262626);--c-text-2: var(--text-color-2, #525252);--c-text-3: var(--text-color-3, #a3a3a3);--c-text-4: var(--text-color-4, #c0c0c0);--c-border: var(--border-color, #e5e7eb);--c-radius-sm: var(--border-radius-small, 4px);--c-radius: var(--border-radius, 6px);--c-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);--c-transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);--c-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);--c-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);--c-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1)}
|
|
2
2
|
|
|
3
|
-
.c-waterfall[data-v-
|
|
3
|
+
.c-waterfall[data-v-f6a44501] {
|
|
4
4
|
width: 100%;
|
|
5
5
|
}
|
|
6
|
-
.waterfall__body[data-v-
|
|
6
|
+
.waterfall__body[data-v-f6a44501] {
|
|
7
7
|
overflow: hidden;
|
|
8
8
|
}
|
|
9
|
-
.waterfall__item[data-v-
|
|
9
|
+
.waterfall__item[data-v-f6a44501] {
|
|
10
10
|
cursor: pointer;
|
|
11
11
|
}
|
|
12
|
-
.waterfall__item[data-v-
|
|
12
|
+
.waterfall__item[data-v-f6a44501]:focus-visible {
|
|
13
13
|
outline: 2px solid var(--primary-color, #2080f0);
|
|
14
14
|
outline-offset: 2px;
|
|
15
15
|
}
|
|
16
|
-
.waterfall__card[data-v-
|
|
16
|
+
.waterfall__card[data-v-f6a44501] {
|
|
17
17
|
overflow: hidden;
|
|
18
18
|
border-radius: 8px;
|
|
19
19
|
border: 1px solid var(--border-color);
|
|
@@ -21,36 +21,36 @@
|
|
|
21
21
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
|
|
22
22
|
transition: box-shadow 0.2s ease, transform 0.2s ease;
|
|
23
23
|
}
|
|
24
|
-
.waterfall__card[data-v-
|
|
24
|
+
.waterfall__card[data-v-f6a44501]:hover {
|
|
25
25
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
|
|
26
26
|
transform: translateY(-2px);
|
|
27
27
|
}
|
|
28
|
-
.waterfall__image[data-v-
|
|
28
|
+
.waterfall__image[data-v-f6a44501] {
|
|
29
29
|
display: block;
|
|
30
30
|
width: 100%;
|
|
31
31
|
object-fit: cover;
|
|
32
32
|
background: var(--body-color);
|
|
33
33
|
}
|
|
34
|
-
.waterfall__title[data-v-
|
|
34
|
+
.waterfall__title[data-v-f6a44501] {
|
|
35
35
|
padding: 10px 12px;
|
|
36
36
|
font-size: 13px;
|
|
37
37
|
line-height: 1.5;
|
|
38
38
|
color: var(--text-color-1);
|
|
39
39
|
word-break: break-all;
|
|
40
40
|
}
|
|
41
|
-
.waterfall__skeleton[data-v-
|
|
41
|
+
.waterfall__skeleton[data-v-f6a44501] {
|
|
42
42
|
overflow: hidden;
|
|
43
43
|
border-radius: 8px;
|
|
44
44
|
}
|
|
45
|
-
.waterfall__skeleton-inner[data-v-
|
|
45
|
+
.waterfall__skeleton-inner[data-v-f6a44501] {
|
|
46
46
|
width: 100%;
|
|
47
47
|
height: 100%;
|
|
48
48
|
border-radius: 8px;
|
|
49
49
|
background: linear-gradient(90deg, var(--body-color) 25%, color-mix(in srgb, var(--body-color) 80%, var(--border-color)) 37%, var(--body-color) 63%);
|
|
50
50
|
background-size: 400% 100%;
|
|
51
|
-
animation: shimmer-
|
|
51
|
+
animation: shimmer-f6a44501 1.4s ease infinite;
|
|
52
52
|
}
|
|
53
|
-
@keyframes shimmer-
|
|
53
|
+
@keyframes shimmer-f6a44501 {
|
|
54
54
|
0% {
|
|
55
55
|
background-position: 100% 50%;
|
|
56
56
|
}
|
|
@@ -58,37 +58,55 @@
|
|
|
58
58
|
background-position: 0 50%;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
.waterfall__footer[data-v-
|
|
61
|
+
.waterfall__footer[data-v-f6a44501] {
|
|
62
62
|
padding: 24px 0;
|
|
63
63
|
text-align: center;
|
|
64
64
|
}
|
|
65
|
-
.waterfall__sentinel[data-v-
|
|
65
|
+
.waterfall__sentinel[data-v-f6a44501] {
|
|
66
66
|
height: 1px;
|
|
67
67
|
}
|
|
68
|
-
.waterfall__status[data-v-
|
|
68
|
+
.waterfall__status[data-v-f6a44501] {
|
|
69
69
|
display: inline-flex;
|
|
70
70
|
gap: 8px;
|
|
71
71
|
align-items: center;
|
|
72
72
|
font-size: 13px;
|
|
73
73
|
color: var(--text-color-3);
|
|
74
74
|
}
|
|
75
|
-
.waterfall__status--done[data-v-
|
|
75
|
+
.waterfall__status--done[data-v-f6a44501] {
|
|
76
76
|
color: var(--text-color-4);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
/* layer: shortcuts */
|
|
80
|
+
.container[data-v-f6a44501]{width:100%;}
|
|
81
|
+
@media (min-width: 640px){
|
|
82
|
+
.container[data-v-f6a44501]{max-width:640px;}
|
|
83
|
+
}
|
|
84
|
+
@media (min-width: 768px){
|
|
85
|
+
.container[data-v-f6a44501]{max-width:768px;}
|
|
86
|
+
}
|
|
87
|
+
@media (min-width: 1024px){
|
|
88
|
+
.container[data-v-f6a44501]{max-width:1024px;}
|
|
89
|
+
}
|
|
90
|
+
@media (min-width: 1280px){
|
|
91
|
+
.container[data-v-f6a44501]{max-width:1280px;}
|
|
92
|
+
}
|
|
93
|
+
@media (min-width: 1536px){
|
|
94
|
+
.container[data-v-f6a44501]{max-width:1536px;}
|
|
95
|
+
}
|
|
79
96
|
/* layer: default */
|
|
80
|
-
.\!visible[data-v-
|
|
81
|
-
.visible[data-v-
|
|
82
|
-
.absolute[data-v-
|
|
83
|
-
.relative[data-v-
|
|
84
|
-
.ms[data-v-
|
|
85
|
-
.block[data-v-
|
|
86
|
-
.hidden[data-v-
|
|
87
|
-
.inline-flex[data-v-
|
|
88
|
-
.transform[data-v-
|
|
89
|
-
.
|
|
90
|
-
.
|
|
91
|
-
.
|
|
92
|
-
.
|
|
93
|
-
.
|
|
94
|
-
.
|
|
97
|
+
.\!visible[data-v-f6a44501]{visibility:visible !important;}
|
|
98
|
+
.visible[data-v-f6a44501]{visibility:visible;}
|
|
99
|
+
.absolute[data-v-f6a44501]{position:absolute;}
|
|
100
|
+
.relative[data-v-f6a44501]{position:relative;}
|
|
101
|
+
.ms[data-v-f6a44501]{margin-inline-start:1rem;}
|
|
102
|
+
.block[data-v-f6a44501]{display:block;}
|
|
103
|
+
.hidden[data-v-f6a44501]{display:none;}
|
|
104
|
+
.inline-flex[data-v-f6a44501]{display:inline-flex;}
|
|
105
|
+
.transform[data-v-f6a44501]{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
|
|
106
|
+
.resize[data-v-f6a44501]{resize:both;}
|
|
107
|
+
.break-all[data-v-f6a44501]{word-break:break-all;}
|
|
108
|
+
.border[data-v-f6a44501]{border-width:1px;}
|
|
109
|
+
.px[data-v-f6a44501]{padding-left:1rem;padding-right:1rem;}
|
|
110
|
+
.outline[data-v-f6a44501]{outline-style:solid;}
|
|
111
|
+
.transition[data-v-f6a44501]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
|
|
112
|
+
.ease[data-v-f6a44501]{transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);}
|
package/dist/C_WaterFall2.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{minWidth:1600,columns:6},{minWidth:1200,columns:5},{minWidth:992,columns:4},{minWidth:768,columns:3},{minWidth:480,columns:2},{minWidth:0,columns:1}],i=[180,360];function a(e,n,i){let a=(0,t.ref)(4),o=(0,t.ref)(0);function s(e){if(n?.value&&n.value>0)return n.value;let t=[...i?.value?.length?i.value:r].sort((e,t)=>t.minWidth-e.minWidth);for(let n of t)if(e>=n.minWidth)return n.columns;return 1}let c=null;function l(){let t=e.value;if(!t)return;c=new ResizeObserver(e=>{for(let t of e){let{width:e}=t.contentRect;o.value=e,a.value=s(e)}}),c.observe(t);let n=t.getBoundingClientRect();o.value=n.width,a.value=s(n.width)}function u(){c?.disconnect(),c=null}return(0,t.onMounted)(l),(0,t.onBeforeUnmount)(u),(0,t.watch)(e,()=>{u(),l()}),(0,t.watch)([()=>n?.value,()=>i?.value],()=>{o.value>0&&(a.value=s(o.value))}),{columns:(0,t.readonly)(a),containerWidth:(0,t.readonly)(o)}}function o(e,n,r,i,a={}){let o=(0,t.ref)([]),s=(0,t.ref)(0),c=new Map,l=new Map,u=(0,t.computed)(()=>new Map(e.value.map(e=>[e.id,e.src]))),d,f=!1,p=()=>{d!==void 0&&cancelAnimationFrame(d),d=void 0};(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>{f=!0,p(),l.clear(),c.clear()});let m=()=>{if(!f){if(!a.batchImageLoads||typeof requestAnimationFrame>`u`){C();return}d===void 0&&(d=requestAnimationFrame(()=>{d=void 0,C()}))}};function h(e,t,n){let r=e/t;return Number.isFinite(r)&&r>0?r*n:n}function g(e,t){let n=l.get(e.id),r=n?.src&&n.src!==e.src?void 0:n;return r&&!r.basisWidth?r.height:r?.basisWidth?h(r.height,r.basisWidth,t):h(e.height,e.width,t)}function _(){o.value=[],s.value=0,e.value.length===0&&(l.clear(),c.clear())}function v(t,n,r){return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)&&n>0&&e.value.length>0}function y(e,t,n,r){if(f||r!==void 0&&u.value.get(e)!==r||!b(t,n))return;let i=l.get(e);i?.height===t&&i.basisWidth===n&&i.src===r||(l.set(e,{height:t,basisWidth:n,src:r}),m())}function b(e,t){return Number.isFinite(e)&&e>0&&(t===void 0||Number.isFinite(t)&&t>0)}function x(e,t){f||!u.value.has(e)||!Number.isFinite(t)||Math.abs((c.get(e)??0)-t)<.5||(c.set(e,t),m())}function S(e){for(let t of[l,c])for(let n of t.keys())e.has(n)||t.delete(n)}function C(){if(p(),f)return;let t=Math.min(24,Math.max(1,Math.floor(n.value))),a=r.value,l=Math.max(0,i.value??16);if(!v(t,a,l)){_();return}let u=(a-(t-1)*l)/t;if(u<=0){_();return}let d=Array.from({length:t},(e,t)=>({index:t,height:0})),m=[],h=new Set;for(let t of e.value){h.add(t.id);let e=d.reduce((e,t)=>t.height<e.height?t:e),n=g(t,u),r=e.index*(u+l),i=e.height;m.push({item:t,columnIndex:e.index,x:r,y:i,width:u,height:n}),e.height=i+n+(c.get(t.id)??0)+l}S(h),o.value=m,s.value=Math.max(...d.map(e=>e.height))-l}return(0,t.watch)([e,()=>e.value.length,n,r,i],C,{immediate:!0}),{layoutItems:(0,t.readonly)(o),containerHeight:(0,t.readonly)(s),cacheImageHeight:y,cacheItemExtraHeight:x,relayout:C}}function s(e,n,r,i,a){let o=(0,t.ref)(`idle`),s=(0,t.ref)(!1),c=null,l=!1,u=!1,d=0,f=!1,p=0;function m(){f||!u||!n.value||r.value||i.value||l||d>=5||(l=!0,d+=1,s.value=d>=5,o.value=`loading`,a())}function h(){let t=e.value;if(!t||!n.value||typeof IntersectionObserver>`u`)return;let r=++p;c=new IntersectionObserver(e=>{if(!(f||r!==p)){if(u=!!e[0]?.isIntersecting,!u){l=!1,d=0,s.value=!1;return}m()}},{rootMargin:`200px 0px`}),c.observe(t)}function g(){p+=1,c?.disconnect(),c=null,l=!1,u=!1,d=0,s.value=!1}return(0,t.watch)([r,i],([e,n],[r])=>{o.value=n?`no-more`:e?`loading`:`idle`,!e&&!n&&(l=!1,r&&(0,t.nextTick)(m))}),(0,t.onMounted)(h),(0,t.onBeforeUnmount)(()=>{f=!0,g()}),(0,t.watch)([e,n],()=>{g(),h()}),{status:(0,t.readonly)(o),paused:(0,t.readonly)(s),resume:()=>{r.value||i.value||f||(d=0,l=!1,s.value=!1,m())}}}const c=[`aria-label`,`onClick`,`onKeydown`],l={class:`waterfall__card`},u=[`src`,`alt`,`loading`,`onLoad`,`onError`],d={key:0,class:`waterfall__title`},f={key:0,class:`waterfall__footer`},p={key:0,class:`waterfall__status`},m={key:1,class:`waterfall__status waterfall__status--done`},h=(0,t.defineComponent)({name:`C_WaterFall`,__name:`index`,props:{items:{},columns:{default:void 0},gap:{default:16},lazy:{type:Boolean,default:!0},infinite:{type:Boolean,default:!1},skeleton:{type:Boolean,default:!0},skeletonCount:{default:8},animationDuration:{default:300},breakpoints:{default:void 0},loading:{type:Boolean,default:!1},noMore:{type:Boolean,default:!1}},emits:[`load-more`,`item-click`,`image-loaded`,`image-error`],setup(e,{expose:r,emit:h}){let g=e,_=h,v=(0,t.ref)(),y=(0,t.ref)(),{columns:b,containerWidth:x}=a(v,(0,t.computed)(()=>g.columns),(0,t.computed)(()=>g.breakpoints)),{layoutItems:S,containerHeight:C,cacheImageHeight:w,cacheItemExtraHeight:T,relayout:E}=o((0,t.computed)(()=>g.items),b,x,(0,t.computed)(()=>g.gap),{batchImageLoads:!0}),D=new Map,O=new Map,k=(0,t.computed)(()=>new Map(S.value.map(e=>[e.item.id,e]))),A=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{for(let t of e){let e=D.get(t.target),n=e===void 0?void 0:k.value.get(e);n&&T(n.item.id,t.target.getBoundingClientRect().height-n.height)}});function j(e,t){let n=O.get(t);n!==e&&(n&&(A?.unobserve(n),D.delete(n),O.delete(t)),e instanceof HTMLElement&&(O.set(t,e),D.set(e,t),A?.observe(e)))}(0,t.onUnmounted)(()=>{A?.disconnect(),D.clear(),O.clear()});let M=(0,t.computed)(()=>g.skeleton&&g.loading&&S.value.length===0),N=(0,t.computed)(()=>{let e=Math.min(24,Math.max(1,Math.floor(b.value))),t=x.value,n=Math.max(0,g.gap);if(!Number.isFinite(e)||t<=0)return[];let r=(t-(e-1)*n)/e;if(r<=0)return[];let a=Math.min(100,Math.max(0,Math.floor(g.skeletonCount??8))),o=Array(e).fill(0),s=[];for(let e=0;e<a;e++){let t=o.indexOf(Math.min(...o)),a=i[0]+e*73%(i[1]-i[0]);s.push({x:t*(r+n),y:o[t],width:r,height:a}),o[t]+=a+n}return s}),P=(0,t.computed)(()=>N.value.length===0?0:Math.max(...N.value.map(e=>e.y+e.height))),F=(0,t.computed)(()=>M.value?P.value:C.value),{status:I,paused:L,resume:R}=s(y,(0,t.computed)(()=>g.infinite),(0,t.computed)(()=>g.loading),(0,t.computed)(()=>g.noMore),()=>_(`load-more`));function z(e,t){let n=t.target;if(n.getAttribute(`src`)===e.item.src){if(n.naturalHeight&&n.naturalWidth){let t=n.naturalHeight/n.naturalWidth*e.width;w(e.item.id,t,e.width,e.item.src)}_(`image-loaded`,e.item)}}function B(e){_(`image-error`,e.item)}function V(){v.value?.scrollIntoView({behavior:`smooth`,block:`start`})}return r({relayout:E,scrollToTop:V,getColumns:()=>b.value,getContainerHeight:()=>C.value}),(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`containerRef`,ref:v,class:`c-waterfall`},[(0,t.createElementVNode)(`div`,{class:`waterfall__body`,style:(0,t.normalizeStyle)({height:`${F.value}px`,position:`relative`})},[M.value?((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,{key:0},(0,t.renderList)(N.value,(n,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:`sk-${i}`,class:`waterfall__skeleton`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,height:`${n.height}px`,transition:`all ${g.animationDuration??(0,t.unref)(300)}ms ease`})},[(0,t.renderSlot)(e.$slots,`skeleton`,{},()=>[r[0]||=(0,t.createElementVNode)(`div`,{class:`waterfall__skeleton-inner`},null,-1)],!0)],4))),128)):(0,t.createCommentVNode)(`v-if`,!0),((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(S),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n.item.id,ref_for:!0,ref:e=>j(e,n.item.id),class:`waterfall__item`,role:`button`,tabindex:`0`,"aria-label":n.item.title||`瀑布流项目 ${r+1}`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,transition:`all ${g.animationDuration??(0,t.unref)(300)}ms ease`}),onClick:e=>_(`item-click`,n.item,r),onKeydown:[(0,t.withKeys)(e=>_(`item-click`,n.item,r),[`enter`]),(0,t.withKeys)((0,t.withModifiers)(e=>_(`item-click`,n.item,r),[`prevent`]),[`space`])]},[(0,t.renderSlot)(e.$slots,`item`,{item:n.item,index:r,width:n.width,height:n.height},()=>[(0,t.createElementVNode)(`div`,l,[(0,t.createElementVNode)(`img`,{src:n.item.src,alt:n.item.title||``,loading:g.lazy?`lazy`:`eager`,class:`waterfall__image`,style:(0,t.normalizeStyle)({height:`${n.height}px`}),onLoad:e=>z(n,e),onError:e=>B(n)},null,44,u),n.item.title?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,d,(0,t.toDisplayString)(n.item.title),1)):(0,t.createCommentVNode)(`v-if`,!0)])],!0)],44,c))),128))],4),g.infinite?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,f,[(0,t.createElementVNode)(`div`,{ref_key:`sentinelRef`,ref:y,class:`waterfall__sentinel`},null,512),(0,t.renderSlot)(e.$slots,`footer`,{status:(0,t.unref)(I),paused:(0,t.unref)(L),loadMore:(0,t.unref)(R)},()=>[g.loading?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,p,[(0,t.createVNode)((0,t.unref)(n.NSpin),{size:`small`}),r[1]||=(0,t.createElementVNode)(`span`,null,`加载中…`,-1)])):g.noMore?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,m,` 没有更多了 `)):(0,t.unref)(L)?((0,t.openBlock)(),(0,t.createBlock)((0,t.unref)(n.NButton),{key:2,size:`small`,onClick:(0,t.unref)(R)},{default:(0,t.withCtx)(()=>[...r[2]||=[(0,t.createTextVNode)(`继续加载`,-1)]]),_:1},8,[`onClick`])):(0,t.createCommentVNode)(`v-if`,!0)],!0)])):(0,t.createCommentVNode)(`v-if`,!0)],512))}});var g=e.t(h,[[`__scopeId`,`data-v-b89d8e04`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return 300}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return 8}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 200}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return 16}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return i}});
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{minWidth:1600,columns:6},{minWidth:1200,columns:5},{minWidth:992,columns:4},{minWidth:768,columns:3},{minWidth:480,columns:2},{minWidth:0,columns:1}],i=[180,360];function a(e,n,i){let a=(0,t.ref)(4),o=(0,t.ref)(0);function s(e){if(n?.value&&n.value>0)return n.value;let t=[...i?.value?.length?i.value:r].sort((e,t)=>t.minWidth-e.minWidth);for(let n of t)if(e>=n.minWidth)return n.columns;return 1}let c=null,l=!1;function u(){let t=e.value;if(!l||!t)return;let{width:n}=t.getBoundingClientRect();o.value=n,a.value=s(n)}function d(){f();let t=e.value;t&&(l=!0,typeof ResizeObserver<`u`&&(c=new ResizeObserver(u),c.observe(t)),window.addEventListener(`resize`,u,{passive:!0}),u())}function f(){c?.disconnect(),c=null,window.removeEventListener(`resize`,u),l=!1}return(0,t.onMounted)(d),(0,t.onActivated)(d),(0,t.onDeactivated)(f),(0,t.onBeforeUnmount)(f),(0,t.watch)(e,()=>{l&&d()}),(0,t.watch)([()=>n?.value,()=>i?.value],()=>{o.value>0&&(a.value=s(o.value))}),{columns:(0,t.readonly)(a),containerWidth:(0,t.readonly)(o)}}function o(e,n,r,i,a={}){let o=(0,t.ref)([]),s=(0,t.ref)(0),c=new Map,l=new Map,u=(0,t.computed)(()=>new Map(e.value.map(e=>[e.id,e.src]))),d,f=!1,p=!1,m=()=>{d!==void 0&&cancelAnimationFrame(d),d=void 0};(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>{f=!0,m(),l.clear(),c.clear()});let h=()=>{if(!(f||p)){if(!a.batchImageLoads||typeof requestAnimationFrame>`u`){E();return}d===void 0&&(d=requestAnimationFrame(()=>{d=void 0,E()}))}};function g(e,t,n){let r=e/t;return Number.isFinite(r)&&r>0?r*n:n}function _(e,t){let n=l.get(e.id),r=n?.src&&n.src!==e.src?void 0:n;return r&&!r.basisWidth?r.height:r?.basisWidth?g(r.height,r.basisWidth,t):g(e.height,e.width,t)}function v(){o.value=[],s.value=0,e.value.length===0&&(l.clear(),c.clear())}function y(t,n,r){return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)&&n>0&&e.value.length>0}function b(e,t,n,r){if(!x(e,r)||!S(t,n))return;let i=l.get(e);i?.height===t&&i.basisWidth===n&&i.src===r||(l.set(e,{height:t,basisWidth:n,src:r}),h())}function x(e,t){return!f&&!p&&u.value.has(e)&&(t===void 0||u.value.get(e)===t)}function S(e,t){return Number.isFinite(e)&&e>0&&(t===void 0||Number.isFinite(t)&&t>0)}function C(e,t,n,r){if(!x(e,r)||!Number.isFinite(t))return;let i=c.get(e);Math.abs((i?.height??0)-t)<.5&&i?.basisWidth===n&&i?.src===r||(c.set(e,{height:t,basisWidth:n,src:r}),h())}function w(e){for(let t of[l,c])for(let n of t.keys())e.has(n)||t.delete(n)}function T(e,t){let n=c.get(e.id);return!n||n.basisWidth!==void 0&&n.basisWidth!==t||n.src!==void 0&&n.src!==e.src?0:n.height}function E(){if(m(),f||p)return;w(new Set(u.value.keys()));let t=Math.min(24,Math.max(1,Math.floor(n.value))),a=r.value,c=Math.max(0,i.value??16);if(!y(t,a,c)){v();return}let l=(a-(t-1)*c)/t;if(l<=0){v();return}let d=Array.from({length:t},(e,t)=>({index:t,height:0})),h=[];for(let t of e.value){let e=d.reduce((e,t)=>t.height<e.height?t:e),n=_(t,l),r=T(t,l),i=Math.max(1,n+r),a=e.index*(l+c),o=e.height;h.push({item:t,columnIndex:e.index,x:a,y:o,width:l,height:n,totalHeight:i}),e.height=o+i+c}o.value=h,s.value=Math.max(...d.map(e=>e.height))-c}return(0,t.watch)([()=>e.value.map(e=>[e,e.id,e.src,e.width,e.height]),n,r,i],E,{immediate:!0}),(0,t.getCurrentInstance)()&&((0,t.onDeactivated)(()=>{p=!0,m()}),(0,t.onActivated)(()=>{p=!1,E()})),{layoutItems:(0,t.readonly)(o),containerHeight:(0,t.readonly)(s),cacheImageHeight:b,cacheItemExtraHeight:C,relayout:E}}function s(e,n,r,i,a){let o=(0,t.ref)(`idle`),s=(0,t.ref)(!1),c=null,l=!1,u=!1,d=0,f=!1,p=!1,m=0;function h(){f||p||!u||!n.value||r.value||i.value||l||d>=5||(l=!0,d+=1,s.value=d>=5,o.value=`loading`,a())}function g(){let t=e.value;if(p||!t||!n.value||typeof IntersectionObserver>`u`)return;c?.disconnect();let r=++m;c=new IntersectionObserver(e=>{if(!(f||r!==m)){if(u=!!e[0]?.isIntersecting,!u){l=!1,d=0,s.value=!1;return}h()}},{rootMargin:`200px 0px`}),c.observe(t)}function _(){m+=1,c?.disconnect(),c=null,l=!1,u=!1,d=0,s.value=!1}return(0,t.watch)([r,i],([e,n],[r])=>{o.value=n?`no-more`:e?`loading`:`idle`,!e&&!n&&(l=!1,r&&(0,t.nextTick)(h))}),(0,t.onMounted)(g),(0,t.onActivated)(()=>{p=!1,_(),g()}),(0,t.onDeactivated)(()=>{p=!0,_()}),(0,t.onBeforeUnmount)(()=>{f=!0,_()}),(0,t.watch)([e,n],()=>{_(),g()}),{status:(0,t.readonly)(o),paused:(0,t.readonly)(s),resume:()=>{r.value||i.value||f||(d=0,l=!1,s.value=!1,h())}}}function c(e){let t=[],n=new Map;return{columns:t,byId:n,entries:e.map((e,r)=>{let i={layout:e,index:r,bottom:e.y+(e.totalHeight??e.height)};return(t[e.columnIndex]??=[]).push(i),n.set(e.item.id,i),i})}}function l(e,t,n){let r=[];for(let i of e){if(!i)continue;let e=0,a=i.length;for(;e<a;){let n=e+a>>>1;i[n].bottom<t?e=n+1:a=n}for(let t=e;t<i.length;t++){let e=i[t];if(e.layout.y>n)break;r.push(e)}}return r.sort((e,t)=>e.index-t.index)}function u(e){let t=[];for(let n=e.parentElement;n;n=n.parentElement){let e=getComputedStyle(n);/(auto|scroll|overlay|hidden|clip)/.test(e.overflowY||e.overflow)&&t.push(n)}return t}function d(e,n,r){let i=(0,t.computed)(()=>c(n.value)),a=(0,t.shallowRef)(),o=(0,t.shallowRef)({top:0,bottom:600}),s=(0,t.computed)(()=>r.value&&n.value.length>=100),d=[],f,p,m=!1,h=(0,t.computed)(()=>{if(!s.value)return i.value.entries;let{top:e,bottom:t}=o.value,n=Math.max(300,(t-e)*.75),r=l(i.value.columns,e-n,t+n),c=a.value===void 0?void 0:i.value.byId.get(a.value);return c&&!r.includes(c)&&(r.push(c),r.sort((e,t)=>e.index-t.index)),r});function g(){if(!m||!e.value)return;let t=e.value.getBoundingClientRect().top,n=0,r=window.innerHeight;for(let e of d){let t=e.getBoundingClientRect().top+e.clientTop;n=Math.max(n,t),r=Math.min(r,t+e.clientHeight)}let i=n-t,a=Math.max(n,r)-t;(o.value.top!==i||o.value.bottom!==a)&&(o.value={top:i,bottom:a})}function _(){!m||p!==void 0||(p=requestAnimationFrame(()=>{p=void 0,g()}))}function v(){m=!1,p!==void 0&&cancelAnimationFrame(p),p=void 0,f?.disconnect(),f=void 0,window.removeEventListener(`scroll`,_),window.removeEventListener(`resize`,_);for(let e of d)e.removeEventListener(`scroll`,_);d=[]}function y(){if(v(),e.value){m=!0,d=u(e.value),window.addEventListener(`scroll`,_,{passive:!0}),window.addEventListener(`resize`,_,{passive:!0});for(let e of d)e.addEventListener(`scroll`,_,{passive:!0});typeof ResizeObserver<`u`&&(f=new ResizeObserver(_),f.observe(e.value),d.forEach(e=>f?.observe(e))),g()}}function b(){let t=e.value;if(!m||!t)return;let n=d.find(e=>e.scrollHeight>e.clientHeight&&/(auto|scroll|overlay)/.test(getComputedStyle(e).overflowY||getComputedStyle(e).overflow)),{top:r}=t.getBoundingClientRect();n?n.scrollTo({top:n.scrollTop+r-n.getBoundingClientRect().top-n.clientTop,behavior:`smooth`}):window.scrollTo({top:window.scrollY+r,behavior:`smooth`})}function x(e){a.value!==e&&(a.value=e)}function S(t){(!(t.relatedTarget instanceof Node)||!e.value?.contains(t.relatedTarget))&&(a.value=void 0)}return(0,t.watch)(e,()=>{m&&y()},{flush:`post`}),(0,t.watch)(i,()=>{a.value!==void 0&&!i.value.byId.has(a.value)&&(a.value=void 0),(0,t.nextTick)(_)}),(0,t.onMounted)(y),(0,t.onActivated)(y),(0,t.onDeactivated)(v),(0,t.onBeforeUnmount)(v),{visibleItems:h,index:i,virtual:s,pinItem:x,releaseItem:S,scrollToTop:b}}const f=[`data-waterfall-index`,`aria-label`,`onClick`,`onKeydown`,`onFocusin`],p={class:`waterfall__card`},m=[`src`,`alt`,`loading`,`onLoad`,`onError`],h={key:0,class:`waterfall__title`},g={key:0,class:`waterfall__footer`},_={key:0,class:`waterfall__status`},v={key:1,class:`waterfall__status waterfall__status--done`},y=(0,t.defineComponent)({name:`C_WaterFall`,__name:`index`,props:{items:{},columns:{default:void 0},gap:{default:16},lazy:{type:Boolean,default:!0},virtualScroll:{type:Boolean,default:!0},infinite:{type:Boolean,default:!1},skeleton:{type:Boolean,default:!0},skeletonCount:{default:8},animationDuration:{default:300},breakpoints:{default:void 0},loading:{type:Boolean,default:!1},noMore:{type:Boolean,default:!1}},emits:[`load-more`,`item-click`,`image-loaded`,`image-error`],setup(e,{expose:r,emit:c}){let l=e,u=c,y=(0,t.ref)(),b=(0,t.ref)(),{columns:x,containerWidth:S}=a(y,(0,t.computed)(()=>l.columns),(0,t.computed)(()=>l.breakpoints)),{layoutItems:C,containerHeight:w,cacheImageHeight:T,cacheItemExtraHeight:E,relayout:D}=o((0,t.computed)(()=>l.items),x,S,(0,t.computed)(()=>l.gap),{batchImageLoads:!0}),O=new Map,k=new Map,{visibleItems:A,index:j,virtual:M,pinItem:N,releaseItem:P,scrollToTop:F}=d(y,C,(0,t.computed)(()=>l.virtualScroll)),I=!0,L=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{if(I)for(let t of e){let e=O.get(t.target),n=e===void 0?void 0:j.value.byId.get(e)?.layout;n&&E(n.item.id,t.target.getBoundingClientRect().height-n.height,n.width,n.item.src)}});function R(e,t){let n=k.get(t);n!==e&&(n&&(L?.unobserve(n),O.delete(n),k.delete(t)),e instanceof HTMLElement&&(k.set(t,e),O.set(e,t),I&&L?.observe(e)))}(0,t.onDeactivated)(()=>{I=!1,L?.disconnect()}),(0,t.onActivated)(()=>{I=!0,k.forEach(e=>L?.observe(e))}),(0,t.onUnmounted)(()=>{I=!1,L?.disconnect(),O.clear(),k.clear()});let z=(0,t.computed)(()=>l.skeleton&&l.loading&&C.value.length===0),B=(0,t.computed)(()=>{let e=Math.min(24,Math.max(1,Math.floor(x.value))),t=S.value,n=Math.max(0,l.gap);if(!Number.isFinite(e)||t<=0)return[];let r=(t-(e-1)*n)/e;if(r<=0)return[];let a=Math.min(100,Math.max(0,Math.floor(l.skeletonCount??8))),o=Array(e).fill(0),s=[];for(let e=0;e<a;e++){let t=o.indexOf(Math.min(...o)),a=i[0]+e*73%(i[1]-i[0]);s.push({x:t*(r+n),y:o[t],width:r,height:a}),o[t]+=a+n}return s}),V=(0,t.computed)(()=>B.value.length===0?0:Math.max(...B.value.map(e=>e.y+e.height))),H=(0,t.computed)(()=>z.value?V.value:w.value),{status:U,paused:W,resume:G}=s(b,(0,t.computed)(()=>l.infinite),(0,t.computed)(()=>l.loading),(0,t.computed)(()=>l.noMore),()=>u(`load-more`));function K(e,t){let n=t.target;if(n.getAttribute(`src`)===e.item.src){if(n.naturalHeight&&n.naturalWidth){let t=n.naturalHeight/n.naturalWidth*e.width;T(e.item.id,t,e.width,e.item.src)}u(`image-loaded`,e.item)}}function q(e){u(`image-error`,e.item)}function J(e,t){if(e.tabIndex<0||e.matches(`:disabled, input[type="hidden"]`))return!1;for(let n=e;n&&n!==t.parentElement;n=n.parentElement){if(n.hidden||n.hasAttribute(`inert`))return!1;let{display:e,visibility:t}=getComputedStyle(n);if(e===`none`||t===`hidden`||t===`collapse`)return!1}return!0}function Y(e){return Array.from(e.querySelectorAll(`a[href],button,input,select,textarea,[tabindex],[contenteditable="true"]`)).filter(t=>J(t,e))}function X(e,n=!1){let r=j.value.entries[e];r&&(N(r.layout.item.id),(0,t.nextTick)(()=>{let e=k.get(r.layout.item.id);if(!e||!I)return;let t=n?Y(e):[],i=t[t.length-1]??e;i.focus({preventScroll:!0}),i.scrollIntoView?.({block:`nearest`})}))}function Z(e,t){if(!M.value)return;let n=e.currentTarget,r=Y(n);if(e.shiftKey?e.target!==n:r.length>0&&e.target!==r[r.length-1])return;let i=t+(e.shiftKey?-1:1);j.value.entries[i]&&(e.preventDefault(),X(i,e.shiftKey))}function Q(e,t,n){if(e.key===`Tab`)return Z(e,n);if(e.target!==e.currentTarget)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),u(`item-click`,t.item,n);return}let r={ArrowRight:n+1,ArrowDown:n+1,ArrowLeft:n-1,ArrowUp:n-1,Home:0,End:l.items.length-1}[e.key];r===void 0||!j.value.entries[r]||(e.preventDefault(),X(r))}return r({relayout:D,scrollToTop:F,getColumns:()=>x.value,getContainerHeight:()=>w.value}),(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`containerRef`,ref:y,class:`c-waterfall`},[(0,t.createElementVNode)(`div`,{class:`waterfall__body`,style:(0,t.normalizeStyle)({height:`${H.value}px`,position:`relative`})},[z.value?((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,{key:0},(0,t.renderList)(B.value,(n,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:`sk-${i}`,class:`waterfall__skeleton`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,height:`${n.height}px`,transition:`all ${l.animationDuration??(0,t.unref)(300)}ms ease`})},[(0,t.renderSlot)(e.$slots,`skeleton`,{},()=>[r[1]||=(0,t.createElementVNode)(`div`,{class:`waterfall__skeleton-inner`},null,-1)],!0)],4))),128)):(0,t.createCommentVNode)(`v-if`,!0),((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(A),({layout:n,index:i})=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n.item.id,ref_for:!0,ref:e=>R(e,n.item.id),class:`waterfall__item`,role:`button`,tabindex:`0`,"data-waterfall-index":i,"aria-label":n.item.title||`瀑布流项目 ${i+1}`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,transition:`all ${l.animationDuration??(0,t.unref)(300)}ms ease`}),onClick:e=>u(`item-click`,n.item,i),onKeydown:e=>Q(e,n,i),onFocusin:e=>(0,t.unref)(N)(n.item.id),onFocusout:r[0]||=(...e)=>(0,t.unref)(P)&&(0,t.unref)(P)(...e)},[(0,t.renderSlot)(e.$slots,`item`,{item:n.item,index:i,width:n.width,height:n.height},()=>[(0,t.createElementVNode)(`div`,p,[(0,t.createElementVNode)(`img`,{src:n.item.src,alt:n.item.title||``,loading:l.lazy?`lazy`:`eager`,class:`waterfall__image`,style:(0,t.normalizeStyle)({height:`${n.height}px`}),onLoad:e=>K(n,e),onError:e=>q(n)},null,44,m),n.item.title?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,h,(0,t.toDisplayString)(n.item.title),1)):(0,t.createCommentVNode)(`v-if`,!0)])],!0)],44,f))),128))],4),l.infinite?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,g,[(0,t.createElementVNode)(`div`,{ref_key:`sentinelRef`,ref:b,class:`waterfall__sentinel`},null,512),(0,t.renderSlot)(e.$slots,`footer`,{status:(0,t.unref)(U),paused:(0,t.unref)(W),loadMore:(0,t.unref)(G)},()=>[l.loading?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,_,[(0,t.createVNode)((0,t.unref)(n.NSpin),{size:`small`}),r[2]||=(0,t.createElementVNode)(`span`,null,`加载中…`,-1)])):l.noMore?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,v,` 没有更多了 `)):(0,t.unref)(W)?((0,t.openBlock)(),(0,t.createBlock)((0,t.unref)(n.NButton),{key:2,size:`small`,onClick:(0,t.unref)(G)},{default:(0,t.withCtx)(()=>[...r[3]||=[(0,t.createTextVNode)(`继续加载`,-1)]]),_:1},8,[`onClick`])):(0,t.createCommentVNode)(`v-if`,!0)],!0)])):(0,t.createCommentVNode)(`v-if`,!0)],512))}});var b=e.t(y,[[`__scopeId`,`data-v-f6a44501`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return 300}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return 8}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 200}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return 16}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return i}});
|
package/dist/C_WaterFall2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,getCurrentScope as u,nextTick as d,normalizeStyle as f,onBeforeUnmount as p,onMounted as m,onScopeDispose as h,onUnmounted as g,openBlock as _,readonly as v,ref as y,renderList as b,renderSlot as x,toDisplayString as S,unref as C,watch as w,withCtx as T,withKeys as E,withModifiers as D}from"vue";import{NButton as O,NSpin as k}from"naive-ui";const A=16,j=300,M=8,N=200,P=[{minWidth:1600,columns:6},{minWidth:1200,columns:5},{minWidth:992,columns:4},{minWidth:768,columns:3},{minWidth:480,columns:2},{minWidth:0,columns:1}],F=[180,360];function I(e,t,n){let r=y(4),i=y(0);function a(e){if(t?.value&&t.value>0)return t.value;let r=[...n?.value?.length?n.value:P].sort((e,t)=>t.minWidth-e.minWidth);for(let t of r)if(e>=t.minWidth)return t.columns;return 1}let o=null;function s(){let t=e.value;if(!t)return;o=new ResizeObserver(e=>{for(let t of e){let{width:e}=t.contentRect;i.value=e,r.value=a(e)}}),o.observe(t);let n=t.getBoundingClientRect();i.value=n.width,r.value=a(n.width)}function c(){o?.disconnect(),o=null}return m(s),p(c),w(e,()=>{c(),s()}),w([()=>t?.value,()=>n?.value],()=>{i.value>0&&(r.value=a(i.value))}),{columns:v(r),containerWidth:v(i)}}function L(e,t,r,i,a={}){let o=y([]),s=y(0),c=new Map,l=new Map,d=n(()=>new Map(e.value.map(e=>[e.id,e.src]))),f,p=!1,m=()=>{f!==void 0&&cancelAnimationFrame(f),f=void 0};u()&&h(()=>{p=!0,m(),l.clear(),c.clear()});let g=()=>{if(!p){if(!a.batchImageLoads||typeof requestAnimationFrame>`u`){O();return}f===void 0&&(f=requestAnimationFrame(()=>{f=void 0,O()}))}};function _(e,t,n){let r=e/t;return Number.isFinite(r)&&r>0?r*n:n}function b(e,t){let n=l.get(e.id),r=n?.src&&n.src!==e.src?void 0:n;return r&&!r.basisWidth?r.height:r?.basisWidth?_(r.height,r.basisWidth,t):_(e.height,e.width,t)}function x(){o.value=[],s.value=0,e.value.length===0&&(l.clear(),c.clear())}function S(t,n,r){return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)&&n>0&&e.value.length>0}function C(e,t,n,r){if(p||r!==void 0&&d.value.get(e)!==r||!T(t,n))return;let i=l.get(e);i?.height===t&&i.basisWidth===n&&i.src===r||(l.set(e,{height:t,basisWidth:n,src:r}),g())}function T(e,t){return Number.isFinite(e)&&e>0&&(t===void 0||Number.isFinite(t)&&t>0)}function E(e,t){p||!d.value.has(e)||!Number.isFinite(t)||Math.abs((c.get(e)??0)-t)<.5||(c.set(e,t),g())}function D(e){for(let t of[l,c])for(let n of t.keys())e.has(n)||t.delete(n)}function O(){if(m(),p)return;let n=Math.min(24,Math.max(1,Math.floor(t.value))),a=r.value,l=Math.max(0,i.value??16);if(!S(n,a,l)){x();return}let u=(a-(n-1)*l)/n;if(u<=0){x();return}let d=Array.from({length:n},(e,t)=>({index:t,height:0})),f=[],h=new Set;for(let t of e.value){h.add(t.id);let e=d.reduce((e,t)=>t.height<e.height?t:e),n=b(t,u),r=e.index*(u+l),i=e.height;f.push({item:t,columnIndex:e.index,x:r,y:i,width:u,height:n}),e.height=i+n+(c.get(t.id)??0)+l}D(h),o.value=f,s.value=Math.max(...d.map(e=>e.height))-l}return w([e,()=>e.value.length,t,r,i],O,{immediate:!0}),{layoutItems:v(o),containerHeight:v(s),cacheImageHeight:C,cacheItemExtraHeight:E,relayout:O}}function R(e,t,n,r,i){let a=y(`idle`),o=y(!1),s=null,c=!1,l=!1,u=0,f=!1,h=0;function g(){f||!l||!t.value||n.value||r.value||c||u>=5||(c=!0,u+=1,o.value=u>=5,a.value=`loading`,i())}function _(){let n=e.value;if(!n||!t.value||typeof IntersectionObserver>`u`)return;let r=++h;s=new IntersectionObserver(e=>{if(!(f||r!==h)){if(l=!!e[0]?.isIntersecting,!l){c=!1,u=0,o.value=!1;return}g()}},{rootMargin:`200px 0px`}),s.observe(n)}function b(){h+=1,s?.disconnect(),s=null,c=!1,l=!1,u=0,o.value=!1}return w([n,r],([e,t],[n])=>{a.value=t?`no-more`:e?`loading`:`idle`,!e&&!t&&(c=!1,n&&d(g))}),m(_),p(()=>{f=!0,b()}),w([e,t],()=>{b(),_()}),{status:v(a),paused:v(o),resume:()=>{n.value||r.value||f||(u=0,c=!1,o.value=!1,g())}}}const z=[`aria-label`,`onClick`,`onKeydown`],B={class:`waterfall__card`},V=[`src`,`alt`,`loading`,`onLoad`,`onError`],H={key:0,class:`waterfall__title`},U={key:0,class:`waterfall__footer`},W={key:0,class:`waterfall__status`},G={key:1,class:`waterfall__status waterfall__status--done`};var K=e(l({name:`C_WaterFall`,__name:`index`,props:{items:{},columns:{default:void 0},gap:{default:16},lazy:{type:Boolean,default:!0},infinite:{type:Boolean,default:!1},skeleton:{type:Boolean,default:!0},skeletonCount:{default:8},animationDuration:{default:300},breakpoints:{default:void 0},loading:{type:Boolean,default:!1},noMore:{type:Boolean,default:!1}},emits:[`load-more`,`item-click`,`image-loaded`,`image-error`],setup(e,{expose:l,emit:u}){let d=e,p=u,m=y(),h=y(),{columns:v,containerWidth:w}=I(m,n(()=>d.columns),n(()=>d.breakpoints)),{layoutItems:A,containerHeight:j,cacheImageHeight:M,cacheItemExtraHeight:N,relayout:P}=L(n(()=>d.items),v,w,n(()=>d.gap),{batchImageLoads:!0}),K=new Map,q=new Map,J=n(()=>new Map(A.value.map(e=>[e.item.id,e]))),Y=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{for(let t of e){let e=K.get(t.target),n=e===void 0?void 0:J.value.get(e);n&&N(n.item.id,t.target.getBoundingClientRect().height-n.height)}});function ee(e,t){let n=q.get(t);n!==e&&(n&&(Y?.unobserve(n),K.delete(n),q.delete(t)),e instanceof HTMLElement&&(q.set(t,e),K.set(e,t),Y?.observe(e)))}g(()=>{Y?.disconnect(),K.clear(),q.clear()});let X=n(()=>d.skeleton&&d.loading&&A.value.length===0),Z=n(()=>{let e=Math.min(24,Math.max(1,Math.floor(v.value))),t=w.value,n=Math.max(0,d.gap);if(!Number.isFinite(e)||t<=0)return[];let r=(t-(e-1)*n)/e;if(r<=0)return[];let i=Math.min(100,Math.max(0,Math.floor(d.skeletonCount??8))),a=Array(e).fill(0),o=[];for(let e=0;e<i;e++){let t=a.indexOf(Math.min(...a)),i=F[0]+e*73%(F[1]-F[0]);o.push({x:t*(r+n),y:a[t],width:r,height:i}),a[t]+=i+n}return o}),te=n(()=>Z.value.length===0?0:Math.max(...Z.value.map(e=>e.y+e.height))),ne=n(()=>X.value?te.value:j.value),{status:re,paused:Q,resume:$}=R(h,n(()=>d.infinite),n(()=>d.loading),n(()=>d.noMore),()=>p(`load-more`));function ie(e,t){let n=t.target;if(n.getAttribute(`src`)===e.item.src){if(n.naturalHeight&&n.naturalWidth){let t=n.naturalHeight/n.naturalWidth*e.width;M(e.item.id,t,e.width,e.item.src)}p(`image-loaded`,e.item)}}function ae(e){p(`image-error`,e.item)}function oe(){m.value?.scrollIntoView({behavior:`smooth`,block:`start`})}return l({relayout:P,scrollToTop:oe,getColumns:()=>v.value,getContainerHeight:()=>j.value}),(e,n)=>(_(),a(`div`,{ref_key:`containerRef`,ref:m,class:`c-waterfall`},[o(`div`,{class:`waterfall__body`,style:f({height:`${ne.value}px`,position:`relative`})},[X.value?(_(!0),a(t,{key:0},b(Z.value,(t,r)=>(_(),a(`div`,{key:`sk-${r}`,class:`waterfall__skeleton`,style:f({position:`absolute`,left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,height:`${t.height}px`,transition:`all ${d.animationDuration??C(300)}ms ease`})},[x(e.$slots,`skeleton`,{},()=>[n[0]||=o(`div`,{class:`waterfall__skeleton-inner`},null,-1)],!0)],4))),128)):i(`v-if`,!0),(_(!0),a(t,null,b(C(A),(t,n)=>(_(),a(`div`,{key:t.item.id,ref_for:!0,ref:e=>ee(e,t.item.id),class:`waterfall__item`,role:`button`,tabindex:`0`,"aria-label":t.item.title||`瀑布流项目 ${n+1}`,style:f({position:`absolute`,left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,transition:`all ${d.animationDuration??C(300)}ms ease`}),onClick:e=>p(`item-click`,t.item,n),onKeydown:[E(e=>p(`item-click`,t.item,n),[`enter`]),E(D(e=>p(`item-click`,t.item,n),[`prevent`]),[`space`])]},[x(e.$slots,`item`,{item:t.item,index:n,width:t.width,height:t.height},()=>[o(`div`,B,[o(`img`,{src:t.item.src,alt:t.item.title||``,loading:d.lazy?`lazy`:`eager`,class:`waterfall__image`,style:f({height:`${t.height}px`}),onLoad:e=>ie(t,e),onError:e=>ae(t)},null,44,V),t.item.title?(_(),a(`div`,H,S(t.item.title),1)):i(`v-if`,!0)])],!0)],44,z))),128))],4),d.infinite?(_(),a(`div`,U,[o(`div`,{ref_key:`sentinelRef`,ref:h,class:`waterfall__sentinel`},null,512),x(e.$slots,`footer`,{status:C(re),paused:C(Q),loadMore:C($)},()=>[d.loading?(_(),a(`div`,W,[c(C(k),{size:`small`}),n[1]||=o(`span`,null,`加载中…`,-1)])):d.noMore?(_(),a(`div`,G,` 没有更多了 `)):C(Q)?(_(),r(C(O),{key:2,size:`small`,onClick:C($)},{default:T(()=>[...n[2]||=[s(`继续加载`,-1)]]),_:1},8,[`onClick`])):i(`v-if`,!0)],!0)])):i(`v-if`,!0)],512))}}),[[`__scopeId`,`data-v-b89d8e04`]]);export{j as a,M as c,I as i,N as l,R as n,P as o,L as r,A as s,K as t,F as u};
|
|
1
|
+
import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,getCurrentInstance as u,getCurrentScope as d,nextTick as f,normalizeStyle as p,onActivated as m,onBeforeUnmount as h,onDeactivated as g,onMounted as _,onScopeDispose as v,onUnmounted as y,openBlock as b,readonly as x,ref as S,renderList as C,renderSlot as w,shallowRef as T,toDisplayString as E,unref as D,watch as O,withCtx as k}from"vue";import{NButton as A,NSpin as ee}from"naive-ui";const j=16,M=300,N=8,P=200,F=[{minWidth:1600,columns:6},{minWidth:1200,columns:5},{minWidth:992,columns:4},{minWidth:768,columns:3},{minWidth:480,columns:2},{minWidth:0,columns:1}],I=[180,360];function L(e,t,n){let r=S(4),i=S(0);function a(e){if(t?.value&&t.value>0)return t.value;let r=[...n?.value?.length?n.value:F].sort((e,t)=>t.minWidth-e.minWidth);for(let t of r)if(e>=t.minWidth)return t.columns;return 1}let o=null,s=!1;function c(){let t=e.value;if(!s||!t)return;let{width:n}=t.getBoundingClientRect();i.value=n,r.value=a(n)}function l(){u();let t=e.value;t&&(s=!0,typeof ResizeObserver<`u`&&(o=new ResizeObserver(c),o.observe(t)),window.addEventListener(`resize`,c,{passive:!0}),c())}function u(){o?.disconnect(),o=null,window.removeEventListener(`resize`,c),s=!1}return _(l),m(l),g(u),h(u),O(e,()=>{s&&l()}),O([()=>t?.value,()=>n?.value],()=>{i.value>0&&(r.value=a(i.value))}),{columns:x(r),containerWidth:x(i)}}function R(e,t,r,i,a={}){let o=S([]),s=S(0),c=new Map,l=new Map,f=n(()=>new Map(e.value.map(e=>[e.id,e.src]))),p,h=!1,_=!1,y=()=>{p!==void 0&&cancelAnimationFrame(p),p=void 0};d()&&v(()=>{h=!0,y(),l.clear(),c.clear()});let b=()=>{if(!(h||_)){if(!a.batchImageLoads||typeof requestAnimationFrame>`u`){N();return}p===void 0&&(p=requestAnimationFrame(()=>{p=void 0,N()}))}};function C(e,t,n){let r=e/t;return Number.isFinite(r)&&r>0?r*n:n}function w(e,t){let n=l.get(e.id),r=n?.src&&n.src!==e.src?void 0:n;return r&&!r.basisWidth?r.height:r?.basisWidth?C(r.height,r.basisWidth,t):C(e.height,e.width,t)}function T(){o.value=[],s.value=0,e.value.length===0&&(l.clear(),c.clear())}function E(t,n,r){return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)&&n>0&&e.value.length>0}function D(e,t,n,r){if(!k(e,r)||!A(t,n))return;let i=l.get(e);i?.height===t&&i.basisWidth===n&&i.src===r||(l.set(e,{height:t,basisWidth:n,src:r}),b())}function k(e,t){return!h&&!_&&f.value.has(e)&&(t===void 0||f.value.get(e)===t)}function A(e,t){return Number.isFinite(e)&&e>0&&(t===void 0||Number.isFinite(t)&&t>0)}function ee(e,t,n,r){if(!k(e,r)||!Number.isFinite(t))return;let i=c.get(e);Math.abs((i?.height??0)-t)<.5&&i?.basisWidth===n&&i?.src===r||(c.set(e,{height:t,basisWidth:n,src:r}),b())}function j(e){for(let t of[l,c])for(let n of t.keys())e.has(n)||t.delete(n)}function M(e,t){let n=c.get(e.id);return!n||n.basisWidth!==void 0&&n.basisWidth!==t||n.src!==void 0&&n.src!==e.src?0:n.height}function N(){if(y(),h||_)return;j(new Set(f.value.keys()));let n=Math.min(24,Math.max(1,Math.floor(t.value))),a=r.value,c=Math.max(0,i.value??16);if(!E(n,a,c)){T();return}let l=(a-(n-1)*c)/n;if(l<=0){T();return}let u=Array.from({length:n},(e,t)=>({index:t,height:0})),d=[];for(let t of e.value){let e=u.reduce((e,t)=>t.height<e.height?t:e),n=w(t,l),r=M(t,l),i=Math.max(1,n+r),a=e.index*(l+c),o=e.height;d.push({item:t,columnIndex:e.index,x:a,y:o,width:l,height:n,totalHeight:i}),e.height=o+i+c}o.value=d,s.value=Math.max(...u.map(e=>e.height))-c}return O([()=>e.value.map(e=>[e,e.id,e.src,e.width,e.height]),t,r,i],N,{immediate:!0}),u()&&(g(()=>{_=!0,y()}),m(()=>{_=!1,N()})),{layoutItems:x(o),containerHeight:x(s),cacheImageHeight:D,cacheItemExtraHeight:ee,relayout:N}}function z(e,t,n,r,i){let a=S(`idle`),o=S(!1),s=null,c=!1,l=!1,u=0,d=!1,p=!1,v=0;function y(){d||p||!l||!t.value||n.value||r.value||c||u>=5||(c=!0,u+=1,o.value=u>=5,a.value=`loading`,i())}function b(){let n=e.value;if(p||!n||!t.value||typeof IntersectionObserver>`u`)return;s?.disconnect();let r=++v;s=new IntersectionObserver(e=>{if(!(d||r!==v)){if(l=!!e[0]?.isIntersecting,!l){c=!1,u=0,o.value=!1;return}y()}},{rootMargin:`200px 0px`}),s.observe(n)}function C(){v+=1,s?.disconnect(),s=null,c=!1,l=!1,u=0,o.value=!1}return O([n,r],([e,t],[n])=>{a.value=t?`no-more`:e?`loading`:`idle`,!e&&!t&&(c=!1,n&&f(y))}),_(b),m(()=>{p=!1,C(),b()}),g(()=>{p=!0,C()}),h(()=>{d=!0,C()}),O([e,t],()=>{C(),b()}),{status:x(a),paused:x(o),resume:()=>{n.value||r.value||d||(u=0,c=!1,o.value=!1,y())}}}function B(e){let t=[],n=new Map;return{columns:t,byId:n,entries:e.map((e,r)=>{let i={layout:e,index:r,bottom:e.y+(e.totalHeight??e.height)};return(t[e.columnIndex]??=[]).push(i),n.set(e.item.id,i),i})}}function V(e,t,n){let r=[];for(let i of e){if(!i)continue;let e=0,a=i.length;for(;e<a;){let n=e+a>>>1;i[n].bottom<t?e=n+1:a=n}for(let t=e;t<i.length;t++){let e=i[t];if(e.layout.y>n)break;r.push(e)}}return r.sort((e,t)=>e.index-t.index)}function H(e){let t=[];for(let n=e.parentElement;n;n=n.parentElement){let e=getComputedStyle(n);/(auto|scroll|overlay|hidden|clip)/.test(e.overflowY||e.overflow)&&t.push(n)}return t}function te(e,t,r){let i=n(()=>B(t.value)),a=T(),o=T({top:0,bottom:600}),s=n(()=>r.value&&t.value.length>=100),c=[],l,u,d=!1,p=n(()=>{if(!s.value)return i.value.entries;let{top:e,bottom:t}=o.value,n=Math.max(300,(t-e)*.75),r=V(i.value.columns,e-n,t+n),c=a.value===void 0?void 0:i.value.byId.get(a.value);return c&&!r.includes(c)&&(r.push(c),r.sort((e,t)=>e.index-t.index)),r});function v(){if(!d||!e.value)return;let t=e.value.getBoundingClientRect().top,n=0,r=window.innerHeight;for(let e of c){let t=e.getBoundingClientRect().top+e.clientTop;n=Math.max(n,t),r=Math.min(r,t+e.clientHeight)}let i=n-t,a=Math.max(n,r)-t;(o.value.top!==i||o.value.bottom!==a)&&(o.value={top:i,bottom:a})}function y(){!d||u!==void 0||(u=requestAnimationFrame(()=>{u=void 0,v()}))}function b(){d=!1,u!==void 0&&cancelAnimationFrame(u),u=void 0,l?.disconnect(),l=void 0,window.removeEventListener(`scroll`,y),window.removeEventListener(`resize`,y);for(let e of c)e.removeEventListener(`scroll`,y);c=[]}function x(){if(b(),e.value){d=!0,c=H(e.value),window.addEventListener(`scroll`,y,{passive:!0}),window.addEventListener(`resize`,y,{passive:!0});for(let e of c)e.addEventListener(`scroll`,y,{passive:!0});typeof ResizeObserver<`u`&&(l=new ResizeObserver(y),l.observe(e.value),c.forEach(e=>l?.observe(e))),v()}}function S(){let t=e.value;if(!d||!t)return;let n=c.find(e=>e.scrollHeight>e.clientHeight&&/(auto|scroll|overlay)/.test(getComputedStyle(e).overflowY||getComputedStyle(e).overflow)),{top:r}=t.getBoundingClientRect();n?n.scrollTo({top:n.scrollTop+r-n.getBoundingClientRect().top-n.clientTop,behavior:`smooth`}):window.scrollTo({top:window.scrollY+r,behavior:`smooth`})}function C(e){a.value!==e&&(a.value=e)}function w(t){(!(t.relatedTarget instanceof Node)||!e.value?.contains(t.relatedTarget))&&(a.value=void 0)}return O(e,()=>{d&&x()},{flush:`post`}),O(i,()=>{a.value!==void 0&&!i.value.byId.has(a.value)&&(a.value=void 0),f(y)}),_(x),m(x),g(b),h(b),{visibleItems:p,index:i,virtual:s,pinItem:C,releaseItem:w,scrollToTop:S}}const ne=[`data-waterfall-index`,`aria-label`,`onClick`,`onKeydown`,`onFocusin`],re={class:`waterfall__card`},ie=[`src`,`alt`,`loading`,`onLoad`,`onError`],ae={key:0,class:`waterfall__title`},oe={key:0,class:`waterfall__footer`},se={key:0,class:`waterfall__status`},ce={key:1,class:`waterfall__status waterfall__status--done`};var U=e(l({name:`C_WaterFall`,__name:`index`,props:{items:{},columns:{default:void 0},gap:{default:16},lazy:{type:Boolean,default:!0},virtualScroll:{type:Boolean,default:!0},infinite:{type:Boolean,default:!1},skeleton:{type:Boolean,default:!0},skeletonCount:{default:8},animationDuration:{default:300},breakpoints:{default:void 0},loading:{type:Boolean,default:!1},noMore:{type:Boolean,default:!1}},emits:[`load-more`,`item-click`,`image-loaded`,`image-error`],setup(e,{expose:l,emit:u}){let d=e,h=u,_=S(),v=S(),{columns:x,containerWidth:T}=L(_,n(()=>d.columns),n(()=>d.breakpoints)),{layoutItems:O,containerHeight:j,cacheImageHeight:M,cacheItemExtraHeight:N,relayout:P}=R(n(()=>d.items),x,T,n(()=>d.gap),{batchImageLoads:!0}),F=new Map,B=new Map,{visibleItems:V,index:H,virtual:U,pinItem:W,releaseItem:G,scrollToTop:le}=te(_,O,n(()=>d.virtualScroll)),K=!0,q=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{if(K)for(let t of e){let e=F.get(t.target),n=e===void 0?void 0:H.value.byId.get(e)?.layout;n&&N(n.item.id,t.target.getBoundingClientRect().height-n.height,n.width,n.item.src)}});function ue(e,t){let n=B.get(t);n!==e&&(n&&(q?.unobserve(n),F.delete(n),B.delete(t)),e instanceof HTMLElement&&(B.set(t,e),F.set(e,t),K&&q?.observe(e)))}g(()=>{K=!1,q?.disconnect()}),m(()=>{K=!0,B.forEach(e=>q?.observe(e))}),y(()=>{K=!1,q?.disconnect(),F.clear(),B.clear()});let J=n(()=>d.skeleton&&d.loading&&O.value.length===0),Y=n(()=>{let e=Math.min(24,Math.max(1,Math.floor(x.value))),t=T.value,n=Math.max(0,d.gap);if(!Number.isFinite(e)||t<=0)return[];let r=(t-(e-1)*n)/e;if(r<=0)return[];let i=Math.min(100,Math.max(0,Math.floor(d.skeletonCount??8))),a=Array(e).fill(0),o=[];for(let e=0;e<i;e++){let t=a.indexOf(Math.min(...a)),i=I[0]+e*73%(I[1]-I[0]);o.push({x:t*(r+n),y:a[t],width:r,height:i}),a[t]+=i+n}return o}),de=n(()=>Y.value.length===0?0:Math.max(...Y.value.map(e=>e.y+e.height))),fe=n(()=>J.value?de.value:j.value),{status:pe,paused:X,resume:Z}=z(v,n(()=>d.infinite),n(()=>d.loading),n(()=>d.noMore),()=>h(`load-more`));function me(e,t){let n=t.target;if(n.getAttribute(`src`)===e.item.src){if(n.naturalHeight&&n.naturalWidth){let t=n.naturalHeight/n.naturalWidth*e.width;M(e.item.id,t,e.width,e.item.src)}h(`image-loaded`,e.item)}}function he(e){h(`image-error`,e.item)}function ge(e,t){if(e.tabIndex<0||e.matches(`:disabled, input[type="hidden"]`))return!1;for(let n=e;n&&n!==t.parentElement;n=n.parentElement){if(n.hidden||n.hasAttribute(`inert`))return!1;let{display:e,visibility:t}=getComputedStyle(n);if(e===`none`||t===`hidden`||t===`collapse`)return!1}return!0}function Q(e){return Array.from(e.querySelectorAll(`a[href],button,input,select,textarea,[tabindex],[contenteditable="true"]`)).filter(t=>ge(t,e))}function $(e,t=!1){let n=H.value.entries[e];n&&(W(n.layout.item.id),f(()=>{let e=B.get(n.layout.item.id);if(!e||!K)return;let r=t?Q(e):[],i=r[r.length-1]??e;i.focus({preventScroll:!0}),i.scrollIntoView?.({block:`nearest`})}))}function _e(e,t){if(!U.value)return;let n=e.currentTarget,r=Q(n);if(e.shiftKey?e.target!==n:r.length>0&&e.target!==r[r.length-1])return;let i=t+(e.shiftKey?-1:1);H.value.entries[i]&&(e.preventDefault(),$(i,e.shiftKey))}function ve(e,t,n){if(e.key===`Tab`)return _e(e,n);if(e.target!==e.currentTarget)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),h(`item-click`,t.item,n);return}let r={ArrowRight:n+1,ArrowDown:n+1,ArrowLeft:n-1,ArrowUp:n-1,Home:0,End:d.items.length-1}[e.key];r===void 0||!H.value.entries[r]||(e.preventDefault(),$(r))}return l({relayout:P,scrollToTop:le,getColumns:()=>x.value,getContainerHeight:()=>j.value}),(e,n)=>(b(),a(`div`,{ref_key:`containerRef`,ref:_,class:`c-waterfall`},[o(`div`,{class:`waterfall__body`,style:p({height:`${fe.value}px`,position:`relative`})},[J.value?(b(!0),a(t,{key:0},C(Y.value,(t,r)=>(b(),a(`div`,{key:`sk-${r}`,class:`waterfall__skeleton`,style:p({position:`absolute`,left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,height:`${t.height}px`,transition:`all ${d.animationDuration??D(300)}ms ease`})},[w(e.$slots,`skeleton`,{},()=>[n[1]||=o(`div`,{class:`waterfall__skeleton-inner`},null,-1)],!0)],4))),128)):i(`v-if`,!0),(b(!0),a(t,null,C(D(V),({layout:t,index:r})=>(b(),a(`div`,{key:t.item.id,ref_for:!0,ref:e=>ue(e,t.item.id),class:`waterfall__item`,role:`button`,tabindex:`0`,"data-waterfall-index":r,"aria-label":t.item.title||`瀑布流项目 ${r+1}`,style:p({position:`absolute`,left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,transition:`all ${d.animationDuration??D(300)}ms ease`}),onClick:e=>h(`item-click`,t.item,r),onKeydown:e=>ve(e,t,r),onFocusin:e=>D(W)(t.item.id),onFocusout:n[0]||=(...e)=>D(G)&&D(G)(...e)},[w(e.$slots,`item`,{item:t.item,index:r,width:t.width,height:t.height},()=>[o(`div`,re,[o(`img`,{src:t.item.src,alt:t.item.title||``,loading:d.lazy?`lazy`:`eager`,class:`waterfall__image`,style:p({height:`${t.height}px`}),onLoad:e=>me(t,e),onError:e=>he(t)},null,44,ie),t.item.title?(b(),a(`div`,ae,E(t.item.title),1)):i(`v-if`,!0)])],!0)],44,ne))),128))],4),d.infinite?(b(),a(`div`,oe,[o(`div`,{ref_key:`sentinelRef`,ref:v,class:`waterfall__sentinel`},null,512),w(e.$slots,`footer`,{status:D(pe),paused:D(X),loadMore:D(Z)},()=>[d.loading?(b(),a(`div`,se,[c(D(ee),{size:`small`}),n[2]||=o(`span`,null,`加载中…`,-1)])):d.noMore?(b(),a(`div`,ce,` 没有更多了 `)):D(X)?(b(),r(D(A),{key:2,size:`small`,onClick:D(Z)},{default:k(()=>[...n[3]||=[s(`继续加载`,-1)]]),_:1},8,[`onClick`])):i(`v-if`,!0)],!0)])):i(`v-if`,!0)],512))}}),[[`__scopeId`,`data-v-f6a44501`]]);export{M as a,N as c,L as i,P as l,z as n,F as o,R as r,j as s,U as t,I as u};
|