@robot-admin/naive-ui-components 0.16.0 → 0.17.1
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 +39 -0
- package/README.md +12 -9
- package/README_EN.md +12 -9
- package/dist/C_ActionBar.css +56 -48
- package/dist/C_ActionBar2.cjs +1 -1
- package/dist/C_ActionBar2.js +1 -1
- package/dist/C_AntV2.cjs +1 -1
- package/dist/C_AntV2.js +3 -3
- package/dist/C_Barcode.css +6 -6
- package/dist/C_Barcode2.cjs +1 -1
- package/dist/C_Barcode2.js +1 -1
- package/dist/C_Chat.css +269 -185
- package/dist/C_Chat2.cjs +1 -1
- package/dist/C_Chat2.js +1 -1
- package/dist/C_Code.css +26 -26
- package/dist/C_Code2.cjs +1 -1
- package/dist/C_Code2.js +1 -1
- package/dist/C_Draggable2.cjs +1 -1
- package/dist/C_Draggable2.js +1 -1
- package/dist/C_FilePreview.css +96 -57
- package/dist/C_FilePreview2.cjs +1 -1
- package/dist/C_FilePreview2.js +1 -1
- package/dist/C_Form.base.css +295 -277
- package/dist/C_Form.css +295 -277
- package/dist/C_Form.d.cts +2 -1
- package/dist/C_Form.d.ts +2 -1
- package/dist/C_FormModal.css +10 -10
- package/dist/C_FormModal2.cjs +1 -1
- package/dist/C_FormModal2.js +1 -1
- package/dist/C_FormSearch.css +67 -68
- package/dist/C_FormSearch.d.cts +2 -1
- package/dist/C_FormSearch.d.ts +2 -1
- package/dist/C_FormSearch2.cjs +1 -1
- package/dist/C_FormSearch2.js +1 -1
- package/dist/C_FullCalendar2.cjs +1 -1
- package/dist/C_FullCalendar2.js +1 -1
- package/dist/C_GlobalSearch.css +140 -118
- package/dist/C_GlobalSearch2.cjs +1 -1
- package/dist/C_GlobalSearch2.js +1 -1
- package/dist/C_ImageCropper.css +12 -10
- package/dist/C_ImageCropper2.cjs +1 -1
- package/dist/C_ImageCropper2.js +1 -1
- package/dist/C_Login.css +79 -79
- package/dist/C_Login2.cjs +1 -1
- package/dist/C_Login2.js +1 -1
- package/dist/C_Map.css +10 -10
- package/dist/C_Map2.cjs +1 -1
- package/dist/C_Map2.js +1 -1
- package/dist/C_OrgChart.css +28 -4
- package/dist/C_OrgChart2.cjs +1 -1
- package/dist/C_OrgChart2.js +1 -1
- package/dist/C_QRCode2.cjs +1 -1
- package/dist/C_QRCode2.js +1 -1
- package/dist/C_Signature.css +15 -15
- package/dist/C_Signature2.cjs +1 -1
- package/dist/C_Signature2.js +1 -1
- package/dist/C_SplitPane.cjs +1 -1
- package/dist/C_SplitPane.css +251 -109
- package/dist/C_SplitPane.js +1 -1
- package/dist/C_SplitPane2.cjs +1 -1
- package/dist/C_SplitPane2.js +1 -1
- package/dist/C_Table.base.css +491 -563
- package/dist/C_Table.cjs +1 -1
- package/dist/C_Table.css +491 -563
- package/dist/C_Table.d.cts +3 -2
- package/dist/C_Table.d.ts +4 -2
- package/dist/C_Table.js +1 -1
- package/dist/C_TagsView2.cjs +1 -1
- package/dist/C_TagsView2.js +1 -1
- package/dist/C_Transfer.css +93 -84
- package/dist/C_Transfer2.cjs +1 -1
- package/dist/C_Transfer2.js +1 -1
- package/dist/C_Tree.css +72 -125
- package/dist/C_Tree.d.cts +3 -2
- package/dist/C_Tree.d.ts +15 -2
- package/dist/C_Tree2.cjs +1 -1
- package/dist/C_Tree2.js +1 -1
- package/dist/C_Upload.css +5 -5
- package/dist/C_Upload2.cjs +1 -1
- package/dist/C_Upload2.js +1 -1
- package/dist/C_VideoPlayer2.cjs +4 -3
- package/dist/C_VideoPlayer2.js +4 -3
- package/dist/C_VtableGantt.css +29 -28
- package/dist/C_VtableGantt2.cjs +1 -1
- package/dist/C_VtableGantt2.js +1 -1
- package/dist/C_WaterFall.css +29 -29
- package/dist/C_WaterFall2.cjs +1 -1
- package/dist/C_WaterFall2.js +1 -1
- package/dist/C_WorkFlow2.cjs +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/Card.cjs +1 -1
- package/dist/Card.js +1 -1
- package/dist/Custom.cjs +1 -1
- package/dist/Custom.js +1 -1
- package/dist/Dynamic.cjs +1 -1
- package/dist/Dynamic.js +1 -1
- package/dist/Steps.cjs +1 -1
- package/dist/Steps.js +1 -1
- package/dist/Tabs.cjs +1 -1
- package/dist/Tabs.js +1 -1
- package/dist/constants.d.cts +2 -2
- package/dist/constants.d.ts +2 -2
- package/dist/constants2.d.cts +2 -2
- package/dist/constants2.d.ts +2 -2
- package/dist/constants3.d.cts +2 -2
- package/dist/constants3.d.ts +2 -2
- package/dist/constants4.d.cts +4 -4
- package/dist/constants4.d.ts +4 -4
- package/dist/constants5.d.cts +3 -7
- package/dist/constants5.d.ts +3 -7
- package/dist/data.d.cts +10 -10
- package/dist/data.d.ts +10 -10
- package/dist/density.cjs +1 -0
- package/dist/density.d.cts +15 -0
- package/dist/density.d.ts +15 -0
- package/dist/density.js +1 -0
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +1 -1
- package/dist/index.vue.d.cts +5 -5
- package/dist/index.vue.d.ts +5 -5
- package/dist/index10.vue.d.cts +5 -5
- package/dist/index10.vue.d.ts +3 -3
- package/dist/index11.vue.d.cts +3 -3
- package/dist/index11.vue.d.ts +5 -5
- package/dist/index12.vue.d.cts +5 -5
- package/dist/index13.vue.d.ts +5 -5
- package/dist/index14.vue.d.cts +5 -5
- package/dist/index14.vue.d.ts +9 -9
- package/dist/index15.vue.d.cts +9 -9
- package/dist/index15.vue.d.ts +3 -3
- package/dist/index16.vue.d.cts +3 -3
- package/dist/index17.vue.d.ts +1 -1
- package/dist/index18.vue.d.cts +1 -1
- package/dist/index18.vue.d.ts +7 -7
- package/dist/index19.vue.d.cts +7 -7
- package/dist/index19.vue.d.ts +5 -5
- package/dist/index2.vue.d.cts +2 -2
- package/dist/index2.vue.d.ts +2 -2
- package/dist/index20.vue.d.cts +6 -2
- package/dist/index20.vue.d.ts +6 -2
- package/dist/index21.vue.d.cts +2 -2
- package/dist/index21.vue.d.ts +2 -2
- package/dist/index22.vue.d.cts +2 -2
- package/dist/index22.vue.d.ts +2 -2
- package/dist/index23.vue.d.cts +2 -2
- package/dist/index23.vue.d.ts +2 -2
- package/dist/index25.vue.d.cts +5 -5
- package/dist/index25.vue.d.ts +5 -5
- package/dist/index27.vue.d.cts +2 -2
- package/dist/index27.vue.d.ts +2 -2
- package/dist/index28.vue.d.cts +7 -3
- package/dist/index28.vue.d.ts +7 -3
- package/dist/index3.vue.d.cts +3 -3
- package/dist/index3.vue.d.ts +3 -3
- package/dist/index4.vue.d.cts +5 -5
- package/dist/index5.vue.d.ts +2 -2
- package/dist/index6.vue.d.cts +2 -2
- package/dist/index6.vue.d.ts +7 -4
- package/dist/index7.vue.d.cts +7 -4
- package/dist/index7.vue.d.ts +2 -2
- package/dist/index8.vue.d.cts +2 -2
- package/dist/index8.vue.d.ts +4 -6
- package/dist/index9.vue.d.cts +4 -6
- package/dist/index9.vue.d.ts +5 -5
- package/dist/mapUtils.d.cts +4 -4
- package/dist/mapUtils.d.ts +4 -4
- package/dist/presets.d.cts +4 -1
- package/dist/presets.d.ts +4 -1
- package/dist/style.css +1763 -1566
- package/dist/useCalendarEvents.d.cts +10 -9
- package/dist/useCalendarEvents.d.ts +10 -9
- package/dist/useCollapsePanel.d.cts +3 -3
- package/dist/useCollapsePanel.d.ts +3 -3
- package/dist/useCropperCore.d.cts +9 -9
- package/dist/useCropperCore.d.ts +9 -9
- package/dist/useDraggableLayout.d.cts +15 -13
- package/dist/useDraggableLayout.d.ts +15 -13
- package/dist/useDynamicFormState.d.cts +5 -2
- package/dist/useDynamicFormState.d.ts +5 -2
- package/dist/useEdgeInteraction.d.cts +3 -3
- package/dist/useEdgeInteraction.d.ts +3 -3
- package/dist/useFullscreen.d.cts +4 -0
- package/dist/useFullscreen.d.ts +4 -0
- package/dist/useGlobalSearch.d.cts +9 -4
- package/dist/useGlobalSearch.d.ts +9 -4
- package/dist/useInfiniteScroll.d.cts +4 -1
- package/dist/useInfiniteScroll.d.ts +4 -1
- package/dist/useQRCode.d.cts +3 -3
- package/dist/useQRCode.d.ts +3 -3
- package/dist/useSearchState.d.cts +8 -6
- package/dist/useSearchState.d.ts +8 -6
- package/dist/useSignatureHistory.d.cts +7 -7
- package/dist/useSignatureHistory.d.ts +7 -7
- package/dist/useSplitResize.d.cts +50 -61
- package/dist/useSplitResize.d.ts +50 -61
- package/dist/useTableQuery.cjs +3 -3
- package/dist/useTableQuery.d.cts +237 -13
- package/dist/useTableQuery.d.ts +237 -13
- package/dist/useTableQuery.js +3 -3
- package/dist/useTimeSelection.d.cts +2 -2
- package/dist/useTimeSelection.d.ts +2 -2
- package/dist/useWorkflowValidation.d.cts +3 -3
- package/dist/useWorkflowValidation.d.ts +3 -3
- package/dist/verification.d.cts +5 -5
- package/dist/verification.d.ts +5 -5
- package/docs/component-review-20261019.md +55 -0
- package/docs/guides/form-density.en.md +42 -0
- package/docs/guides/form-density.md +59 -0
- package/docs/guides/runtime-performance.md +38 -0
- package/docs/guides/split-pane.en.md +103 -0
- package/docs/guides/split-pane.md +126 -0
- package/docs/guides/table-density.md +87 -0
- package/docs/guides/transfer.md +11 -0
- package/docs/guides/tree.md +157 -0
- package/docs/guides/usage.en.md +2 -0
- package/docs/guides/usage.md +2 -0
- package/docs/runtime-review-20261019.md +41 -0
- package/docs/wl-ui-produce-coverage.md +62 -0
- package/package.json +4 -2
- package/dist/useTreeOperations.d.cts +0 -185
- package/dist/useTreeOperations.d.ts +0 -185
package/dist/C_Upload2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,TransitionGroup as r,computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createTextVNode as l,createVNode as u,defineComponent as d,normalizeClass as f,onBeforeUnmount as p,onMounted as m,openBlock as h,reactive as g,readonly as _,ref as v,renderList as y,renderSlot as b,toDisplayString as x,unref as S,watch as C,withCtx as w,withKeys as T,withModifiers as E}from"vue";import{NButton as D,NEllipsis as O,NProgress as k,NTag as A}from"naive-ui";import j from"spark-md5";const M=2*1024*1024,N={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},P={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},F={"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 I(e){for(let[t,n]of Object.entries(F))if(t!==`default`&&e.startsWith(t))return n;return F.default}function L(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]}`}const R=()=>new Promise(e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>e()):setTimeout(e,0)});function z(e){let t=v(0),n=v(0),r=i(()=>t.value>0);async function a(r,i){t.value+=1,n.value=0,i?.(0);let a=new j.ArrayBuffer,o=Math.max(1,Math.trunc(Number(e.value)||1)),s=Math.max(1,Math.ceil(r.size/o));try{if(r.size===0)return a.append(new ArrayBuffer(0)),n.value=100,i?.(100),a.end();for(let e=0;e<s;e+=1){let t=e*o,c=await r.slice(t,t+o).arrayBuffer();a.append(c),n.value=Math.round((e+1)/s*100),i?.(n.value),await R()}return a.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:r,hashProgress:_(n),calculateHash:a}}function B(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?e.customRequest.value(s):V(s);t.abortControllers.push(()=>{try{n.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 V(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 H(e){return e instanceof Error?e:Error(String(e))}function U(e){let t=[],n=v(0),r=new Map,i=()=>{n.value=r.size},a=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function o(){for(;r.size<a()&&t.length>0;){let n=t.shift(),{file:a}=n;if(!a.raw||r.has(a.uid))continue;let s=!1,c=e=>{s||(s=!0,r.delete(a.uid),i(),e?.error?n.onError(a.uid,e.error):e&&`response`in e&&n.onSuccess(a.uid,e.response),o())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:a.raw,filename:a.name,onProgress:e=>n.onProgress(a.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};r.set(a.uid,{abort:()=>void 0,settle:c}),i();try{let t=e.customRequest?.value?e.customRequest.value(l):W(l),n=r.get(a.uid);n&&(n.abort=t.abort)}catch(e){c({error:H(e)})}}}function s(e,n,r,i){c(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),o()}function c(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=r.get(e);if(n){n.settle();try{n.abort()}catch{}}}function l(){t.length=0;let e=[...r.values()];r.clear(),i(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return C(e.concurrency,o),{activeCount:_(n),enqueue:s,abort:c,abortAll:l}}function W(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 G(e){let t=i(()=>e.action??``),n=i(()=>e.headers??{}),r=i(()=>e.data??{}),a=i(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:M}),o=i(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),s=i(()=>e.customRequest),c=i(()=>e.instantCheck),l=i(()=>e.uploadedChunksQuery),u=i(()=>e.mergeChunks),d=v((e.defaultFileList??[]).map(e=>({...e}))),f=g(new Set),m=new Map,h=new Set,{hashing:_,hashProgress:y,calculateHash:b}=z(a),x=B({chunkSize:a,concurrency:o,action:t,headers:n,data:r,customRequest:s,uploadedChunksQuery:l,mergeChunks:u}),S=U({concurrency:o,action:t,headers:n,data:r,customRequest:s}),C=i(()=>{let e=d.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function w(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function T(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return h.add(t),t}}function E(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&d.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:w(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:T(r)};n.push(t)}return d.value.push(...n),n}function D(e,t){let n=d.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function O(e){m.set(e,Symbol(e)),x.abortUpload(e),S.abort(e),f.delete(e);let t=d.value.findIndex(t=>t.uid===e);if(t!==-1){let e=d.value[t];j(e.thumbUrl),d.value.splice(t,1)}}function k(){x.abortAll(),S.abortAll(),f.clear(),d.value.forEach(e=>{j(e.thumbUrl)}),d.value=[],m.clear()}async function A(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 j(e){!e||!h.has(e)||(URL.revokeObjectURL(e),h.delete(e))}function N(e,t){return m.get(e)===t&&!f.has(e)&&d.value.some(t=>t.uid===e)}function P(e,t){return b(e.raw,n=>{N(e.uid,t)&&D(e.uid,{percent:n})})}async function F(n){if(!n.raw)return;let r=Symbol(n.uid);m.set(n.uid,r),D(n.uid,{status:`validating`,error:void 0});let i;try{i=await A(n.raw)}catch(e){N(n.uid,r)&&D(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(N(n.uid,r)){if(!i){D(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(j(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:T(i)})),!s.value&&!t.value.trim()){D(n.uid,{status:`error`,error:`未配置上传地址`});return}if(c.value&&!n.hash){D(n.uid,{status:`hashing`});try{let e=await P(n,r);if(!N(n.uid,r))return;D(n.uid,{hash:e});let t=await c.value(e,n.raw.name);if(!N(n.uid,r))return;if(t.exists){D(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!N(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await I(n,r):L(n,r)}}async function I(e,t){let n=e.raw,{hash:r}=e;if(!r){D(e.uid,{status:`hashing`});try{if(r=await P(e,t),!N(e.uid,t))return;D(e.uid,{hash:r})}catch{N(e.uid,t)&&D(e.uid,{status:`error`,error:`Hash 计算失败`});return}}D(e.uid,{status:`uploading`,percent:0}),await x.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!N(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);D(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{N(e.uid,t)&&D(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{N(e.uid,t)&&D(e.uid,{status:`error`,error:n.message})},isPaused:()=>f.has(e.uid)})}function L(e,t){D(e.uid,{status:`uploading`,percent:0}),S.enqueue(e,(e,n)=>{N(e,t)&&D(e,{percent:n})},(e,n)=>{N(e,t)&&D(e,{status:`success`,percent:100,response:n})},(e,n)=>{N(e,t)&&D(e,{status:`error`,error:n.message})})}function R(){d.value.filter(e=>e.status===`pending`).forEach(e=>void F(e))}function V(){d.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(f.add(e.uid),m.set(e.uid,Symbol(e.uid)),x.abortUpload(e.uid),S.abort(e.uid),D(e.uid,{status:`paused`}))})}function H(){d.value.forEach(e=>{e.status===`paused`&&(f.delete(e.uid),D(e.uid,{status:`pending`}))}),R()}function W(e){let t=d.value.find(t=>t.uid===e);t&&t.status===`error`&&(D(e,{status:`pending`,percent:0,error:void 0}),F(t))}function G(){return d.value.filter(e=>e.status===`success`||e.status===`instant`)}return p(()=>{x.abortAll(),S.abortAll(),m.clear(),d.value.forEach(e=>{j(e.thumbUrl)})}),{fileList:d,totalPercent:C,hashing:_,hashProgress:y,addFiles:E,removeFile:O,clearAll:k,startUpload:R,pauseAll:V,resumeAll:H,retryFile:W,processFile:F,getSuccessList:G}}function K(e,t,n,r,i){let a=v(!1),o=null,s=!1;function c(e){t.value&&(e.preventDefault(),a.value=!0)}function l(e){t.value&&(e.preventDefault(),a.value=!0)}function u(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(a.value=!1)}async function d(e){if(!t.value)return;e.preventDefault(),a.value=!1;let n=e.dataTransfer?.items;if(!n)return;let o=await ee(n,e.dataTransfer);if(s||!t.value)return;let c=J(o,r.value);c.length>0&&i(c)}function f(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let a=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&a.push(e)}}let o=J(a,r.value);o.length>0&&(e.preventDefault(),i(o))}function h(){let t=e.value;!t||o===t||(o=t,t.addEventListener(`dragenter`,c),t.addEventListener(`dragover`,l),t.addEventListener(`dragleave`,u),t.addEventListener(`drop`,d),n.value&&t.addEventListener(`paste`,f))}function g(){let e=o;e&&(e.removeEventListener(`dragenter`,c),e.removeEventListener(`dragover`,l),e.removeEventListener(`dragleave`,u),e.removeEventListener(`drop`,d)),e?.removeEventListener(`paste`,f),o=null}return m(()=>{s=!1,h()}),p(()=>{s=!0,g()}),C([e,t,n],()=>{g(),h()}),{isDragOver:_(a)}}async function ee(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(q))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function q(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(q))).flat()}return[]}function J(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 Y=[`tabindex`,`aria-disabled`,`onKeydown`],X=[`accept`,`multiple`,`webkitdirectory`,`disabled`],Z={class:`upload-area__default`},Q={class:`upload-area__text`},te={key:0},ne={key:1},re={key:0,class:`upload-area__tip`};var ie=t(d({__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(t,{expose:r,emit:a}){let d=t,p=a,m=v(),g=v(),{isDragOver:_}=K(m,i(()=>d.draggable&&!d.disabled),i(()=>d.pasteable&&!d.disabled),i(()=>d.accept),e=>p(`files`,e));function y(){d.disabled||g.value?.click()}function C(e){let t=e.target,n=d.disabled?[]:J(Array.from(t.files??[]),d.accept);n.length>0&&p(`files`,n),t.value=``}return r({triggerSelect:y}),(r,i)=>(h(),s(`div`,{ref_key:`areaRef`,ref:m,class:f([`upload-area`,{"upload-area--drag-over":S(_),"upload-area--disabled":t.disabled}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled,onClick:y,onKeydown:[T(E(y,[`prevent`]),[`enter`]),T(E(y,[`prevent`]),[`space`])]},[c(`input`,{ref_key:`inputRef`,ref:g,type:`file`,class:`upload-area__input`,accept:t.accept,multiple:t.multiple,webkitdirectory:t.directory||void 0,disabled:t.disabled,onClick:i[0]||=E(()=>{},[`stop`]),onChange:C},null,40,X),b(r.$slots,`default`,{},()=>[c(`div`,Z,[u(e,{name:S(_)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),c(`div`,Q,[S(_)?(h(),s(`span`,te,`释放文件到此处`)):(h(),s(`span`,ne,[i[4]||=l(` 点击或拖拽文件到此区域上传 `,-1),t.pasteable?(h(),s(n,{key:0},[i[1]||=l(` ,支持 `,-1),i[2]||=c(`kbd`,null,`Ctrl+V`,-1),i[3]||=l(` 粘贴 `,-1)],64)):o(`v-if`,!0)]))]),t.tip?(h(),s(`div`,re,x(t.tip),1)):o(`v-if`,!0)])],!0)],42,Y))}}),[[`__scopeId`,`data-v-705892ab`]]);const ae={class:`file-list__thumb`},oe=[`src`,`alt`],se={class:`file-list__info`},ce={class:`file-list__name`},le={class:`file-list__meta`},ue={class:`file-list__size`},de={key:0,class:`file-list__instant`},fe={key:1,class:`file-list__chunk-info`},pe={key:2,class:`file-list__error`},me={class:`file-list__actions`};var he=t(d({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(t,{emit:i}){let d=i;return(i,p)=>(h(),a(r,{name:`file-list`,tag:`div`,class:`file-list`},{default:w(()=>[(h(!0),s(n,null,y(t.fileList,n=>(h(),s(`div`,{key:n.uid,class:f([`file-list__item`,`file-list__item--${n.status}`])},[o(` 缩略图 / 图标 `),c(`div`,ae,[t.showThumbnail&&n.thumbUrl?(h(),s(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,oe)):(h(),a(e,{key:1,name:S(I)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),o(` 文件信息 `),c(`div`,se,[c(`div`,ce,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(n.name),1)]),_:2},1024)]),c(`div`,le,[c(`span`,ue,x(S(L)(n.size)),1),u(S(A),{type:S(P)[n.status]||`default`,size:`tiny`,bordered:!1},{default:w(()=>[l(x(S(N)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?(h(),s(`span`,de,` ⚡ `)):o(`v-if`,!0)]),o(` 进度条 `),n.status===`uploading`||n.status===`hashing`?(h(),a(S(k),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):o(`v-if`,!0),o(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?(h(),s(`div`,fe,` 分片 `+x(n.chunkProgress.uploadedChunks)+`/`+x(n.chunkProgress.totalChunks),1)):o(`v-if`,!0),o(` 错误信息 `),n.status===`error`&&n.error?(h(),s(`div`,pe,x(n.error),1)):o(`v-if`,!0)]),o(` 操作按钮 `),c(`div`,me,[n.status===`error`?(h(),a(S(D),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>d(`retry`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>d(`remove`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}}),[[`__scopeId`,`data-v-04f26012`]]);const ge={key:0,class:`image-preview`},_e=[`src`,`alt`],$={class:`image-preview__overlay`},ve={key:0,class:`image-preview__progress`},ye={class:`image-preview__actions`},be={class:`image-preview__name`};var xe=t(d({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(t,{emit:r}){let d=t,p=r,m=i(()=>d.fileList.filter(e=>e.type?.startsWith(`image/`)));return(t,r)=>m.value.length>0?(h(),s(`div`,ge,[(h(!0),s(n,null,y(m.value,t=>(h(),s(`div`,{key:t.uid,class:f([`image-preview__item`,`image-preview__item--${t.status}`])},[t.thumbUrl?(h(),s(`img`,{key:0,src:t.thumbUrl,alt:t.name,class:`image-preview__img`},null,8,_e)):o(`v-if`,!0),o(` 遮罩层 `),c(`div`,$,[o(` 上传中进度 `),t.status===`uploading`||t.status===`hashing`?(h(),s(`div`,ve,[u(S(k),{type:`circle`,percentage:t.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):t.status===`success`||t.status===`instant`?(h(),s(n,{key:1},[o(` 状态图标 `),u(e,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):t.status===`error`?(h(),a(e,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):o(`v-if`,!0),o(` 操作 `),c(`div`,ye,[t.status===`error`?(h(),a(S(D),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:e=>p(`retry`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:e=>p(`remove`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),o(` 文件名 `),c(`div`,be,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(t.name),1)]),_:2},1024)])],2))),128))])):o(`v-if`,!0)}}),[[`__scopeId`,`data-v-32d39ae9`]]);const Se={class:`c-upload`},Ce={key:0,class:`c-upload__total-progress`},we={class:`c-upload__total-label`};var Te=t(d({__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:M},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:r}){let l=e,d=r,f=v(),{fileList:p,totalPercent:m,addFiles:g,removeFile:_,clearAll:y,startUpload:T,pauseAll:E,resumeAll:D,retryFile:O,processFile:A,getSuccessList:j}=G(l),M=i(()=>p.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),N=e=>({...e}),P=()=>p.value.map(N);function F(e){let t=Math.max(0,Math.trunc(Number(l.maxCount)||0));if(t>0&&p.value.length+e.length>t){d(`exceed`,e,P());let n=t-p.value.length;if(n<=0)return;e=e.slice(0,n)}let n=g(e);d(`change`,P()),n.forEach(e=>void A(e))}function I(e){let t=p.value.find(t=>t.uid===e);t&&(d(`remove`,N(t)),_(e),d(`change`,P()))}function L(e){O(e)}let R=new Map,z=!1;return C(p,e=>{let t=new Set(e.map(e=>e.uid));R.forEach((e,n)=>{t.has(n)||R.delete(n)}),e.forEach(e=>{let t=R.get(e.uid);t&&t.percent!==e.percent&&d(`progress`,N(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&d(`success`,N(e),e.response),t&&t.status!==`error`&&e.status===`error`&&d(`error`,N(e),Error(e.error||`上传失败`)),R.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(z||d(`finish`,P()),z=!0):z=!1},{deep:!0}),t({selectFiles:()=>f.value?.triggerSelect(),startUpload:T,pauseAll:E,resumeAll:D,clearAll:()=>{y(),d(`change`,P())},removeFile:e=>{I(e)},retryFile:O,getFileList:P,getSuccessList:()=>j().map(N),get totalPercent(){return m.value}}),(e,t)=>(h(),s(`div`,Se,[o(` 上传区域 `),u(ie,{ref_key:`uploadAreaRef`,ref:f,accept:l.accept,multiple:l.multiple,directory:l.directory,disabled:l.disabled,draggable:l.draggable,pasteable:l.pasteable,tip:l.tip,onFiles:F},{default:w(()=>[b(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),o(` 总进度条 `),M.value?(h(),s(`div`,Ce,[c(`div`,we,[t[0]||=c(`span`,null,`总进度`,-1),c(`span`,null,x(S(m))+`%`,1)]),u(S(k),{percentage:S(m),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):o(`v-if`,!0),o(` 图片预览模式 `),l.listType===`image`?(h(),a(xe,{key:1,"file-list":S(p),onRemove:I,onRetry:L},null,8,[`file-list`])):l.showFileList&&S(p).length>0?(h(),s(n,{key:2},[o(` 文件列表模式 `),u(he,{"file-list":S(p),"show-thumbnail":l.showThumbnail,onRemove:I,onRetry:L},null,8,[`file-list`,`show-thumbnail`])],2112)):o(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-7674f0c8`]]);export{B as a,I as c,U as i,K as n,z as o,G as r,L as s,Te as t};
|
|
1
|
+
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,TransitionGroup as r,computed as i,createBlock as a,createCommentVNode as o,createElementBlock as s,createElementVNode as c,createTextVNode as l,createVNode as u,defineComponent as d,normalizeClass as f,onBeforeUnmount as p,onMounted as m,openBlock as h,reactive as g,readonly as _,ref as v,renderList as y,renderSlot as b,toDisplayString as x,unref as S,watch as C,withCtx as w,withKeys as T,withModifiers as E}from"vue";import{NButton as D,NEllipsis as O,NProgress as k,NTag as A}from"naive-ui";import j from"spark-md5";const M=2*1024*1024,N={pending:`等待上传`,validating:`校验文件…`,hashing:`计算校验…`,uploading:`上传中…`,success:`上传成功`,error:`上传失败`,paused:`已暂停`,instant:`秒传成功`},P={pending:`default`,validating:`info`,hashing:`info`,uploading:`info`,success:`success`,error:`error`,paused:`warning`,instant:`success`},F={"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 I(e){for(let[t,n]of Object.entries(F))if(t!==`default`&&e.startsWith(t))return n;return F.default}function L(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]}`}const R=()=>new Promise(e=>{typeof requestAnimationFrame==`function`?requestAnimationFrame(()=>e()):setTimeout(e,0)});function z(e){let t=v(0),n=v(0),r=i(()=>t.value>0);async function a(r,i){t.value+=1,n.value=0,i?.(0);let a=new j.ArrayBuffer,o=Math.max(1,Math.trunc(Number(e.value)||1)),s=Math.max(1,Math.ceil(r.size/o));try{if(r.size===0)return a.append(new ArrayBuffer(0)),n.value=100,i?.(100),a.end();for(let e=0;e<s;e+=1){let t=e*o,c=await r.slice(t,t+o).arrayBuffer();a.append(c),n.value=Math.round((e+1)/s*100),i?.(n.value),await R()}return a.end()}finally{t.value=Math.max(0,t.value-1)}}return{hashing:r,hashProgress:_(n),calculateHash:a}}function B(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?e.customRequest.value(s):V(s);t.abortControllers.push(()=>{try{n.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 V(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 H(e){return e instanceof Error?e:Error(String(e))}function U(e){let t=[],n=v(0),r=new Map,i=()=>{n.value=r.size},a=()=>Math.max(1,Math.trunc(Number(e.concurrency.value)||1));function o(){for(;r.size<a()&&t.length>0;){let n=t.shift(),{file:a}=n;if(!a.raw||r.has(a.uid))continue;let s=!1,c=e=>{s||(s=!0,r.delete(a.uid),i(),e?.error?n.onError(a.uid,e.error):e&&`response`in e&&n.onSuccess(a.uid,e.response),o())},l={action:e.action.value,headers:e.headers.value,data:e.data.value,file:a.raw,filename:a.name,onProgress:e=>n.onProgress(a.uid,e),onSuccess:e=>c({response:e}),onError:e=>c({error:e})};r.set(a.uid,{abort:()=>void 0,settle:c}),i();try{let t=e.customRequest?.value?e.customRequest.value(l):W(l),n=r.get(a.uid);n&&(n.abort=t.abort)}catch(e){c({error:H(e)})}}}function s(e,n,r,i){c(e.uid),t.push({file:e,onProgress:n,onSuccess:r,onError:i}),o()}function c(e){for(let n=t.length-1;n>=0;--n)t[n].file.uid===e&&t.splice(n,1);let n=r.get(e);if(n){n.settle();try{n.abort()}catch{}}}function l(){t.length=0;let e=[...r.values()];r.clear(),i(),e.forEach(e=>{e.settle();try{e.abort()}catch{}})}return C(e.concurrency,o),{activeCount:_(n),enqueue:s,abort:c,abortAll:l}}function W(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 G(e){let t=i(()=>e.action??``),n=i(()=>e.headers??{}),r=i(()=>e.data??{}),a=i(()=>{let t=Math.trunc(Number(e.chunkSize));return Number.isFinite(t)&&t>0?t:M}),o=i(()=>{let t=Math.trunc(Number(e.concurrency));return Number.isFinite(t)&&t>0?t:3}),s=i(()=>e.customRequest),c=i(()=>e.instantCheck),l=i(()=>e.uploadedChunksQuery),u=i(()=>e.mergeChunks),d=v((e.defaultFileList??[]).map(e=>({...e}))),f=g(new Set),m=new Map,h=new Set,{hashing:_,hashProgress:y,calculateHash:b}=z(a),x=B({chunkSize:a,concurrency:o,action:t,headers:n,data:r,customRequest:s,uploadedChunksQuery:l,mergeChunks:u}),S=U({concurrency:o,action:t,headers:n,data:r,customRequest:s}),C=i(()=>{let e=d.value;if(e.length===0)return 0;let t=e.reduce((e,t)=>e+t.percent,0);return Math.round(t/e.length)});function w(){return typeof crypto<`u`&&`randomUUID`in crypto?`upload-${crypto.randomUUID()}`:`upload-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function T(e){if(e.type.startsWith(`image/`)){let t=URL.createObjectURL(e);return h.add(t),t}}function E(t){let n=[];for(let r of t){if(Number.isFinite(e.maxCount)&&(e.maxCount??0)>0&&d.value.length+n.length>=Math.trunc(e.maxCount))break;let t={uid:w(),name:r.name,size:r.size,type:r.type,status:`pending`,percent:0,raw:r,thumbUrl:T(r)};n.push(t)}return d.value.push(...n),n}function D(e,t){let n=d.value.find(t=>t.uid===e);n&&Object.assign(n,t)}function O(e){m.set(e,Symbol(e)),x.abortUpload(e),S.abort(e),f.delete(e);let t=d.value.findIndex(t=>t.uid===e);if(t!==-1){let e=d.value[t];j(e.thumbUrl),d.value.splice(t,1)}}function k(){x.abortAll(),S.abortAll(),f.clear(),d.value.forEach(e=>{j(e.thumbUrl)}),d.value=[],m.clear()}async function A(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 j(e){!e||!h.has(e)||(URL.revokeObjectURL(e),h.delete(e))}function N(e,t){return m.get(e)===t&&!f.has(e)&&d.value.some(t=>t.uid===e)}function P(e,t){return b(e.raw,n=>{N(e.uid,t)&&D(e.uid,{percent:n})})}async function F(n){if(!n.raw)return;let r=Symbol(n.uid);m.set(n.uid,r),D(n.uid,{status:`validating`,error:void 0});let i;try{i=await A(n.raw)}catch(e){N(n.uid,r)&&D(n.uid,{status:`error`,error:e instanceof Error?e.message:`文件校验失败`});return}if(N(n.uid,r)){if(!i){D(n.uid,{status:`error`,error:`文件校验未通过`});return}if(i!==n.raw&&(j(n.thumbUrl),Object.assign(n,{raw:i,name:i.name,size:i.size,type:i.type,hash:void 0,chunkProgress:void 0,thumbUrl:T(i)})),!s.value&&!t.value.trim()){D(n.uid,{status:`error`,error:`未配置上传地址`});return}if(c.value&&!n.hash){D(n.uid,{status:`hashing`});try{let e=await P(n,r);if(!N(n.uid,r))return;D(n.uid,{hash:e});let t=await c.value(e,n.raw.name);if(!N(n.uid,r))return;if(t.exists){D(n.uid,{status:`instant`,percent:100,url:t.url});return}}catch{if(!N(n.uid,r))return}}e.chunked&&n.raw.size>a.value?await I(n,r):L(n,r)}}async function I(e,t){let n=e.raw,{hash:r}=e;if(!r){D(e.uid,{status:`hashing`});try{if(r=await P(e,t),!N(e.uid,t))return;D(e.uid,{hash:r})}catch{N(e.uid,t)&&D(e.uid,{status:`error`,error:`Hash 计算失败`});return}}D(e.uid,{status:`uploading`,percent:0}),await x.uploadChunks({uid:e.uid,file:n,hash:r,onProgress:n=>{if(!N(e.uid,t))return;let r=Math.round(n.uploadedBytes/n.totalBytes*100);D(e.uid,{percent:r,chunkProgress:n})},onSuccess:n=>{N(e.uid,t)&&D(e.uid,{status:`success`,percent:100,response:n})},onError:n=>{N(e.uid,t)&&D(e.uid,{status:`error`,error:n.message})},isPaused:()=>f.has(e.uid)})}function L(e,t){D(e.uid,{status:`uploading`,percent:0}),S.enqueue(e,(e,n)=>{N(e,t)&&D(e,{percent:n})},(e,n)=>{N(e,t)&&D(e,{status:`success`,percent:100,response:n})},(e,n)=>{N(e,t)&&D(e,{status:`error`,error:n.message})})}function R(){d.value.filter(e=>e.status===`pending`).forEach(e=>void F(e))}function V(){d.value.forEach(e=>{(e.status===`uploading`||e.status===`hashing`||e.status===`validating`)&&(f.add(e.uid),m.set(e.uid,Symbol(e.uid)),x.abortUpload(e.uid),S.abort(e.uid),D(e.uid,{status:`paused`}))})}function H(){d.value.forEach(e=>{e.status===`paused`&&(f.delete(e.uid),D(e.uid,{status:`pending`}))}),R()}function W(e){let t=d.value.find(t=>t.uid===e);t&&t.status===`error`&&(D(e,{status:`pending`,percent:0,error:void 0}),F(t))}function G(){return d.value.filter(e=>e.status===`success`||e.status===`instant`)}return p(()=>{x.abortAll(),S.abortAll(),m.clear(),d.value.forEach(e=>{j(e.thumbUrl)})}),{fileList:d,totalPercent:C,hashing:_,hashProgress:y,addFiles:E,removeFile:O,clearAll:k,startUpload:R,pauseAll:V,resumeAll:H,retryFile:W,processFile:F,getSuccessList:G}}function K(e,t,n,r,i){let a=v(!1),o=null,s=!1;function c(e){t.value&&(e.preventDefault(),a.value=!0)}function l(e){t.value&&(e.preventDefault(),a.value=!0)}function u(n){if(!t.value)return;n.preventDefault();let r=e.value;r&&!r.contains(n.relatedTarget)&&(a.value=!1)}async function d(e){if(!t.value)return;e.preventDefault(),a.value=!1;let n=e.dataTransfer?.items;if(!n)return;let o=await ee(n,e.dataTransfer);if(s||!t.value)return;let c=J(o,r.value);c.length>0&&i(c)}function f(e){if(!n.value)return;let t=e.clipboardData?.items;if(!t)return;let a=[];for(let e=0;e<t.length;e++){let n=t[e];if(n.kind===`file`){let e=n.getAsFile();e&&a.push(e)}}let o=J(a,r.value);o.length>0&&(e.preventDefault(),i(o))}function h(){let t=e.value;!t||o===t||(o=t,t.addEventListener(`dragenter`,c),t.addEventListener(`dragover`,l),t.addEventListener(`dragleave`,u),t.addEventListener(`drop`,d),n.value&&t.addEventListener(`paste`,f))}function g(){let e=o;e&&(e.removeEventListener(`dragenter`,c),e.removeEventListener(`dragover`,l),e.removeEventListener(`dragleave`,u),e.removeEventListener(`drop`,d)),e?.removeEventListener(`paste`,f),o=null}return m(()=>{s=!1,h()}),p(()=>{s=!0,g()}),C([e,t,n],()=>{g(),h()}),{isDragOver:_(a)}}async function ee(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(q))).flat();let r=[],i=t?.files;if(i)for(let e=0;e<i.length;e++)r.push(i[e]);return r}async function q(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(q))).flat()}return[]}function J(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 Y=[`tabindex`,`aria-disabled`,`onKeydown`],X=[`accept`,`multiple`,`webkitdirectory`,`disabled`],Z={class:`upload-area__default`},Q={class:`upload-area__text`},te={key:0},ne={key:1},re={key:0,class:`upload-area__tip`};var ie=t(d({__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(t,{expose:r,emit:a}){let d=t,p=a,m=v(),g=v(),{isDragOver:_}=K(m,i(()=>d.draggable&&!d.disabled),i(()=>d.pasteable&&!d.disabled),i(()=>d.accept),e=>p(`files`,e));function y(){d.disabled||g.value?.click()}function C(e){let t=e.target,n=d.disabled?[]:J(Array.from(t.files??[]),d.accept);n.length>0&&p(`files`,n),t.value=``}return r({triggerSelect:y}),(r,i)=>(h(),s(`div`,{ref_key:`areaRef`,ref:m,class:f([`upload-area`,{"upload-area--drag-over":S(_),"upload-area--disabled":t.disabled}]),role:`button`,tabindex:t.disabled?-1:0,"aria-disabled":t.disabled,onClick:y,onKeydown:[T(E(y,[`prevent`]),[`enter`]),T(E(y,[`prevent`]),[`space`])]},[c(`input`,{ref_key:`inputRef`,ref:g,type:`file`,class:`upload-area__input`,accept:t.accept,multiple:t.multiple,webkitdirectory:t.directory||void 0,disabled:t.disabled,onClick:i[0]||=E(()=>{},[`stop`]),onChange:C},null,40,X),b(r.$slots,`default`,{},()=>[c(`div`,Z,[u(e,{name:S(_)?`mdi:cloud-download-outline`:`mdi:cloud-upload-outline`,class:`upload-area__icon`},null,8,[`name`]),c(`div`,Q,[S(_)?(h(),s(`span`,te,`释放文件到此处`)):(h(),s(`span`,ne,[i[4]||=l(` 点击或拖拽文件到此区域上传 `,-1),t.pasteable?(h(),s(n,{key:0},[i[1]||=l(` ,支持 `,-1),i[2]||=c(`kbd`,null,`Ctrl+V`,-1),i[3]||=l(` 粘贴 `,-1)],64)):o(`v-if`,!0)]))]),t.tip?(h(),s(`div`,re,x(t.tip),1)):o(`v-if`,!0)])],!0)],42,Y))}}),[[`__scopeId`,`data-v-705892ab`]]);const ae={class:`file-list__thumb`},oe=[`src`,`alt`],se={class:`file-list__info`},ce={class:`file-list__name`},le={class:`file-list__meta`},ue={class:`file-list__size`},de={key:0,class:`file-list__instant`},fe={key:1,class:`file-list__chunk-info`},pe={key:2,class:`file-list__error`},me={class:`file-list__actions`};var he=t(d({__name:`FileList`,props:{fileList:{},showThumbnail:{type:Boolean}},emits:[`remove`,`retry`],setup(t,{emit:i}){let d=i;return(i,p)=>(h(),a(r,{name:`file-list`,tag:`div`,class:`file-list`},{default:w(()=>[(h(!0),s(n,null,y(t.fileList,n=>(h(),s(`div`,{key:n.uid,class:f([`file-list__item`,`file-list__item--${n.status}`])},[o(` 缩略图 / 图标 `),c(`div`,ae,[t.showThumbnail&&n.thumbUrl?(h(),s(`img`,{key:0,src:n.thumbUrl,alt:n.name,class:`file-list__thumb-img`},null,8,oe)):(h(),a(e,{key:1,name:S(I)(n.type),class:`file-list__thumb-icon`},null,8,[`name`]))]),o(` 文件信息 `),c(`div`,se,[c(`div`,ce,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(n.name),1)]),_:2},1024)]),c(`div`,le,[c(`span`,ue,x(S(L)(n.size)),1),u(S(A),{type:S(P)[n.status]||`default`,size:`tiny`,bordered:!1},{default:w(()=>[l(x(S(N)[n.status]||n.status),1)]),_:2},1032,[`type`]),n.status===`instant`?(h(),s(`span`,de,` ⚡ `)):o(`v-if`,!0)]),o(` 进度条 `),n.status===`uploading`||n.status===`hashing`?(h(),a(S(k),{key:0,percentage:n.percent,height:4,"border-radius":2,"show-indicator":!1,status:n.status===`hashing`?`info`:`success`},null,8,[`percentage`,`status`])):o(`v-if`,!0),o(` 分片进度描述 `),n.chunkProgress&&n.status===`uploading`?(h(),s(`div`,fe,` 分片 `+x(n.chunkProgress.uploadedChunks)+`/`+x(n.chunkProgress.totalChunks),1)):o(`v-if`,!0),o(` 错误信息 `),n.status===`error`&&n.error?(h(),s(`div`,pe,x(n.error),1)):o(`v-if`,!0)]),o(` 操作按钮 `),c(`div`,me,[n.status===`error`?(h(),a(S(D),{key:0,text:``,type:`warning`,size:`tiny`,"aria-label":`重试上传`,onClick:e=>d(`retry`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{text:``,type:`error`,size:`tiny`,"aria-label":`移除文件`,onClick:e=>d(`remove`,n.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])],2))),128))]),_:1}))}}),[[`__scopeId`,`data-v-04f26012`]]);const ge={key:0,class:`image-preview`},_e=[`src`,`alt`],$={class:`image-preview__overlay`},ve={key:0,class:`image-preview__progress`},ye={class:`image-preview__actions`},be={class:`image-preview__name`};var xe=t(d({__name:`ImagePreview`,props:{fileList:{}},emits:[`remove`,`retry`],setup(t,{emit:r}){let d=t,p=r,m=i(()=>d.fileList.filter(e=>e.type?.startsWith(`image/`)));return(t,r)=>m.value.length>0?(h(),s(`div`,ge,[(h(!0),s(n,null,y(m.value,t=>(h(),s(`div`,{key:t.uid,class:f([`image-preview__item`,`image-preview__item--${t.status}`])},[t.thumbUrl?(h(),s(`img`,{key:0,src:t.thumbUrl,alt:t.name,class:`image-preview__img`},null,8,_e)):o(`v-if`,!0),o(` 遮罩层 `),c(`div`,$,[o(` 上传中进度 `),t.status===`uploading`||t.status===`hashing`?(h(),s(`div`,ve,[u(S(k),{type:`circle`,percentage:t.percent,"stroke-width":3,style:{width:`40px`}},null,8,[`percentage`])])):t.status===`success`||t.status===`instant`?(h(),s(n,{key:1},[o(` 状态图标 `),u(e,{name:`mdi:check-circle`,class:`image-preview__status-icon image-preview__status-icon--success`})],2112)):t.status===`error`?(h(),a(e,{key:2,name:`mdi:alert-circle`,class:`image-preview__status-icon image-preview__status-icon--error`})):o(`v-if`,!0),o(` 操作 `),c(`div`,ye,[t.status===`error`?(h(),a(S(D),{key:0,circle:``,size:`tiny`,type:`warning`,"aria-label":`重试上传`,onClick:e=>p(`retry`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:refresh`})]),_:1},8,[`onClick`])):o(`v-if`,!0),u(S(D),{circle:``,size:`tiny`,type:`error`,"aria-label":`移除文件`,onClick:e=>p(`remove`,t.uid)},{icon:w(()=>[u(e,{name:`mdi:close`})]),_:1},8,[`onClick`])])]),o(` 文件名 `),c(`div`,be,[u(S(O),{"line-clamp":1},{default:w(()=>[l(x(t.name),1)]),_:2},1024)])],2))),128))])):o(`v-if`,!0)}}),[[`__scopeId`,`data-v-32d39ae9`]]);const Se={class:`c-upload`},Ce={key:0,class:`c-upload__total-progress`},we={class:`c-upload__total-label`};var Te=t(d({__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:M},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:r}){let l=e,d=r,f=v(),{fileList:p,totalPercent:m,addFiles:g,removeFile:_,clearAll:y,startUpload:T,pauseAll:E,resumeAll:D,retryFile:O,processFile:A,getSuccessList:j}=G(l),M=i(()=>p.value.some(e=>e.status===`uploading`||e.status===`hashing`||e.status===`validating`)),N=e=>({...e}),P=()=>p.value.map(N);function F(e){let t=Math.max(0,Math.trunc(Number(l.maxCount)||0));if(t>0&&p.value.length+e.length>t){d(`exceed`,e,P());let n=t-p.value.length;if(n<=0)return;e=e.slice(0,n)}let n=g(e);d(`change`,P()),n.forEach(e=>void A(e))}function I(e){let t=p.value.find(t=>t.uid===e);t&&(d(`remove`,N(t)),_(e),d(`change`,P()))}function L(e){O(e)}let R=new Map,z=!1;return C(p,e=>{let t=new Set(e.map(e=>e.uid));R.forEach((e,n)=>{t.has(n)||R.delete(n)}),e.forEach(e=>{let t=R.get(e.uid);t&&t.percent!==e.percent&&d(`progress`,N(e),e.percent),t&&t.status!==e.status&&(e.status===`success`||e.status===`instant`)&&d(`success`,N(e),e.response),t&&t.status!==`error`&&e.status===`error`&&d(`error`,N(e),Error(e.error||`上传失败`)),R.set(e.uid,{status:e.status,percent:e.percent})}),e.length>0&&e.every(e=>e.status===`success`||e.status===`instant`||e.status===`error`)?(z||d(`finish`,P()),z=!0):z=!1,d(`change`,P())},{deep:!0}),t({selectFiles:()=>f.value?.triggerSelect(),startUpload:T,pauseAll:E,resumeAll:D,clearAll:()=>{y(),d(`change`,P())},removeFile:e=>{I(e)},retryFile:O,getFileList:P,getSuccessList:()=>j().map(N),get totalPercent(){return m.value}}),(e,t)=>(h(),s(`div`,Se,[o(` 上传区域 `),u(ie,{ref_key:`uploadAreaRef`,ref:f,accept:l.accept,multiple:l.multiple,directory:l.directory,disabled:l.disabled,draggable:l.draggable,pasteable:l.pasteable,tip:l.tip,onFiles:F},{default:w(()=>[b(e.$slots,`area`,{},void 0,!0)]),_:3},8,[`accept`,`multiple`,`directory`,`disabled`,`draggable`,`pasteable`,`tip`]),o(` 总进度条 `),M.value?(h(),s(`div`,Ce,[c(`div`,we,[t[0]||=c(`span`,null,`总进度`,-1),c(`span`,null,x(S(m))+`%`,1)]),u(S(k),{percentage:S(m),height:6,"border-radius":3,"show-indicator":!1,status:`success`},null,8,[`percentage`])])):o(`v-if`,!0),o(` 图片预览模式 `),l.listType===`image`?(h(),a(xe,{key:1,"file-list":S(p),onRemove:I,onRetry:L},null,8,[`file-list`])):l.showFileList&&S(p).length>0?(h(),s(n,{key:2},[o(` 文件列表模式 `),u(he,{"file-list":S(p),"show-thumbnail":l.showThumbnail,onRemove:I,onRetry:L},null,8,[`file-list`,`show-thumbnail`])],2112)):o(`v-if`,!0)]))}}),[[`__scopeId`,`data-v-58ca8e42`]]);export{B as a,I as c,U as i,K as n,z as o,G as r,L as s,Te as t};
|
package/dist/C_VideoPlayer2.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`),t=require(`./storage.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i=[.5,.75,1,1.25,1.5,2,3],a=.75,o=3e4,s=5e3,c={"360p":`流畅 360P`,"480p":`标清 480P`,"720p":`高清 720P`,"1080p":`超清 1080P`,"1440p":`2K 1440P`,"4K":`4K 超高清`},l={".mp4":`mp4`,".m3u8":`hls`,".mpd":`dash`,".flv":`flv`},u={SPACE:`播放/暂停`,ARROW_LEFT:`快退 5 秒`,ARROW_RIGHT:`快进 5 秒`,ARROW_UP:`音量增加 10%`,ARROW_DOWN:`音量减少 10%`,F:`全屏/退出全屏`,M:`静音/取消静音`,ESC:`退出全屏`},d=.1,f=`c_video_player_`,p={VOLUME:`${f}volume`,PLAYBACK_RATE:`${f}playback_rate`,PROGRESS:`${f}progress_`,BOOKMARKS:`${f}bookmarks_`},m={READY:`ready`,PLAY:`play`,PAUSE:`pause`,ENDED:`ended`,ERROR:`error`,SEEKING:`seeking`,SEEKED:`seeked`,TIME_UPDATE:`timeupdate`,WAITING:`waiting`,DURATION_CHANGE:`durationchange`,RATE_CHANGE:`ratechange`,FULLSCREEN_CHANGE:`fullscreen_change`,DEFINITION_CHANGE:`definition_change`,BEFORE_DEFINITION_CHANGE:`before_definition_change`,AFTER_DEFINITION_CHANGE:`after_definition_change`},h={fontSize:14,color:`rgba(150, 150, 150, 0.15)`,rotate:-25,gap:120};function g(e){try{let{pathname:t}=new URL(e,location.href);return l[t.slice(t.lastIndexOf(`.`)).toLowerCase()]??`mp4`}catch{return`mp4`}}function _(e){let t=(0,n.ref)(null),r=(0,n.shallowRef)(null),i=(0,n.ref)(`idle`),o=(0,n.ref)(0),s=(0,n.ref)(0),c=(0,n.ref)(!1),l=0,u=!1;function d(){return{el:t.value,url:e.url,width:e.width??`100%`,height:e.height??`100%`,fluid:e.fluid!==!1,fitVideoSize:`fixWidth`,poster:e.poster??``,playsinline:!0,videoAttributes:{crossOrigin:`anonymous`},lang:e.lang??`zh-cn`,inactive:3e3}}function f(){return{autoplay:e.autoplay??!1,autoplayMuted:e.autoplayMuted??!1,loop:e.loop??!1,volume:e.volume??a,startTime:e.startTime??0,defaultPlaybackRate:e.defaultPlaybackRate??1,playbackRate:e.playbackRates?{list:e.playbackRates.map(e=>e)}:!0}}function p(){return{pip:e.pip!==!1,screenShot:e.screenshot??!1,mini:e.miniPlayer??!1,fullscreen:e.fullscreen!==!1,cssFullscreen:e.cssFullscreen!==!1,keyShortcut:!1}}function h(t){e.thumbnail&&(t.thumbnail={urls:e.thumbnail.urls,pic_num:e.thumbnail.picNum,col:e.thumbnail.col,row:e.thumbnail.row,width:e.thumbnail.width,height:e.thumbnail.height}),e.qualityList?.length&&(t.definition={list:e.qualityList.map(e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate})),defaultDefinition:e.defaultQuality??e.qualityList[0].label}),e.playerOptions&&Object.assign(t,e.playerOptions)}function _(){let t=e.sourceType??g(e.url),n={...d(),...f(),...p()};return h(n),n.__sourceType=t,n}async function v(){if(u||!t.value)return;let e=++l;i.value=`loading`;let n=_(),a=n.__sourceType;delete n.__sourceType;let d;try{if(a===`hls`){let{default:e}=await import(`xgplayer-hls`);d=e}else{let{default:e}=await import(`xgplayer`);d=e}if(u||e!==l||!t.value)return;r.value=new d(n)}catch(t){if(u||e!==l)return;throw i.value=`error`,t}let f=r.value;f.on(m.READY,()=>{i.value=`ready`}),f.on(m.PLAY,()=>{i.value=`playing`}),f.on(m.PAUSE,()=>{i.value=`paused`}),f.on(m.ENDED,()=>{i.value=`ended`}),f.on(m.ERROR,()=>{i.value=`error`}),f.on(m.TIME_UPDATE,()=>{o.value=f.currentTime??0,s.value=f.duration??0}),f.on(m.DURATION_CHANGE,()=>{s.value=f.duration??0}),f.on(m.FULLSCREEN_CHANGE,e=>{c.value=e})}function y(){l++;let e=r.value;e&&(e.destroy(),r.value=null),i.value=`idle`,o.value=0,s.value=0,c.value=!1}return(0,n.onBeforeUnmount)(()=>{u=!0,y()}),{containerRef:t,playerRef:r,playerState:i,currentTime:o,duration:s,isFullscreen:c,initPlayer:v,destroyPlayer:y}}function v(e){let r=(0,n.ref)(y()),i=(0,n.ref)(b()),a=(0,n.ref)(!1);function o(){e.value?.play()}function s(){e.value?.pause()}function c(){let t=e.value;t&&(t.paused?t.play():t.pause())}function l(t){let n=e.value;n&&(n.currentTime=Math.max(0,Math.min(t,n.duration??0)))}function u(n){let i=e.value;if(!i)return;let o=Math.max(0,Math.min(1,n));i.volume=o,r.value=o,a.value=o===0,t.i(p.VOLUME,o)}function d(){let t=e.value;t&&(a.value?u(r.value>0?r.value:.5):(t.volume=0,a.value=!0))}function f(n){let r=e.value;r&&(r.playbackRate=n,i.value=n,t.i(p.PLAYBACK_RATE,n))}function m(){let t=e.value;t&&(t.volume=r.value,t.playbackRate=i.value,a.value=r.value===0)}return(0,n.watch)(e,e=>{e&&m()}),{volume:r,playbackRate:i,isMuted:a,play:o,pause:s,togglePlay:c,seek:l,setVolume:u,toggleMute:d,setPlaybackRate:f}}function y(){let e=Number(t.t(p.VOLUME));return Number.isFinite(e)&&e>=0&&e<=1?e:.75}function b(){let e=Number(t.t(p.PLAYBACK_RATE));return Number.isFinite(e)&&e>0?e:1}function x(e,r,i,a,c,l){let u=(0,n.ref)(0),d=(0,n.ref)(0),f=0,m=!1,h=null,g=null;function _(){return p.PROGRESS+encodeURIComponent(a.value)}function v(){let e=t.t(_());return!e||typeof e!=`object`?0:(u.value=S(e.watchedDuration),d.value=Math.min(100,S(e.completionPercent)),S(e.currentTime))}function y(){return{currentTime:r.value,duration:i.value,watchedDuration:u.value,completionPercent:d.value,updatedAt:Date.now()}}function b(){t.i(_(),y())}function x(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function C(){x(c,y()),b()}function w(){if(!m)return;let e=performance.now();if(f>0){let t=(e-f)/1e3;t>0&&t<5&&(u.value+=t)}f=e,i.value>0&&(d.value=Math.min(100,Math.round(u.value/i.value*100)))}function T(){let e=l?.heartbeatInterval??o;!Number.isFinite(e)||e<=0||(h=setInterval(()=>{m&&x(l?.onHeartbeat,y())},e))}function E(){g=setInterval(()=>{m&&C()},s)}function D(){let e=y();b(),x(c,e)}function O(){if(document.hidden)w(),C(),m=!1;else{let t=e.value;t&&!t.paused&&(m=!0,f=performance.now())}}function k(){j(),T(),E(),window.addEventListener(`beforeunload`,D),document.addEventListener(`visibilitychange`,O)}function A(){m=!1,j(),b()}function j(){h&&=(clearInterval(h),null),g&&=(clearInterval(g),null),window.removeEventListener(`beforeunload`,D),document.removeEventListener(`visibilitychange`,O)}function M(){m=!0,f=performance.now()}function N(){w(),m=!1,f=0,b()}function P(){w()}return(0,n.watch)(e,e=>{e?k():j()}),(0,n.onBeforeUnmount)(()=>{A()}),{watchedDuration:u,completionPercent:d,getProgressData:y,restoreProgress:v,saveProgress:b,startTracking:k,stopTracking:A,onPlay:M,onPause:N,onTimeUpdate:P}}function S(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function C(e,t=[]){let r=(0,n.ref)(null),i=(0,n.ref)(!1);function a(e){e.on(m.AFTER_DEFINITION_CHANGE,e=>{r.value=e.to,i.value=!1}),e.on(m.BEFORE_DEFINITION_CHANGE,()=>{i.value=!0})}function o(n){let r=e.value;if(!r||!t.length)return;let a=t.find(e=>e.label===n);if(!a){console.warn(`[C_VideoPlayer] 未找到清晰度: ${n}`);return}i.value=!0,r.changeDefinition?.({url:a.url,definition:a.label,text:{zh:a.label,en:a.label},bitrate:a.bitrate})}return{currentQuality:r,isSwitching:i,switchQuality:o,bindEvents:a}}function w(e,t,r,i){let a=(0,n.computed)(()=>{if(!e.value.length)return null;let n=t.value;return e.value.find(e=>n>=e.startTime&&n<e.endTime)??null}),o=(0,n.computed)(()=>a.value?e.value.findIndex(e=>e.id===a.value.id):-1),s=(0,n.computed)(()=>!r.value||!e.value.length?[]:e.value.map(e=>({...e,startPercent:e.startTime/r.value*100,endPercent:e.endTime/r.value*100,widthPercent:(e.endTime-e.startTime)/r.value*100})));function c(t){let n=e.value.find(e=>e.id===t);n&&i(n.startTime)}function l(){let t=o.value;t>0&&i(e.value[t-1].startTime)}function u(){let t=o.value;t>=0&&t<e.value.length-1&&i(e.value[t+1].startTime)}return{currentChapter:a,currentChapterIndex:o,chapterMarkers:s,goToChapter:c,prevChapter:l,nextChapter:u}}function T(e,r,i,a=[]){let o=(0,n.ref)([...a]);function s(){return p.BOOKMARKS+encodeURIComponent(e.value)}function c(){let e=t.t(s());Array.isArray(e)&&(o.value=e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.time==`number`&&Number.isFinite(e.time)&&typeof e.note==`string`&&typeof e.createdAt==`number`),u())}function l(){t.i(s(),o.value)}function u(){o.value.sort((e,t)=>e.time-t.time)}function d(e=``){let t={id:typeof crypto<`u`&&`randomUUID`in crypto?`bm_${crypto.randomUUID()}`:`bm_${Date.now()}_${o.value.length}`,time:r.value,note:e,createdAt:Date.now()};return o.value.push(t),u(),l(),t}function f(e){let t=o.value.findIndex(t=>t.id===e);t!==-1&&(o.value.splice(t,1),l())}function m(e,t){let n=o.value.find(t=>t.id===e);n&&(n.note=t,l())}function h(e){let t=o.value.find(t=>t.id===e);t&&i(t.time)}function g(){o.value=[],l()}return a.length||c(),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:m,goToBookmark:h,clearBookmarks:g}}function E(e,t,r){let i=(0,n.ref)(0),a=(0,n.ref)(!0),o=(0,n.ref)(!1),s=(0,n.ref)(r?.watermark??!1),c=(0,n.ref)(r?.watermarkText??``);function l(e){e>i.value&&(i.value=e)}function u(e){!r?.preventSeekOnFirstWatch||!a.value||(e.currentTime??0)>i.value+2&&(e.currentTime=i.value)}function d(){if(!r?.focusDetection)return;let t=e.value;t&&(document.hidden?(o.value=!0,t.paused||t.pause()):o.value=!1)}function f(e){r?.preventSeekOnFirstWatch&&e.on(m.SEEKING,()=>u(e)),e.on(m.TIME_UPDATE,()=>{l(t.value)}),r?.focusDetection&&document.addEventListener(`visibilitychange`,d)}function p(){a.value=!1}function h(e){c.value=e}return(0,n.onBeforeUnmount)(()=>{document.removeEventListener(`visibilitychange`,d)}),{maxWatchedTime:i,isFirstWatch:a,isBlurred:o,showWatermark:s,watermarkText:c,bindEvents:f,markAsWatched:p,setWatermarkText:h}}function D(e){let t=e.trim().split(`:`);return t.length===3?Number(t[0])*3600+Number(t[1])*60+Number(t[2]):Number(t[0])*60+Number(t[1])}function O(e){let t=[],n=e.trim().split(/\n\s*\n/);for(let e of n){let n=e.trim().split(`
|
|
2
|
-
`)
|
|
3
|
-
`).replace(/<[^>]+>/g,``).trim();c&&t.push({start:o,end:s,text:c})}return t}function k(e,t=[],r=(0,n.ref)(0)){let i=(0,n.ref)(null),a=(0,n.ref)([...t]),o=(0,n.ref)({}),s=(0,n.ref)(!1),c=(0,n.computed)(()=>{if(!i.value)return``;let e=o.value[i.value];if(!e?.length)return``;let t=r.value;return e.find(e=>t>=e.start&&t<e.end)?.text??``}),l=(0,n.computed)(()=>a.value.length>0);async function u(e){if(o.value[e])return o.value[e];let t=a.value.find(t=>t.language===e);if(!t)return[];s.value=!0;try{let n=await fetch(t.src);if(!n.ok)return console.warn(`[C_VideoPlayer] 字幕加载失败: ${t.src} (${n.status})`),[];let r=O(await n.text());return o.value[e]=r,r}catch(e){return console.warn(`[C_VideoPlayer] 字幕加载异常:`,e),[]}finally{s.value=!1}}async function d(){if(!a.value.length)return;let e=a.value.find(e=>e.default)??a.value[0];await u(e.language),i.value=e.language}async function f(e){if(!a.value.find(t=>t.language===e)){console.warn(`[C_VideoPlayer] 未找到字幕轨道: ${e}`);return}await u(e),i.value=e}function p(){i.value=null}function m(){if(i.value)p();else{let e=a.value.find(e=>e.default)??a.value[0];e&&f(e.language)}}return{activeLanguage:i,subtitleList:a,currentText:c,hasSubtitles:l,isLoading:s,initSubtitles:d,switchSubtitle:f,closeSubtitle:p,toggleSubtitle:m}}function A(e,t,r){let i=(0,n.ref)(null),a=(0,n.ref)(new Set),o=(0,n.ref)(``),s=(0,n.ref)(!1),c=(0,n.ref)(!1);function l(){if(i.value||!r.value.length)return;let e=t.value,n=r.value.find(t=>!a.value.has(t.id)&&Math.abs(e-t.triggerTime)<1);n&&u(n)}function u(t){i.value=t,o.value=t.type===`multiple`?[]:``,s.value=!1,c.value=!1,e.value?.pause()}function d(){if(!i.value)return!1;let e=i.value,t=m(e,o.value);return c.value=t,s.value=!0,(t||!e.required)&&a.value.add(e.id),t}function f(){if(!i.value)return;let t=i.value;t.required&&!a.value.has(t.id)||(i.value=null,s.value=!1,o.value=``,e.value?.play())}function p(){i.value&&(o.value=i.value.type===`multiple`?[]:``,s.value=!1,c.value=!1)}function m(e,t){if(e.type===`multiple`){let n=Array.isArray(t)?[...t].sort():[t],r=Array.isArray(e.answer)?[...e.answer].sort():[e.answer];return n.length===r.length&&n.every((e,t)=>e===r[t])}return t===e.answer}return(0,n.watch)(t,()=>{l()}),{activeQuiz:i,completedQuizIds:a,selectedAnswer:o,showResult:s,lastAnswerCorrect:c,submitAnswer:d,closeQuiz:f,retryQuiz:p}}function j(e,t){let r=(0,n.ref)(!1),i=null;function a(){!e.value||!t.value||(i=new IntersectionObserver(([e])=>{r.value=!e.isIntersecting},{threshold:.3}),i.observe(e.value))}function o(){i&&=(i.disconnect(),null),r.value=!1}function s(){e.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function c(){r.value=!1,o()}return(0,n.onBeforeUnmount)(()=>{o()}),{isMiniMode:r,initObserver:a,destroyObserver:o,scrollToPlayer:s,closeMiniPlayer:c}}function M(e,t,r={}){let{enabled:i=!0,onToggleFullscreen:a}=r,o={" ":(e,t)=>{e.preventDefault(),t.paused?t.play():t.pause()},ArrowLeft:(e,t)=>{e.preventDefault(),t.currentTime=Math.max(0,(t.currentTime??0)-5)},ArrowRight:(e,t)=>{e.preventDefault(),t.currentTime=Math.min(t.duration??0,(t.currentTime??0)+5)},ArrowUp:(e,t)=>{e.preventDefault(),t.volume=Math.min(1,(t.volume??0)+d)},ArrowDown:(e,t)=>{e.preventDefault(),t.volume=Math.max(0,(t.volume??0)-d)},f:e=>{e.preventDefault(),a?.()},F:e=>{e.preventDefault(),a?.()},m:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75},M:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75}};function s(t){if(!i)return;let n=e.value;if(!n)return;let r=t.target;if(r.tagName===`INPUT`||r.tagName===`TEXTAREA`||r.isContentEditable)return;let a=o[t.key];a?.(t,n)}function c(){i&&t.value?.addEventListener(`keydown`,s)}function l(){t.value?.removeEventListener(`keydown`,s)}return(0,n.onBeforeUnmount)(()=>{l()}),{startListening:c,stopListening:l}}function N(e,t){function n(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function r(e,r){t(n(e,r))}let i=()=>r(`play`),a=()=>r(`pause`),o=()=>r(`ended`),s=()=>r(`seek`),c=()=>r(`error`),l=()=>r(`buffer`),u=e=>{r(`fullscreen`,{isFullscreen:e})},d=e=>{r(`quality_change`,e)},f=()=>{r(`speed_change`,{rate:e.playbackRate})};e.on(m.PLAY,i),e.on(m.PAUSE,a),e.on(m.ENDED,o),e.on(m.SEEKED,s),e.on(m.ERROR,c),e.on(m.WAITING,l),e.on(m.FULLSCREEN_CHANGE,u),e.on(m.DEFINITION_CHANGE,d),e.on(m.RATE_CHANGE,f);function p(){e.off(m.PLAY,i),e.off(m.PAUSE,a),e.off(m.ENDED,o),e.off(m.SEEKED,s),e.off(m.ERROR,c),e.off(m.WAITING,l),e.off(m.FULLSCREEN_CHANGE,u),e.off(m.DEFINITION_CHANGE,d),e.off(m.RATE_CHANGE,f)}return{report:r,destroy:p}}const P={key:0,class:`vp-control-bar`},F={class:`vp-control-bar__left`},I={class:`vp-control-bar__center`},L={class:`vp-control-bar__right`},R=(0,n.defineComponent)({__name:`ControlBar`,props:{visible:{type:Boolean,default:!0}},setup(e){return(t,r)=>e.visible?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,P,[(0,n.createElementVNode)(`div`,F,[(0,n.renderSlot)(t.$slots,`left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,I,[(0,n.renderSlot)(t.$slots,`center`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,L,[(0,n.renderSlot)(t.$slots,`right`,{},void 0,!0)])])):(0,n.createCommentVNode)(`v-if`,!0)}});var ee=e.t(R,[[`__scopeId`,`data-v-e8b787cf`]]);const z={key:0,class:`vp-subtitle-overlay`},B={class:`vp-subtitle-text`},V={key:0,class:`vp-subtitle-toggle`},H={class:`vp-subtitle-menu`},U=[`onClick`],W=(0,n.defineComponent)({__name:`SubtitleOverlay`,props:{text:{},tracks:{},activeLanguage:{}},emits:[`switch`,`close`],setup(e){return(t,i)=>{let a=r.NButton,o=r.NPopover;return(0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,null,[(0,n.createCommentVNode)(` 字幕文本 `),(0,n.createVNode)(n.Transition,{name:`vp-subtitle-fade`},{default:(0,n.withCtx)(()=>[e.text?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,z,[(0,n.createElementVNode)(`span`,B,(0,n.toDisplayString)(e.text),1)])):(0,n.createCommentVNode)(`v-if`,!0)]),_:1}),(0,n.createCommentVNode)(` 字幕切换按钮(叠加在播放器控制栏上方) `),e.tracks.length?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,V,[(0,n.createVNode)(o,{trigger:`click`,placement:`top`,"show-arrow":!1},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(a,{quaternary:``,size:`small`,class:(0,n.normalizeClass)([`vp-subtitle-btn`,{"is-active":!!e.activeLanguage}])},{default:(0,n.withCtx)(()=>[...i[1]||=[(0,n.createTextVNode)(` 字幕 `,-1)]]),_:1},8,[`class`])]),default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,H,[(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`vp-subtitle-menu__item`,{"is-active":!e.activeLanguage}]),onClick:i[0]||=e=>t.$emit(`close`)},` 关闭字幕 `,2),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.tracks,r=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:r.language,class:(0,n.normalizeClass)([`vp-subtitle-menu__item`,{"is-active":e.activeLanguage===r.language}]),onClick:e=>t.$emit(`switch`,r.language)},(0,n.toDisplayString)(r.label),11,U))),128))])]),_:1})])):(0,n.createCommentVNode)(`v-if`,!0)],64)}}});var G=e.t(W,[[`__scopeId`,`data-v-20ac6438`]]);const K={key:0,class:`vp-chapter-markers`},q={key:0,class:`vp-chapter-current`},J={class:`vp-chapter-index`},Y={class:`vp-chapter-title`},X={class:`vp-chapter-list`},Z=[`onClick`],Q={class:`vp-chapter-item-index`},te={class:`vp-chapter-item-title`},ne={class:`vp-chapter-item-time`},re=(0,n.defineComponent)({__name:`ChapterMarkers`,props:{chapters:{},currentChapter:{},currentIndex:{}},emits:[`goTo`],setup(e){function t(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(i,a)=>{let o=r.NButton,s=r.NPopover;return e.chapters.length?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,K,[(0,n.createCommentVNode)(` 当前章节信息 `),e.currentChapter?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,q,[(0,n.createElementVNode)(`span`,J,(0,n.toDisplayString)(e.currentIndex+1)+`/`+(0,n.toDisplayString)(e.chapters.length),1),(0,n.createElementVNode)(`span`,Y,(0,n.toDisplayString)(e.currentChapter.title),1)])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 章节列表面板 `),(0,n.createVNode)(s,{trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(o,{quaternary:``,size:`small`,class:`vp-chapter-trigger`},{icon:(0,n.withCtx)(()=>[...a[0]||=[(0,n.createElementVNode)(`span`,{class:`vp-chapter-icon`},`☰`,-1)]]),default:(0,n.withCtx)(()=>[a[1]||=(0,n.createTextVNode)(` 章节 `,-1)]),_:1})]),default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,X,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.chapters,(r,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:r.id,class:(0,n.normalizeClass)([`vp-chapter-item`,{"is-active":r.id===e.currentChapter?.id}]),onClick:e=>i.$emit(`goTo`,r.id)},[(0,n.createElementVNode)(`span`,Q,(0,n.toDisplayString)(a+1),1),(0,n.createElementVNode)(`span`,te,(0,n.toDisplayString)(r.title),1),(0,n.createElementVNode)(`span`,ne,(0,n.toDisplayString)(t(r.startTime)),1)],10,Z))),128))])]),_:1})])):(0,n.createCommentVNode)(`v-if`,!0)}}});var ie=e.t(re,[[`__scopeId`,`data-v-8828163e`]]);const ae={class:`vp-bookmark-panel`},oe={class:`vp-bookmark-list`},se=[`aria-label`,`onClick`],ce={class:`vp-bookmark-note`},le=(0,n.defineComponent)({__name:`BookmarkPanel`,props:{bookmarks:{}},emits:[`add`,`remove`,`goTo`],setup(e,{emit:t}){let i=t;function a(){i(`add`,``)}function o(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(t,i)=>{let s=r.NButton,c=r.NBadge,l=r.NPopover;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,ae,[(0,n.createCommentVNode)(` 添加书签按钮 `),(0,n.createVNode)(s,{quaternary:``,size:`small`,class:`vp-bookmark-add-btn`,onClick:a},{icon:(0,n.withCtx)(()=>[...i[0]||=[(0,n.createElementVNode)(`span`,null,`🔖`,-1)]]),default:(0,n.withCtx)(()=>[i[1]||=(0,n.createTextVNode)(` 书签 `,-1)]),_:1}),(0,n.createCommentVNode)(` 书签列表弹窗 `),e.bookmarks.length?((0,n.openBlock)(),(0,n.createBlock)(l,{key:0,trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(c,{value:e.bookmarks.length,max:99,type:`info`},{default:(0,n.withCtx)(()=>[(0,n.createVNode)(s,{quaternary:``,size:`small`,class:`vp-bookmark-list-btn`},{default:(0,n.withCtx)(()=>[...i[2]||=[(0,n.createTextVNode)(` 列表 `,-1)]]),_:1})]),_:1},8,[`value`])]),default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,oe,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.bookmarks,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.id,class:`vp-bookmark-item`},[(0,n.createElementVNode)(`button`,{type:`button`,class:`vp-bookmark-time`,"aria-label":`跳转到 ${o(e.time)}`,onClick:n=>t.$emit(`goTo`,e.id)},(0,n.toDisplayString)(o(e.time)),9,se),(0,n.createElementVNode)(`span`,ce,(0,n.toDisplayString)(e.note||`无备注`),1),(0,n.createVNode)(s,{quaternary:``,size:`tiny`,type:`error`,onClick:n=>t.$emit(`remove`,e.id)},{default:(0,n.withCtx)(()=>[...i[3]||=[(0,n.createTextVNode)(` ✕ `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)])}}});var ue=e.t(le,[[`__scopeId`,`data-v-29942590`]]);const de={key:0,class:`vp-quiz-overlay`},fe={class:`vp-quiz-card`},pe={class:`vp-quiz-header`},me={class:`vp-quiz-type-tag`},he={class:`vp-quiz-title`},$={class:`vp-quiz-options`},ge={class:`vp-quiz-actions`},_e=(0,n.defineComponent)({__name:`QuizOverlay`,props:(0,n.mergeModels)({quiz:{},showResult:{type:Boolean,default:!1},isCorrect:{type:Boolean,default:!1}},{answer:{default:``},answerModifiers:{}}),emits:(0,n.mergeModels)([`submit`,`retry`,`close`],[`update:answer`]),setup(e){let t=e,i=(0,n.ref)(``),a=(0,n.ref)([]),o=(0,n.useModel)(e,`answer`),s=(0,n.computed)(()=>({single:`单选题`,multiple:`多选题`,judge:`判断题`})[t.quiz?.type??`single`]??`单选题`),c=(0,n.computed)(()=>t.quiz?.type===`multiple`?a.value.length>0:i.value!==``);return(0,n.watch)(i,e=>{t.quiz?.type!==`multiple`&&(o.value=e)}),(0,n.watch)(a,e=>{t.quiz?.type===`multiple`&&(o.value=[...e])}),(0,n.watch)(()=>t.quiz?.id,()=>{i.value=``,a.value=[]}),(t,o)=>{let l=r.NCheckbox,u=r.NCheckboxGroup,d=r.NRadio,f=r.NRadioGroup,p=r.NButton;return(0,n.openBlock)(),(0,n.createBlock)(n.Transition,{name:`vp-quiz-fade`},{default:(0,n.withCtx)(()=>[e.quiz?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,de,[(0,n.createElementVNode)(`div`,fe,[(0,n.createCommentVNode)(` 标题 `),(0,n.createElementVNode)(`div`,pe,[(0,n.createElementVNode)(`span`,me,(0,n.toDisplayString)(s.value),1),(0,n.createElementVNode)(`h3`,he,(0,n.toDisplayString)(e.quiz.title),1)]),(0,n.createCommentVNode)(` 选项 `),(0,n.createElementVNode)(`div`,$,[e.quiz.type===`multiple`?((0,n.openBlock)(),(0,n.createBlock)(u,{key:0,value:a.value,"onUpdate:value":o[0]||=e=>a.value=e,disabled:e.showResult},{default:(0,n.withCtx)(()=>[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.quiz.options,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.key,class:`vp-quiz-option`},[(0,n.createVNode)(l,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`])):((0,n.openBlock)(),(0,n.createBlock)(f,{key:1,value:i.value,"onUpdate:value":o[1]||=e=>i.value=e,disabled:e.showResult},{default:(0,n.withCtx)(()=>[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.quiz.options,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.key,class:`vp-quiz-option`},[(0,n.createVNode)(d,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`]))]),(0,n.createCommentVNode)(` 结果反馈 `),e.showResult?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:(0,n.normalizeClass)([`vp-quiz-result`,e.isCorrect?`is-correct`:`is-wrong`])},(0,n.toDisplayString)(e.isCorrect?`✓ 回答正确!`:`✗ 回答错误,请重试`),3)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 操作按钮 `),(0,n.createElementVNode)(`div`,ge,[e.showResult?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:1},[!e.isCorrect&&e.quiz.required?((0,n.openBlock)(),(0,n.createBlock)(p,{key:0,type:`warning`,onClick:o[3]||=e=>t.$emit(`retry`)},{default:(0,n.withCtx)(()=>[...o[6]||=[(0,n.createTextVNode)(` 重新作答 `,-1)]]),_:1})):(0,n.createCommentVNode)(`v-if`,!0),e.isCorrect||!e.quiz.required?((0,n.openBlock)(),(0,n.createBlock)(p,{key:1,type:`primary`,onClick:o[4]||=e=>t.$emit(`close`)},{default:(0,n.withCtx)(()=>[...o[7]||=[(0,n.createTextVNode)(` 继续学习 `,-1)]]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)],64)):((0,n.openBlock)(),(0,n.createBlock)(p,{key:0,type:`primary`,disabled:!c.value,onClick:o[2]||=e=>t.$emit(`submit`)},{default:(0,n.withCtx)(()=>[...o[5]||=[(0,n.createTextVNode)(` 提交答案 `,-1)]]),_:1},8,[`disabled`]))])])])):(0,n.createCommentVNode)(`v-if`,!0)]),_:1})}}});var ve=e.t(_e,[[`__scopeId`,`data-v-1132a37b`]]);const ye=(0,n.defineComponent)({__name:`WatermarkOverlay`,props:{visible:{type:Boolean,default:!0},text:{default:``},fontSize:{default:h.fontSize},color:{default:h.color},rotate:{default:h.rotate},gap:{default:h.gap}},setup(e){let t=e,r=(0,n.computed)(()=>{let e=t.gap*t.gap;return Math.ceil(2073600/e)}),i=(0,n.computed)(()=>({position:`absolute`,inset:0,overflow:`hidden`,pointerEvents:`none`,zIndex:50,display:`flex`,flexWrap:`wrap`,alignContent:`flex-start`,gap:`${t.gap}px`,padding:`${t.gap/2}px`})),a=(0,n.computed)(()=>({fontSize:`${t.fontSize}px`,color:t.color,transform:`rotate(${t.rotate}deg)`,userSelect:`none`,whiteSpace:`nowrap`,lineHeight:1}));return(t,o)=>e.visible&&e.text?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`vp-watermark`,style:(0,n.normalizeStyle)(i.value)},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(r.value,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:t,class:`vp-watermark-item`,style:(0,n.normalizeStyle)(a.value)},(0,n.toDisplayString)(e.text),5))),128))],4)):(0,n.createCommentVNode)(`v-if`,!0)}});var be=e.t(ye,[[`__scopeId`,`data-v-9a051cb4`]]);const xe=(0,n.defineComponent)({name:`C_VideoPlayer`,__name:`index`,props:{url:{},sourceType:{},width:{},height:{},poster:{},fluid:{type:Boolean},autoplay:{type:Boolean},autoplayMuted:{type:Boolean},loop:{type:Boolean},volume:{},startTime:{},playbackRates:{},defaultPlaybackRate:{},pip:{type:Boolean},fullscreen:{type:Boolean},cssFullscreen:{type:Boolean},miniPlayer:{type:Boolean},screenshot:{type:Boolean},keyboard:{type:Boolean},lang:{},qualityList:{},defaultQuality:{},chapters:{},subtitles:{},quizzes:{},bookmarks:{},thumbnail:{},onProgress:{type:Function},antiCheat:{},onAnalytics:{type:Function},playerOptions:{}},emits:[`ready`,`stateChange`,`timeUpdate`,`ended`,`error`,`qualityChange`,`rateChange`,`fullscreenChange`,`bookmarkChange`,`quizAnswer`,`chapterChange`,`progressUpdate`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=_(i),{containerRef:s,playerRef:c,playerState:l,currentTime:u,duration:d,isFullscreen:f}=o,p=(0,n.ref)(null),h=v(c),g=(0,n.toRef)(i,`url`),y=x(c,u,d,g,i.onProgress,i.antiCheat),b=C(c,i.qualityList),S=(0,n.computed)(()=>i.chapters??[]),D=w(S,u,d,h.seek),O=T(g,u,h.seek,i.bookmarks),P=E(c,u,i.antiCheat),F=k(c,i.subtitles,u),I=A(c,u,(0,n.computed)(()=>i.quizzes??[])),L=j(p,(0,n.computed)(()=>i.miniPlayer??!1)),R=M(c,p,{enabled:i.keyboard!==!1,onToggleFullscreen:()=>{c.value?.getFullscreen?.()}}),z=null,B=!1;function V(e){O.addBookmark(e),a(`bookmarkChange`,O.bookmarks.value)}function H(){let e=I.submitAnswer(),t=I.activeQuiz.value;t&&a(`quizAnswer`,t.id,I.selectedAnswer.value,e)}function U(){I.closeQuiz()}return(0,n.watch)(l,e=>{a(`stateChange`,e)}),(0,n.watch)(f,e=>{a(`fullscreenChange`,e)}),(0,n.watch)(()=>D.currentChapter.value,e=>{e&&a(`chapterChange`,e)}),(0,n.onMounted)(async()=>{if(o.containerRef.value=s.value,await(0,n.nextTick)(),B)return;try{await o.initPlayer()}catch(e){B||a(`error`,e instanceof Error?e:Error(String(e)));return}if(B)return;let e=c.value;if(!e)return;b.bindEvents(e),P.bindEvents(e),F.initSubtitles(),R.startListening(),L.initObserver();let t=y.restoreProgress();t>0&&i.startTime===void 0&&(e.currentTime=t),e.on(m.PLAY,()=>{y.onPlay()}),e.on(m.PAUSE,()=>{y.onPause()}),e.on(m.TIME_UPDATE,()=>{y.onTimeUpdate(),a(`timeUpdate`,u.value,d.value),a(`progressUpdate`,y.getProgressData())}),e.on(m.ENDED,()=>{a(`ended`),P.markAsWatched()}),e.on(m.ERROR,()=>{a(`error`,Error(`播放器错误`))}),e.on(m.READY,()=>{a(`ready`)}),e.on(m.AFTER_DEFINITION_CHANGE,e=>{a(`qualityChange`,e.to)}),e.on(m.RATE_CHANGE,e=>{a(`rateChange`,e)}),i.onAnalytics&&(z=N(e,i.onAnalytics).destroy)}),(0,n.onBeforeUnmount)(()=>{B=!0,z?.(),R.stopListening(),L.destroyObserver()}),t({play:h.play,pause:h.pause,seek:h.seek,setPlaybackRate:h.setPlaybackRate,setVolume:h.setVolume,switchQuality:b.switchQuality,getProgressData:y.getProgressData,destroy:o.destroyPlayer,getPlayerInstance:()=>c.value}),(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{ref_key:`wrapperRef`,ref:p,class:(0,n.normalizeClass)([`c-video-player`,{"is-mini":(0,n.unref)(L).isMiniMode.value,"is-fullscreen":(0,n.unref)(f)}]),tabindex:`0`},[(0,n.createCommentVNode)(` 播放器容器 `),(0,n.createElementVNode)(`div`,{ref_key:`containerRef`,ref:s,class:`c-video-player__container`},null,512),(0,n.createCommentVNode)(` 动态水印 `),(0,n.createVNode)(be,{visible:(0,n.unref)(P).showWatermark.value,text:(0,n.unref)(P).watermarkText.value},null,8,[`visible`,`text`]),(0,n.createCommentVNode)(` 字幕渲染层 `),(0,n.createVNode)(G,{text:(0,n.unref)(F).currentText.value,tracks:(0,n.unref)(F).subtitleList.value,"active-language":(0,n.unref)(F).activeLanguage.value,onSwitch:(0,n.unref)(F).switchSubtitle,onClose:(0,n.unref)(F).closeSubtitle},null,8,[`text`,`tracks`,`active-language`,`onSwitch`,`onClose`]),(0,n.createCommentVNode)(` 测验弹窗 `),i.quizzes?.length?((0,n.openBlock)(),(0,n.createBlock)(ve,{key:0,answer:(0,n.unref)(I).selectedAnswer.value,"onUpdate:answer":t[0]||=e=>(0,n.unref)(I).selectedAnswer.value=e,quiz:(0,n.unref)(I).activeQuiz.value,"show-result":(0,n.unref)(I).showResult.value,"is-correct":(0,n.unref)(I).lastAnswerCorrect.value,onSubmit:H,onRetry:t[1]||=e=>(0,n.unref)(I).retryQuiz(),onClose:U},null,8,[`answer`,`quiz`,`show-result`,`is-correct`])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 扩展控制栏(xgplayer 自带控制栏外的扩展) `),(0,n.createVNode)(ee,{visible:!0},{left:(0,n.withCtx)(()=>[(0,n.createCommentVNode)(` 章节标记 `),i.chapters?.length?((0,n.openBlock)(),(0,n.createBlock)(ie,{key:0,chapters:S.value,"current-chapter":(0,n.unref)(D).currentChapter.value,"current-index":(0,n.unref)(D).currentChapterIndex.value,onGoTo:(0,n.unref)(D).goToChapter},null,8,[`chapters`,`current-chapter`,`current-index`,`onGoTo`])):(0,n.createCommentVNode)(`v-if`,!0)]),right:(0,n.withCtx)(()=>[(0,n.createCommentVNode)(` 书签面板 `),(0,n.createVNode)(ue,{bookmarks:(0,n.unref)(O).bookmarks.value,onAdd:V,onRemove:(0,n.unref)(O).removeBookmark,onGoTo:(0,n.unref)(O).goToBookmark},null,8,[`bookmarks`,`onRemove`,`onGoTo`])]),_:1}),(0,n.createCommentVNode)(` 小窗关闭按钮 `),(0,n.unref)(L).isMiniMode.value?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:1,type:`button`,class:`c-video-player__mini-close`,"aria-label":`关闭小窗播放`,onClick:t[2]||=e=>(0,n.unref)(L).closeMiniPlayer()},` ✕ `)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 小窗点击回原位 `),(0,n.unref)(L).isMiniMode.value?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:2,type:`button`,class:`c-video-player__mini-back`,onClick:t[3]||=e=>(0,n.unref)(L).scrollToPlayer()},` 回到原位 `)):(0,n.createCommentVNode)(`v-if`,!0)],2))}});var Se=e.t(xe,[[`__scopeId`,`data-v-e6dc58ed`]]);Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return 5}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 1}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return d}});
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`),t=require(`./storage.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i=[.5,.75,1,1.25,1.5,2,3],a=.75,o=3e4,s=5e3,c={"360p":`流畅 360P`,"480p":`标清 480P`,"720p":`高清 720P`,"1080p":`超清 1080P`,"1440p":`2K 1440P`,"4K":`4K 超高清`},l={".mp4":`mp4`,".m3u8":`hls`,".mpd":`dash`,".flv":`flv`},u={SPACE:`播放/暂停`,ARROW_LEFT:`快退 5 秒`,ARROW_RIGHT:`快进 5 秒`,ARROW_UP:`音量增加 10%`,ARROW_DOWN:`音量减少 10%`,F:`全屏/退出全屏`,M:`静音/取消静音`,ESC:`退出全屏`},d=.1,f=`c_video_player_`,p={VOLUME:`${f}volume`,PLAYBACK_RATE:`${f}playback_rate`,PROGRESS:`${f}progress_`,BOOKMARKS:`${f}bookmarks_`},m={READY:`ready`,PLAY:`play`,PAUSE:`pause`,ENDED:`ended`,ERROR:`error`,SEEKING:`seeking`,SEEKED:`seeked`,TIME_UPDATE:`timeupdate`,WAITING:`waiting`,DURATION_CHANGE:`durationchange`,RATE_CHANGE:`ratechange`,FULLSCREEN_CHANGE:`fullscreen_change`,DEFINITION_CHANGE:`definition_change`,BEFORE_DEFINITION_CHANGE:`before_definition_change`,AFTER_DEFINITION_CHANGE:`after_definition_change`},h={fontSize:14,color:`rgba(150, 150, 150, 0.15)`,rotate:-25,gap:120};function g(e){try{let{pathname:t}=new URL(e,location.href);return l[t.slice(t.lastIndexOf(`.`)).toLowerCase()]??`mp4`}catch{return`mp4`}}function _(e){let t=(0,n.ref)(null),r=(0,n.shallowRef)(null),i=(0,n.ref)(`idle`),o=(0,n.ref)(0),s=(0,n.ref)(0),c=(0,n.ref)(!1),l=0,u=!1;function d(){return{el:t.value,url:e.url,width:e.width??`100%`,height:e.height??`100%`,fluid:e.fluid!==!1,fitVideoSize:`fixWidth`,poster:e.poster??``,playsinline:!0,videoAttributes:{crossOrigin:`anonymous`},lang:e.lang??`zh-cn`,inactive:3e3}}function f(){return{autoplay:e.autoplay??!1,autoplayMuted:e.autoplayMuted??!1,loop:e.loop??!1,volume:e.volume??a,startTime:e.startTime??0,defaultPlaybackRate:e.defaultPlaybackRate??1,playbackRate:e.playbackRates?{list:e.playbackRates.map(e=>e)}:!0}}function p(){return{pip:e.pip!==!1,screenShot:e.screenshot??!1,mini:e.miniPlayer??!1,fullscreen:e.fullscreen!==!1,cssFullscreen:e.cssFullscreen!==!1,keyShortcut:!1}}function h(t){e.thumbnail&&(t.thumbnail={urls:e.thumbnail.urls,pic_num:e.thumbnail.picNum,col:e.thumbnail.col,row:e.thumbnail.row,width:e.thumbnail.width,height:e.thumbnail.height}),e.qualityList?.length&&(t.definition={list:e.qualityList.map(e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate})),defaultDefinition:e.defaultQuality??e.qualityList[0].label}),e.playerOptions&&Object.assign(t,e.playerOptions)}function _(){let t=e.sourceType??g(e.url),n={...d(),...f(),...p()};return h(n),n.__sourceType=t,n}async function v(){if(u||!t.value)return;let e=++l;i.value=`loading`;let n=_(),a=n.__sourceType;delete n.__sourceType;let d;try{if(a===`hls`){let{default:e}=await import(`xgplayer-hls`);d=e}else{let{default:e}=await import(`xgplayer`);d=e}if(u||e!==l||!t.value)return;r.value=new d(n)}catch(t){if(u||e!==l)return;throw i.value=`error`,t}let f=r.value;f.on(m.READY,()=>{i.value=`ready`}),f.on(m.PLAY,()=>{i.value=`playing`}),f.on(m.PAUSE,()=>{i.value=`paused`}),f.on(m.ENDED,()=>{i.value=`ended`}),f.on(m.ERROR,()=>{i.value=`error`}),f.on(m.TIME_UPDATE,()=>{o.value=f.currentTime??0,s.value=f.duration??0}),f.on(m.DURATION_CHANGE,()=>{s.value=f.duration??0}),f.on(m.FULLSCREEN_CHANGE,e=>{c.value=e})}function y(){l++;let e=r.value;e&&(e.destroy(),r.value=null),i.value=`idle`,o.value=0,s.value=0,c.value=!1}return(0,n.onBeforeUnmount)(()=>{u=!0,y()}),{containerRef:t,playerRef:r,playerState:i,currentTime:o,duration:s,isFullscreen:c,initPlayer:v,destroyPlayer:y}}function v(e){let r=(0,n.ref)(y()),i=(0,n.ref)(b()),a=(0,n.ref)(!1);function o(){e.value?.play()}function s(){e.value?.pause()}function c(){let t=e.value;t&&(t.paused?t.play():t.pause())}function l(t){let n=e.value;n&&(n.currentTime=Math.max(0,Math.min(t,n.duration??0)))}function u(n){let i=e.value;if(!i)return;let o=Math.max(0,Math.min(1,n));i.volume=o,r.value=o,a.value=o===0,t.i(p.VOLUME,o)}function d(){let t=e.value;t&&(a.value?u(r.value>0?r.value:.5):(t.volume=0,a.value=!0))}function f(n){let r=e.value;r&&(r.playbackRate=n,i.value=n,t.i(p.PLAYBACK_RATE,n))}function m(){let t=e.value;t&&(t.volume=r.value,t.playbackRate=i.value,a.value=r.value===0)}return(0,n.watch)(e,e=>{e&&m()}),{volume:r,playbackRate:i,isMuted:a,play:o,pause:s,togglePlay:c,seek:l,setVolume:u,toggleMute:d,setPlaybackRate:f}}function y(){let e=Number(t.t(p.VOLUME));return Number.isFinite(e)&&e>=0&&e<=1?e:.75}function b(){let e=Number(t.t(p.PLAYBACK_RATE));return Number.isFinite(e)&&e>0?e:1}function x(e,r,i,a,c,l){let u=(0,n.ref)(0),d=(0,n.ref)(0),f=0,m=!1,h=null,g=null;function _(){return p.PROGRESS+encodeURIComponent(a.value)}function v(){let e=t.t(_());return!e||typeof e!=`object`?0:(u.value=S(e.watchedDuration),d.value=Math.min(100,S(e.completionPercent)),S(e.currentTime))}function y(){return{currentTime:r.value,duration:i.value,watchedDuration:u.value,completionPercent:d.value,updatedAt:Date.now()}}function b(){t.i(_(),y())}function x(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function C(){x(c,y()),b()}function w(){if(!m)return;let e=performance.now();if(f>0){let t=(e-f)/1e3;t>0&&t<5&&(u.value+=t)}f=e,i.value>0&&(d.value=Math.min(100,Math.round(u.value/i.value*100)))}function T(){let e=l?.heartbeatInterval??o;!Number.isFinite(e)||e<=0||(h=setInterval(()=>{m&&x(l?.onHeartbeat,y())},e))}function E(){g=setInterval(()=>{m&&C()},s)}function D(){let e=y();b(),x(c,e)}function O(){if(document.hidden)w(),C(),m=!1;else{let t=e.value;t&&!t.paused&&(m=!0,f=performance.now())}}function k(){j(),T(),E(),window.addEventListener(`beforeunload`,D),document.addEventListener(`visibilitychange`,O)}function A(){m=!1,j(),b()}function j(){h&&=(clearInterval(h),null),g&&=(clearInterval(g),null),window.removeEventListener(`beforeunload`,D),document.removeEventListener(`visibilitychange`,O)}function M(){m=!0,f=performance.now()}function N(){w(),m=!1,f=0,b()}function P(){w()}return(0,n.watch)(e,e=>{e?k():j()}),(0,n.onBeforeUnmount)(()=>{A()}),{watchedDuration:u,completionPercent:d,getProgressData:y,restoreProgress:v,saveProgress:b,startTracking:k,stopTracking:A,onPlay:M,onPause:N,onTimeUpdate:P}}function S(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function C(e,t=[]){let r=(0,n.ref)(null),i=(0,n.ref)(!1);function a(e){e.on(m.AFTER_DEFINITION_CHANGE,e=>{r.value=e.to,i.value=!1}),e.on(m.BEFORE_DEFINITION_CHANGE,()=>{i.value=!0})}function o(n){let r=e.value;if(!r||!t.length)return;let a=t.find(e=>e.label===n);if(!a){console.warn(`[C_VideoPlayer] 未找到清晰度: ${n}`);return}i.value=!0,r.changeDefinition?.({url:a.url,definition:a.label,text:{zh:a.label,en:a.label},bitrate:a.bitrate})}return{currentQuality:r,isSwitching:i,switchQuality:o,bindEvents:a}}function w(e,t,r,i){let a=(0,n.computed)(()=>{if(!e.value.length)return null;let n=t.value;return e.value.find(e=>n>=e.startTime&&n<e.endTime)??null}),o=(0,n.computed)(()=>a.value?e.value.findIndex(e=>e.id===a.value.id):-1),s=(0,n.computed)(()=>!r.value||!e.value.length?[]:e.value.map(e=>({...e,startPercent:e.startTime/r.value*100,endPercent:e.endTime/r.value*100,widthPercent:(e.endTime-e.startTime)/r.value*100})));function c(t){let n=e.value.find(e=>e.id===t);n&&i(n.startTime)}function l(){let t=o.value;t>0&&i(e.value[t-1].startTime)}function u(){let t=o.value;t>=0&&t<e.value.length-1&&i(e.value[t+1].startTime)}return{currentChapter:a,currentChapterIndex:o,chapterMarkers:s,goToChapter:c,prevChapter:l,nextChapter:u}}function T(e,r,i,a=[]){let o=(0,n.ref)([...a]);function s(){return p.BOOKMARKS+encodeURIComponent(e.value)}function c(){let e=t.t(s());Array.isArray(e)&&(o.value=e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.time==`number`&&Number.isFinite(e.time)&&typeof e.note==`string`&&typeof e.createdAt==`number`),u())}function l(){t.i(s(),o.value)}function u(){o.value.sort((e,t)=>e.time-t.time)}function d(e=``){let t={id:typeof crypto<`u`&&`randomUUID`in crypto?`bm_${crypto.randomUUID()}`:`bm_${Date.now()}_${o.value.length}`,time:r.value,note:e,createdAt:Date.now()};return o.value.push(t),u(),l(),t}function f(e){let t=o.value.findIndex(t=>t.id===e);t!==-1&&(o.value.splice(t,1),l())}function m(e,t){let n=o.value.find(t=>t.id===e);n&&(n.note=t,l())}function h(e){let t=o.value.find(t=>t.id===e);t&&i(t.time)}function g(){o.value=[],l()}return a.length||c(),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:m,goToBookmark:h,clearBookmarks:g}}function E(e,t,r){let i=(0,n.ref)(0),a=(0,n.ref)(!0),o=(0,n.ref)(!1),s=(0,n.ref)(r?.watermark??!1),c=(0,n.ref)(r?.watermarkText??``);function l(e){e>i.value&&(i.value=e)}function u(e){!r?.preventSeekOnFirstWatch||!a.value||(e.currentTime??0)>i.value+2&&(e.currentTime=i.value)}function d(){if(!r?.focusDetection)return;let t=e.value;t&&(document.hidden?(o.value=!0,t.paused||t.pause()):o.value=!1)}function f(e){r?.preventSeekOnFirstWatch&&e.on(m.SEEKING,()=>u(e)),e.on(m.TIME_UPDATE,()=>{l(t.value)}),r?.focusDetection&&document.addEventListener(`visibilitychange`,d)}function p(){a.value=!1}function h(e){c.value=e}return(0,n.onBeforeUnmount)(()=>{document.removeEventListener(`visibilitychange`,d)}),{maxWatchedTime:i,isFirstWatch:a,isBlurred:o,showWatermark:s,watermarkText:c,bindEvents:f,markAsWatched:p,setWatermarkText:h}}function D(e){let t=[];e.forEach((e,n)=>{!Number.isFinite(e.start)||!Number.isFinite(e.end)||e.end<=e.start||t.push({time:e.start,index:n,active:!0},{time:e.end,index:n,active:!1})}),t.sort((e,t)=>e.time-t.time);let n=new Uint8Array(e.length),r=[],i=[],a=e=>{let t=r.length;for(r.push(e);t>0;){let n=t-1>>>1;if(r[n]<=e)break;r[t]=r[n],t=n}r[t]=e},o=()=>{for(;r.length&&!n[r[0]];){let e=r.pop();if(!r.length)break;let t=0;for(;t*2+1<r.length;){let n=t*2+1;if(n+1<r.length&&r[n+1]<r[n]&&n++,r[n]>=e)break;r[t]=r[n],t=n}r[t]=e}},s=0;for(;s<t.length;){let c=t[s].time;for(;s<t.length&&t[s].time===c;){let e=t[s++];n[e.index]=Number(e.active),e.active&&a(e.index)}if(o(),!r.length||s===t.length)continue;let l=t[s].time,{text:u}=e[r[0]],d=i[i.length-1];d?.end===c&&d.text===u?d.end=l:i.push({start:c,end:l,text:u})}return i}function O(e,t){if(!Number.isFinite(t))return``;let n=0,r=e.length;for(;n<r;){let i=n+r>>>1;e[i].start<=t?n=i+1:r=i}let i=e[n-1];return i&&t<i.end?i.text:``}function k(e){let t=e.trim().match(/^(?:(\d{2,}):)?(\d{2}):(\d{2})\.(\d{3})$/);if(!t)return NaN;let[,n=`0`,r,i,a]=t;return Number(r)>59||Number(i)>59?NaN:Number(n)*3600+Number(r)*60+Number(i)+Number(a)/1e3}function A(e){let t=[],n=e.replace(/\r\n?/g,`
|
|
2
|
+
`).trim().split(/\n\s*\n/);for(let e of n){let n=e.trim().split(`
|
|
3
|
+
`);if(/^(?:NOTE|STYLE|REGION)(?:\s|$)/.test(n[0]))continue;let r=n.findIndex(e=>e.includes(`-->`));if(r===-1)continue;let[i,a]=n[r].split(`-->`);if(!i||!a)continue;let o=k(i),s=k(a.trim().split(/\s+/)[0]);if(!Number.isFinite(o)||!Number.isFinite(s)||s<=o)continue;let c=n.slice(r+1).join(`
|
|
4
|
+
`).replace(/<[^>]+>/g,``).trim();c&&t.push({start:o,end:s,text:c})}return t}function j(e,t=[],r=(0,n.ref)(0)){let i=(0,n.ref)(null),a=(0,n.ref)([...t]),o=(0,n.shallowRef)({}),s=(0,n.ref)(!1),c=new Map,l=0,u=!1,d=(0,n.computed)(()=>{if(!i.value)return``;let e=o.value[i.value];return e?O(e.timeline,r.value):``}),f=(0,n.computed)(()=>a.value.length>0);function p(e){if(u)return Promise.resolve([]);if(Object.prototype.hasOwnProperty.call(o.value,e))return Promise.resolve(o.value[e].cues);let t=c.get(e);if(t)return t.promise;let n=a.value.find(t=>t.language===e);if(!n)return Promise.resolve([]);let r=new AbortController;s.value=!0;let i=Promise.resolve().then(async()=>{let t=await fetch(n.src,{signal:r.signal});if(!t.ok)throw Error(`字幕加载失败: ${n.src} (${t.status})`);let i=await t.text();if(u||r.signal.aborted)return[];let a=A(i);return o.value={...o.value,[e]:{cues:a,timeline:D(a)}},a}).catch(e=>(!u&&!r.signal.aborted&&console.warn(`[C_VideoPlayer] 字幕加载异常:`,e),[])).finally(()=>{c.delete(e),u||(s.value=c.size>0)});return c.set(e,{controller:r,promise:i}),i}async function m(e){if(u)return;if(!a.value.find(t=>t.language===e)){console.warn(`[C_VideoPlayer] 未找到字幕轨道: ${e}`);return}let t=++l;await p(e),!u&&t===l&&(i.value=e)}async function h(){let e=a.value.find(e=>e.default)??a.value[0];e&&await m(e.language)}function g(){l++,i.value=null}function _(){i.value?g():h()}return(0,n.onBeforeUnmount)(()=>{u=!0,l++,c.forEach(({controller:e})=>e.abort()),c.clear(),s.value=!1}),{activeLanguage:i,subtitleList:a,currentText:d,hasSubtitles:f,isLoading:s,initSubtitles:h,switchSubtitle:m,closeSubtitle:g,toggleSubtitle:_}}function M(e,t,r){let i=(0,n.ref)(null),a=(0,n.ref)(new Set),o=(0,n.ref)(``),s=(0,n.ref)(!1),c=(0,n.ref)(!1);function l(){if(i.value||!r.value.length)return;let e=t.value,n=r.value.find(t=>!a.value.has(t.id)&&Math.abs(e-t.triggerTime)<1);n&&u(n)}function u(t){i.value=t,o.value=t.type===`multiple`?[]:``,s.value=!1,c.value=!1,e.value?.pause()}function d(){if(!i.value)return!1;let e=i.value,t=m(e,o.value);return c.value=t,s.value=!0,(t||!e.required)&&a.value.add(e.id),t}function f(){if(!i.value)return;let t=i.value;t.required&&!a.value.has(t.id)||(i.value=null,s.value=!1,o.value=``,e.value?.play())}function p(){i.value&&(o.value=i.value.type===`multiple`?[]:``,s.value=!1,c.value=!1)}function m(e,t){if(e.type===`multiple`){let n=Array.isArray(t)?[...t].sort():[t],r=Array.isArray(e.answer)?[...e.answer].sort():[e.answer];return n.length===r.length&&n.every((e,t)=>e===r[t])}return t===e.answer}return(0,n.watch)(t,()=>{l()}),{activeQuiz:i,completedQuizIds:a,selectedAnswer:o,showResult:s,lastAnswerCorrect:c,submitAnswer:d,closeQuiz:f,retryQuiz:p}}function N(e,t){let r=(0,n.ref)(!1),i=null;function a(){!e.value||!t.value||(i=new IntersectionObserver(([e])=>{r.value=!e.isIntersecting},{threshold:.3}),i.observe(e.value))}function o(){i&&=(i.disconnect(),null),r.value=!1}function s(){e.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function c(){r.value=!1,o()}return(0,n.onBeforeUnmount)(()=>{o()}),{isMiniMode:r,initObserver:a,destroyObserver:o,scrollToPlayer:s,closeMiniPlayer:c}}function P(e,t,r={}){let{enabled:i=!0,onToggleFullscreen:a}=r,o={" ":(e,t)=>{e.preventDefault(),t.paused?t.play():t.pause()},ArrowLeft:(e,t)=>{e.preventDefault(),t.currentTime=Math.max(0,(t.currentTime??0)-5)},ArrowRight:(e,t)=>{e.preventDefault(),t.currentTime=Math.min(t.duration??0,(t.currentTime??0)+5)},ArrowUp:(e,t)=>{e.preventDefault(),t.volume=Math.min(1,(t.volume??0)+d)},ArrowDown:(e,t)=>{e.preventDefault(),t.volume=Math.max(0,(t.volume??0)-d)},f:e=>{e.preventDefault(),a?.()},F:e=>{e.preventDefault(),a?.()},m:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75},M:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75}};function s(t){if(!i)return;let n=e.value;if(!n)return;let r=t.target;if(r.tagName===`INPUT`||r.tagName===`TEXTAREA`||r.isContentEditable)return;let a=o[t.key];a?.(t,n)}function c(){i&&t.value?.addEventListener(`keydown`,s)}function l(){t.value?.removeEventListener(`keydown`,s)}return(0,n.onBeforeUnmount)(()=>{l()}),{startListening:c,stopListening:l}}function ee(e,t){function n(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function r(e,r){t(n(e,r))}let i=()=>r(`play`),a=()=>r(`pause`),o=()=>r(`ended`),s=()=>r(`seek`),c=()=>r(`error`),l=()=>r(`buffer`),u=e=>{r(`fullscreen`,{isFullscreen:e})},d=e=>{r(`quality_change`,e)},f=()=>{r(`speed_change`,{rate:e.playbackRate})};e.on(m.PLAY,i),e.on(m.PAUSE,a),e.on(m.ENDED,o),e.on(m.SEEKED,s),e.on(m.ERROR,c),e.on(m.WAITING,l),e.on(m.FULLSCREEN_CHANGE,u),e.on(m.DEFINITION_CHANGE,d),e.on(m.RATE_CHANGE,f);function p(){e.off(m.PLAY,i),e.off(m.PAUSE,a),e.off(m.ENDED,o),e.off(m.SEEKED,s),e.off(m.ERROR,c),e.off(m.WAITING,l),e.off(m.FULLSCREEN_CHANGE,u),e.off(m.DEFINITION_CHANGE,d),e.off(m.RATE_CHANGE,f)}return{report:r,destroy:p}}const F={key:0,class:`vp-control-bar`},I={class:`vp-control-bar__left`},L={class:`vp-control-bar__center`},R={class:`vp-control-bar__right`},z=(0,n.defineComponent)({__name:`ControlBar`,props:{visible:{type:Boolean,default:!0}},setup(e){return(t,r)=>e.visible?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,F,[(0,n.createElementVNode)(`div`,I,[(0,n.renderSlot)(t.$slots,`left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,L,[(0,n.renderSlot)(t.$slots,`center`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,R,[(0,n.renderSlot)(t.$slots,`right`,{},void 0,!0)])])):(0,n.createCommentVNode)(`v-if`,!0)}});var te=e.t(z,[[`__scopeId`,`data-v-e8b787cf`]]);const B={key:0,class:`vp-subtitle-overlay`},V={class:`vp-subtitle-text`},H={key:0,class:`vp-subtitle-toggle`},U={class:`vp-subtitle-menu`},W=[`onClick`],G=(0,n.defineComponent)({__name:`SubtitleOverlay`,props:{text:{},tracks:{},activeLanguage:{}},emits:[`switch`,`close`],setup(e){return(t,i)=>{let a=r.NButton,o=r.NPopover;return(0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,null,[(0,n.createCommentVNode)(` 字幕文本 `),(0,n.createVNode)(n.Transition,{name:`vp-subtitle-fade`},{default:(0,n.withCtx)(()=>[e.text?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,B,[(0,n.createElementVNode)(`span`,V,(0,n.toDisplayString)(e.text),1)])):(0,n.createCommentVNode)(`v-if`,!0)]),_:1}),(0,n.createCommentVNode)(` 字幕切换按钮(叠加在播放器控制栏上方) `),e.tracks.length?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,H,[(0,n.createVNode)(o,{trigger:`click`,placement:`top`,"show-arrow":!1},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(a,{quaternary:``,size:`small`,class:(0,n.normalizeClass)([`vp-subtitle-btn`,{"is-active":!!e.activeLanguage}])},{default:(0,n.withCtx)(()=>[...i[1]||=[(0,n.createTextVNode)(` 字幕 `,-1)]]),_:1},8,[`class`])]),default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,U,[(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`vp-subtitle-menu__item`,{"is-active":!e.activeLanguage}]),onClick:i[0]||=e=>t.$emit(`close`)},` 关闭字幕 `,2),((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.tracks,r=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:r.language,class:(0,n.normalizeClass)([`vp-subtitle-menu__item`,{"is-active":e.activeLanguage===r.language}]),onClick:e=>t.$emit(`switch`,r.language)},(0,n.toDisplayString)(r.label),11,W))),128))])]),_:1})])):(0,n.createCommentVNode)(`v-if`,!0)],64)}}});var K=e.t(G,[[`__scopeId`,`data-v-20ac6438`]]);const q={key:0,class:`vp-chapter-markers`},J={key:0,class:`vp-chapter-current`},Y={class:`vp-chapter-index`},X={class:`vp-chapter-title`},Z={class:`vp-chapter-list`},Q=[`onClick`],ne={class:`vp-chapter-item-index`},re={class:`vp-chapter-item-title`},ie={class:`vp-chapter-item-time`},ae=(0,n.defineComponent)({__name:`ChapterMarkers`,props:{chapters:{},currentChapter:{},currentIndex:{}},emits:[`goTo`],setup(e){function t(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(i,a)=>{let o=r.NButton,s=r.NPopover;return e.chapters.length?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,q,[(0,n.createCommentVNode)(` 当前章节信息 `),e.currentChapter?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,J,[(0,n.createElementVNode)(`span`,Y,(0,n.toDisplayString)(e.currentIndex+1)+`/`+(0,n.toDisplayString)(e.chapters.length),1),(0,n.createElementVNode)(`span`,X,(0,n.toDisplayString)(e.currentChapter.title),1)])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 章节列表面板 `),(0,n.createVNode)(s,{trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(o,{quaternary:``,size:`small`,class:`vp-chapter-trigger`},{icon:(0,n.withCtx)(()=>[...a[0]||=[(0,n.createElementVNode)(`span`,{class:`vp-chapter-icon`},`☰`,-1)]]),default:(0,n.withCtx)(()=>[a[1]||=(0,n.createTextVNode)(` 章节 `,-1)]),_:1})]),default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,Z,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.chapters,(r,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:r.id,class:(0,n.normalizeClass)([`vp-chapter-item`,{"is-active":r.id===e.currentChapter?.id}]),onClick:e=>i.$emit(`goTo`,r.id)},[(0,n.createElementVNode)(`span`,ne,(0,n.toDisplayString)(a+1),1),(0,n.createElementVNode)(`span`,re,(0,n.toDisplayString)(r.title),1),(0,n.createElementVNode)(`span`,ie,(0,n.toDisplayString)(t(r.startTime)),1)],10,Q))),128))])]),_:1})])):(0,n.createCommentVNode)(`v-if`,!0)}}});var oe=e.t(ae,[[`__scopeId`,`data-v-8828163e`]]);const se={class:`vp-bookmark-panel`},ce={class:`vp-bookmark-list`},le=[`aria-label`,`onClick`],ue={class:`vp-bookmark-note`},de=(0,n.defineComponent)({__name:`BookmarkPanel`,props:{bookmarks:{}},emits:[`add`,`remove`,`goTo`],setup(e,{emit:t}){let i=t;function a(){i(`add`,``)}function o(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(t,i)=>{let s=r.NButton,c=r.NBadge,l=r.NPopover;return(0,n.openBlock)(),(0,n.createElementBlock)(`div`,se,[(0,n.createCommentVNode)(` 添加书签按钮 `),(0,n.createVNode)(s,{quaternary:``,size:`small`,class:`vp-bookmark-add-btn`,onClick:a},{icon:(0,n.withCtx)(()=>[...i[0]||=[(0,n.createElementVNode)(`span`,null,`🔖`,-1)]]),default:(0,n.withCtx)(()=>[i[1]||=(0,n.createTextVNode)(` 书签 `,-1)]),_:1}),(0,n.createCommentVNode)(` 书签列表弹窗 `),e.bookmarks.length?((0,n.openBlock)(),(0,n.createBlock)(l,{key:0,trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:(0,n.withCtx)(()=>[(0,n.createVNode)(c,{value:e.bookmarks.length,max:99,type:`info`},{default:(0,n.withCtx)(()=>[(0,n.createVNode)(s,{quaternary:``,size:`small`,class:`vp-bookmark-list-btn`},{default:(0,n.withCtx)(()=>[...i[2]||=[(0,n.createTextVNode)(` 列表 `,-1)]]),_:1})]),_:1},8,[`value`])]),default:(0,n.withCtx)(()=>[(0,n.createElementVNode)(`div`,ce,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.bookmarks,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.id,class:`vp-bookmark-item`},[(0,n.createElementVNode)(`button`,{type:`button`,class:`vp-bookmark-time`,"aria-label":`跳转到 ${o(e.time)}`,onClick:n=>t.$emit(`goTo`,e.id)},(0,n.toDisplayString)(o(e.time)),9,le),(0,n.createElementVNode)(`span`,ue,(0,n.toDisplayString)(e.note||`无备注`),1),(0,n.createVNode)(s,{quaternary:``,size:`tiny`,type:`error`,onClick:n=>t.$emit(`remove`,e.id)},{default:(0,n.withCtx)(()=>[...i[3]||=[(0,n.createTextVNode)(` ✕ `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)])}}});var fe=e.t(de,[[`__scopeId`,`data-v-29942590`]]);const pe={key:0,class:`vp-quiz-overlay`},me={class:`vp-quiz-card`},he={class:`vp-quiz-header`},$={class:`vp-quiz-type-tag`},ge={class:`vp-quiz-title`},_e={class:`vp-quiz-options`},ve={class:`vp-quiz-actions`},ye=(0,n.defineComponent)({__name:`QuizOverlay`,props:(0,n.mergeModels)({quiz:{},showResult:{type:Boolean,default:!1},isCorrect:{type:Boolean,default:!1}},{answer:{default:``},answerModifiers:{}}),emits:(0,n.mergeModels)([`submit`,`retry`,`close`],[`update:answer`]),setup(e){let t=e,i=(0,n.ref)(``),a=(0,n.ref)([]),o=(0,n.useModel)(e,`answer`),s=(0,n.computed)(()=>({single:`单选题`,multiple:`多选题`,judge:`判断题`})[t.quiz?.type??`single`]??`单选题`),c=(0,n.computed)(()=>t.quiz?.type===`multiple`?a.value.length>0:i.value!==``);return(0,n.watch)(i,e=>{t.quiz?.type!==`multiple`&&(o.value=e)}),(0,n.watch)(a,e=>{t.quiz?.type===`multiple`&&(o.value=[...e])}),(0,n.watch)(()=>t.quiz?.id,()=>{i.value=``,a.value=[]}),(t,o)=>{let l=r.NCheckbox,u=r.NCheckboxGroup,d=r.NRadio,f=r.NRadioGroup,p=r.NButton;return(0,n.openBlock)(),(0,n.createBlock)(n.Transition,{name:`vp-quiz-fade`},{default:(0,n.withCtx)(()=>[e.quiz?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,pe,[(0,n.createElementVNode)(`div`,me,[(0,n.createCommentVNode)(` 标题 `),(0,n.createElementVNode)(`div`,he,[(0,n.createElementVNode)(`span`,$,(0,n.toDisplayString)(s.value),1),(0,n.createElementVNode)(`h3`,ge,(0,n.toDisplayString)(e.quiz.title),1)]),(0,n.createCommentVNode)(` 选项 `),(0,n.createElementVNode)(`div`,_e,[e.quiz.type===`multiple`?((0,n.openBlock)(),(0,n.createBlock)(u,{key:0,value:a.value,"onUpdate:value":o[0]||=e=>a.value=e,disabled:e.showResult},{default:(0,n.withCtx)(()=>[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.quiz.options,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.key,class:`vp-quiz-option`},[(0,n.createVNode)(l,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`])):((0,n.openBlock)(),(0,n.createBlock)(f,{key:1,value:i.value,"onUpdate:value":o[1]||=e=>i.value=e,disabled:e.showResult},{default:(0,n.withCtx)(()=>[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(e.quiz.options,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:e.key,class:`vp-quiz-option`},[(0,n.createVNode)(d,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`]))]),(0,n.createCommentVNode)(` 结果反馈 `),e.showResult?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:(0,n.normalizeClass)([`vp-quiz-result`,e.isCorrect?`is-correct`:`is-wrong`])},(0,n.toDisplayString)(e.isCorrect?`✓ 回答正确!`:`✗ 回答错误,请重试`),3)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 操作按钮 `),(0,n.createElementVNode)(`div`,ve,[e.showResult?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:1},[!e.isCorrect&&e.quiz.required?((0,n.openBlock)(),(0,n.createBlock)(p,{key:0,type:`warning`,onClick:o[3]||=e=>t.$emit(`retry`)},{default:(0,n.withCtx)(()=>[...o[6]||=[(0,n.createTextVNode)(` 重新作答 `,-1)]]),_:1})):(0,n.createCommentVNode)(`v-if`,!0),e.isCorrect||!e.quiz.required?((0,n.openBlock)(),(0,n.createBlock)(p,{key:1,type:`primary`,onClick:o[4]||=e=>t.$emit(`close`)},{default:(0,n.withCtx)(()=>[...o[7]||=[(0,n.createTextVNode)(` 继续学习 `,-1)]]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)],64)):((0,n.openBlock)(),(0,n.createBlock)(p,{key:0,type:`primary`,disabled:!c.value,onClick:o[2]||=e=>t.$emit(`submit`)},{default:(0,n.withCtx)(()=>[...o[5]||=[(0,n.createTextVNode)(` 提交答案 `,-1)]]),_:1},8,[`disabled`]))])])])):(0,n.createCommentVNode)(`v-if`,!0)]),_:1})}}});var be=e.t(ye,[[`__scopeId`,`data-v-1132a37b`]]);const xe=(0,n.defineComponent)({__name:`WatermarkOverlay`,props:{visible:{type:Boolean,default:!0},text:{default:``},fontSize:{default:h.fontSize},color:{default:h.color},rotate:{default:h.rotate},gap:{default:h.gap}},setup(e){let t=e,r=(0,n.computed)(()=>{let e=t.gap*t.gap;return Math.ceil(2073600/e)}),i=(0,n.computed)(()=>({position:`absolute`,inset:0,overflow:`hidden`,pointerEvents:`none`,zIndex:50,display:`flex`,flexWrap:`wrap`,alignContent:`flex-start`,gap:`${t.gap}px`,padding:`${t.gap/2}px`})),a=(0,n.computed)(()=>({fontSize:`${t.fontSize}px`,color:t.color,transform:`rotate(${t.rotate}deg)`,userSelect:`none`,whiteSpace:`nowrap`,lineHeight:1}));return(t,o)=>e.visible&&e.text?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`vp-watermark`,style:(0,n.normalizeStyle)(i.value)},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(r.value,t=>((0,n.openBlock)(),(0,n.createElementBlock)(`span`,{key:t,class:`vp-watermark-item`,style:(0,n.normalizeStyle)(a.value)},(0,n.toDisplayString)(e.text),5))),128))],4)):(0,n.createCommentVNode)(`v-if`,!0)}});var Se=e.t(xe,[[`__scopeId`,`data-v-9a051cb4`]]);const Ce=(0,n.defineComponent)({name:`C_VideoPlayer`,__name:`index`,props:{url:{},sourceType:{},width:{},height:{},poster:{},fluid:{type:Boolean},autoplay:{type:Boolean},autoplayMuted:{type:Boolean},loop:{type:Boolean},volume:{},startTime:{},playbackRates:{},defaultPlaybackRate:{},pip:{type:Boolean},fullscreen:{type:Boolean},cssFullscreen:{type:Boolean},miniPlayer:{type:Boolean},screenshot:{type:Boolean},keyboard:{type:Boolean},lang:{},qualityList:{},defaultQuality:{},chapters:{},subtitles:{},quizzes:{},bookmarks:{},thumbnail:{},onProgress:{type:Function},antiCheat:{},onAnalytics:{type:Function},playerOptions:{}},emits:[`ready`,`stateChange`,`timeUpdate`,`ended`,`error`,`qualityChange`,`rateChange`,`fullscreenChange`,`bookmarkChange`,`quizAnswer`,`chapterChange`,`progressUpdate`],setup(e,{expose:t,emit:r}){let i=e,a=r,o=_(i),{containerRef:s,playerRef:c,playerState:l,currentTime:u,duration:d,isFullscreen:f}=o,p=(0,n.ref)(null),h=v(c),g=(0,n.toRef)(i,`url`),y=x(c,u,d,g,i.onProgress,i.antiCheat),b=C(c,i.qualityList),S=(0,n.computed)(()=>i.chapters??[]),D=w(S,u,d,h.seek),O=T(g,u,h.seek,i.bookmarks),k=E(c,u,i.antiCheat),A=j(c,i.subtitles,u),F=M(c,u,(0,n.computed)(()=>i.quizzes??[])),I=N(p,(0,n.computed)(()=>i.miniPlayer??!1)),L=P(c,p,{enabled:i.keyboard!==!1,onToggleFullscreen:()=>{c.value?.getFullscreen?.()}}),R=null,z=!1;function B(e){O.addBookmark(e),a(`bookmarkChange`,O.bookmarks.value)}function V(){let e=F.submitAnswer(),t=F.activeQuiz.value;t&&a(`quizAnswer`,t.id,F.selectedAnswer.value,e)}function H(){F.closeQuiz()}return(0,n.watch)(l,e=>{a(`stateChange`,e)}),(0,n.watch)(f,e=>{a(`fullscreenChange`,e)}),(0,n.watch)(()=>D.currentChapter.value,e=>{e&&a(`chapterChange`,e)}),(0,n.onMounted)(async()=>{if(o.containerRef.value=s.value,await(0,n.nextTick)(),z)return;try{await o.initPlayer()}catch(e){z||a(`error`,e instanceof Error?e:Error(String(e)));return}if(z)return;let e=c.value;if(!e)return;b.bindEvents(e),k.bindEvents(e),A.initSubtitles(),L.startListening(),I.initObserver();let t=y.restoreProgress();t>0&&i.startTime===void 0&&(e.currentTime=t),e.on(m.PLAY,()=>{y.onPlay()}),e.on(m.PAUSE,()=>{y.onPause()}),e.on(m.TIME_UPDATE,()=>{y.onTimeUpdate(),a(`timeUpdate`,u.value,d.value),a(`progressUpdate`,y.getProgressData())}),e.on(m.ENDED,()=>{a(`ended`),k.markAsWatched()}),e.on(m.ERROR,()=>{a(`error`,Error(`播放器错误`))}),e.on(m.READY,()=>{a(`ready`)}),e.on(m.AFTER_DEFINITION_CHANGE,e=>{a(`qualityChange`,e.to)}),e.on(m.RATE_CHANGE,e=>{a(`rateChange`,e)}),i.onAnalytics&&(R=ee(e,i.onAnalytics).destroy)}),(0,n.onBeforeUnmount)(()=>{z=!0,R?.(),L.stopListening(),I.destroyObserver()}),t({play:h.play,pause:h.pause,seek:h.seek,setPlaybackRate:h.setPlaybackRate,setVolume:h.setVolume,switchQuality:b.switchQuality,getProgressData:y.getProgressData,destroy:o.destroyPlayer,getPlayerInstance:()=>c.value}),(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{ref_key:`wrapperRef`,ref:p,class:(0,n.normalizeClass)([`c-video-player`,{"is-mini":(0,n.unref)(I).isMiniMode.value,"is-fullscreen":(0,n.unref)(f)}]),tabindex:`0`},[(0,n.createCommentVNode)(` 播放器容器 `),(0,n.createElementVNode)(`div`,{ref_key:`containerRef`,ref:s,class:`c-video-player__container`},null,512),(0,n.createCommentVNode)(` 动态水印 `),(0,n.createVNode)(Se,{visible:(0,n.unref)(k).showWatermark.value,text:(0,n.unref)(k).watermarkText.value},null,8,[`visible`,`text`]),(0,n.createCommentVNode)(` 字幕渲染层 `),(0,n.createVNode)(K,{text:(0,n.unref)(A).currentText.value,tracks:(0,n.unref)(A).subtitleList.value,"active-language":(0,n.unref)(A).activeLanguage.value,onSwitch:(0,n.unref)(A).switchSubtitle,onClose:(0,n.unref)(A).closeSubtitle},null,8,[`text`,`tracks`,`active-language`,`onSwitch`,`onClose`]),(0,n.createCommentVNode)(` 测验弹窗 `),i.quizzes?.length?((0,n.openBlock)(),(0,n.createBlock)(be,{key:0,answer:(0,n.unref)(F).selectedAnswer.value,"onUpdate:answer":t[0]||=e=>(0,n.unref)(F).selectedAnswer.value=e,quiz:(0,n.unref)(F).activeQuiz.value,"show-result":(0,n.unref)(F).showResult.value,"is-correct":(0,n.unref)(F).lastAnswerCorrect.value,onSubmit:V,onRetry:t[1]||=e=>(0,n.unref)(F).retryQuiz(),onClose:H},null,8,[`answer`,`quiz`,`show-result`,`is-correct`])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 扩展控制栏(xgplayer 自带控制栏外的扩展) `),(0,n.createVNode)(te,{visible:!0},{left:(0,n.withCtx)(()=>[(0,n.createCommentVNode)(` 章节标记 `),i.chapters?.length?((0,n.openBlock)(),(0,n.createBlock)(oe,{key:0,chapters:S.value,"current-chapter":(0,n.unref)(D).currentChapter.value,"current-index":(0,n.unref)(D).currentChapterIndex.value,onGoTo:(0,n.unref)(D).goToChapter},null,8,[`chapters`,`current-chapter`,`current-index`,`onGoTo`])):(0,n.createCommentVNode)(`v-if`,!0)]),right:(0,n.withCtx)(()=>[(0,n.createCommentVNode)(` 书签面板 `),(0,n.createVNode)(fe,{bookmarks:(0,n.unref)(O).bookmarks.value,onAdd:B,onRemove:(0,n.unref)(O).removeBookmark,onGoTo:(0,n.unref)(O).goToBookmark},null,8,[`bookmarks`,`onRemove`,`onGoTo`])]),_:1}),(0,n.createCommentVNode)(` 小窗关闭按钮 `),(0,n.unref)(I).isMiniMode.value?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:1,type:`button`,class:`c-video-player__mini-close`,"aria-label":`关闭小窗播放`,onClick:t[2]||=e=>(0,n.unref)(I).closeMiniPlayer()},` ✕ `)):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createCommentVNode)(` 小窗点击回原位 `),(0,n.unref)(I).isMiniMode.value?((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:2,type:`button`,class:`c-video-player__mini-back`,onClick:t[3]||=e=>(0,n.unref)(I).scrollToPlayer()},` 回到原位 `)):(0,n.createCommentVNode)(`v-if`,!0)],2))}});var we=e.t(Ce,[[`__scopeId`,`data-v-e6dc58ed`]]);Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return 5}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 1}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return d}});
|
package/dist/C_VideoPlayer2.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./export-helper.js";import{i as t,t as n}from"./storage.js";import{Fragment as r,Transition as i,computed as a,createBlock as o,createCommentVNode as s,createElementBlock as c,createElementVNode as l,createTextVNode as u,createVNode as d,defineComponent as f,mergeModels as p,nextTick as m,normalizeClass as h,normalizeStyle as g,onBeforeUnmount as _,onMounted as v,openBlock as y,ref as b,renderList as x,renderSlot as S,resolveComponent as C,shallowRef as w,toDisplayString as T,toRef as E,unref as D,useModel as O,watch as k,withCtx as A}from"vue";import{NBadge as j,NButton as M,NCheckbox as N,NCheckboxGroup as P,NPopover as F,NRadio as I,NRadioGroup as L}from"naive-ui";const R=[.5,.75,1,1.25,1.5,2,3],z=1,B=.75,V=3e4,H=5e3,U={"360p":`流畅 360P`,"480p":`标清 480P`,"720p":`高清 720P`,"1080p":`超清 1080P`,"1440p":`2K 1440P`,"4K":`4K 超高清`},W={".mp4":`mp4`,".m3u8":`hls`,".mpd":`dash`,".flv":`flv`},G={SPACE:`播放/暂停`,ARROW_LEFT:`快退 5 秒`,ARROW_RIGHT:`快进 5 秒`,ARROW_UP:`音量增加 10%`,ARROW_DOWN:`音量减少 10%`,F:`全屏/退出全屏`,M:`静音/取消静音`,ESC:`退出全屏`},ee=5,K=.1,q=`c_video_player_`,J={VOLUME:`${q}volume`,PLAYBACK_RATE:`${q}playback_rate`,PROGRESS:`${q}progress_`,BOOKMARKS:`${q}bookmarks_`},Y={READY:`ready`,PLAY:`play`,PAUSE:`pause`,ENDED:`ended`,ERROR:`error`,SEEKING:`seeking`,SEEKED:`seeked`,TIME_UPDATE:`timeupdate`,WAITING:`waiting`,DURATION_CHANGE:`durationchange`,RATE_CHANGE:`ratechange`,FULLSCREEN_CHANGE:`fullscreen_change`,DEFINITION_CHANGE:`definition_change`,BEFORE_DEFINITION_CHANGE:`before_definition_change`,AFTER_DEFINITION_CHANGE:`after_definition_change`},X={fontSize:14,color:`rgba(150, 150, 150, 0.15)`,rotate:-25,gap:120};function te(e){try{let{pathname:t}=new URL(e,location.href);return W[t.slice(t.lastIndexOf(`.`)).toLowerCase()]??`mp4`}catch{return`mp4`}}function Z(e){let t=b(null),n=w(null),r=b(`idle`),i=b(0),a=b(0),o=b(!1),s=0,c=!1;function l(){return{el:t.value,url:e.url,width:e.width??`100%`,height:e.height??`100%`,fluid:e.fluid!==!1,fitVideoSize:`fixWidth`,poster:e.poster??``,playsinline:!0,videoAttributes:{crossOrigin:`anonymous`},lang:e.lang??`zh-cn`,inactive:3e3}}function u(){return{autoplay:e.autoplay??!1,autoplayMuted:e.autoplayMuted??!1,loop:e.loop??!1,volume:e.volume??B,startTime:e.startTime??0,defaultPlaybackRate:e.defaultPlaybackRate??1,playbackRate:e.playbackRates?{list:e.playbackRates.map(e=>e)}:!0}}function d(){return{pip:e.pip!==!1,screenShot:e.screenshot??!1,mini:e.miniPlayer??!1,fullscreen:e.fullscreen!==!1,cssFullscreen:e.cssFullscreen!==!1,keyShortcut:!1}}function f(t){e.thumbnail&&(t.thumbnail={urls:e.thumbnail.urls,pic_num:e.thumbnail.picNum,col:e.thumbnail.col,row:e.thumbnail.row,width:e.thumbnail.width,height:e.thumbnail.height}),e.qualityList?.length&&(t.definition={list:e.qualityList.map(e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate})),defaultDefinition:e.defaultQuality??e.qualityList[0].label}),e.playerOptions&&Object.assign(t,e.playerOptions)}function p(){let t=e.sourceType??te(e.url),n={...l(),...u(),...d()};return f(n),n.__sourceType=t,n}async function m(){if(c||!t.value)return;let e=++s;r.value=`loading`;let l=p(),u=l.__sourceType;delete l.__sourceType;let d;try{if(u===`hls`){let{default:e}=await import(`xgplayer-hls`);d=e}else{let{default:e}=await import(`xgplayer`);d=e}if(c||e!==s||!t.value)return;n.value=new d(l)}catch(t){if(c||e!==s)return;throw r.value=`error`,t}let f=n.value;f.on(Y.READY,()=>{r.value=`ready`}),f.on(Y.PLAY,()=>{r.value=`playing`}),f.on(Y.PAUSE,()=>{r.value=`paused`}),f.on(Y.ENDED,()=>{r.value=`ended`}),f.on(Y.ERROR,()=>{r.value=`error`}),f.on(Y.TIME_UPDATE,()=>{i.value=f.currentTime??0,a.value=f.duration??0}),f.on(Y.DURATION_CHANGE,()=>{a.value=f.duration??0}),f.on(Y.FULLSCREEN_CHANGE,e=>{o.value=e})}function h(){s++;let e=n.value;e&&(e.destroy(),n.value=null),r.value=`idle`,i.value=0,a.value=0,o.value=!1}return _(()=>{c=!0,h()}),{containerRef:t,playerRef:n,playerState:r,currentTime:i,duration:a,isFullscreen:o,initPlayer:m,destroyPlayer:h}}function Q(e){let n=b(ne()),r=b(re()),i=b(!1);function a(){e.value?.play()}function o(){e.value?.pause()}function s(){let t=e.value;t&&(t.paused?t.play():t.pause())}function c(t){let n=e.value;n&&(n.currentTime=Math.max(0,Math.min(t,n.duration??0)))}function l(r){let a=e.value;if(!a)return;let o=Math.max(0,Math.min(1,r));a.volume=o,n.value=o,i.value=o===0,t(J.VOLUME,o)}function u(){let t=e.value;t&&(i.value?l(n.value>0?n.value:.5):(t.volume=0,i.value=!0))}function d(n){let i=e.value;i&&(i.playbackRate=n,r.value=n,t(J.PLAYBACK_RATE,n))}function f(){let t=e.value;t&&(t.volume=n.value,t.playbackRate=r.value,i.value=n.value===0)}return k(e,e=>{e&&f()}),{volume:n,playbackRate:r,isMuted:i,play:a,pause:o,togglePlay:s,seek:c,setVolume:l,toggleMute:u,setPlaybackRate:d}}function ne(){let e=Number(n(J.VOLUME));return Number.isFinite(e)&&e>=0&&e<=1?e:.75}function re(){let e=Number(n(J.PLAYBACK_RATE));return Number.isFinite(e)&&e>0?e:1}function ie(e,r,i,a,o,s){let c=b(0),l=b(0),u=0,d=!1,f=null,p=null;function m(){return J.PROGRESS+encodeURIComponent(a.value)}function h(){let e=n(m());return!e||typeof e!=`object`?0:(c.value=$(e.watchedDuration),l.value=Math.min(100,$(e.completionPercent)),$(e.currentTime))}function g(){return{currentTime:r.value,duration:i.value,watchedDuration:c.value,completionPercent:l.value,updatedAt:Date.now()}}function v(){t(m(),g())}function y(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function x(){y(o,g()),v()}function S(){if(!d)return;let e=performance.now();if(u>0){let t=(e-u)/1e3;t>0&&t<5&&(c.value+=t)}u=e,i.value>0&&(l.value=Math.min(100,Math.round(c.value/i.value*100)))}function C(){let e=s?.heartbeatInterval??V;!Number.isFinite(e)||e<=0||(f=setInterval(()=>{d&&y(s?.onHeartbeat,g())},e))}function w(){p=setInterval(()=>{d&&x()},H)}function T(){let e=g();v(),y(o,e)}function E(){if(document.hidden)S(),x(),d=!1;else{let t=e.value;t&&!t.paused&&(d=!0,u=performance.now())}}function D(){A(),C(),w(),window.addEventListener(`beforeunload`,T),document.addEventListener(`visibilitychange`,E)}function O(){d=!1,A(),v()}function A(){f&&=(clearInterval(f),null),p&&=(clearInterval(p),null),window.removeEventListener(`beforeunload`,T),document.removeEventListener(`visibilitychange`,E)}function j(){d=!0,u=performance.now()}function M(){S(),d=!1,u=0,v()}function N(){S()}return k(e,e=>{e?D():A()}),_(()=>{O()}),{watchedDuration:c,completionPercent:l,getProgressData:g,restoreProgress:h,saveProgress:v,startTracking:D,stopTracking:O,onPlay:j,onPause:M,onTimeUpdate:N}}function $(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function ae(e,t=[]){let n=b(null),r=b(!1);function i(e){e.on(Y.AFTER_DEFINITION_CHANGE,e=>{n.value=e.to,r.value=!1}),e.on(Y.BEFORE_DEFINITION_CHANGE,()=>{r.value=!0})}function a(n){let i=e.value;if(!i||!t.length)return;let a=t.find(e=>e.label===n);if(!a){console.warn(`[C_VideoPlayer] 未找到清晰度: ${n}`);return}r.value=!0,i.changeDefinition?.({url:a.url,definition:a.label,text:{zh:a.label,en:a.label},bitrate:a.bitrate})}return{currentQuality:n,isSwitching:r,switchQuality:a,bindEvents:i}}function oe(e,t,n,r){let i=a(()=>{if(!e.value.length)return null;let n=t.value;return e.value.find(e=>n>=e.startTime&&n<e.endTime)??null}),o=a(()=>i.value?e.value.findIndex(e=>e.id===i.value.id):-1),s=a(()=>!n.value||!e.value.length?[]:e.value.map(e=>({...e,startPercent:e.startTime/n.value*100,endPercent:e.endTime/n.value*100,widthPercent:(e.endTime-e.startTime)/n.value*100})));function c(t){let n=e.value.find(e=>e.id===t);n&&r(n.startTime)}function l(){let t=o.value;t>0&&r(e.value[t-1].startTime)}function u(){let t=o.value;t>=0&&t<e.value.length-1&&r(e.value[t+1].startTime)}return{currentChapter:i,currentChapterIndex:o,chapterMarkers:s,goToChapter:c,prevChapter:l,nextChapter:u}}function se(e,r,i,a=[]){let o=b([...a]);function s(){return J.BOOKMARKS+encodeURIComponent(e.value)}function c(){let e=n(s());Array.isArray(e)&&(o.value=e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.time==`number`&&Number.isFinite(e.time)&&typeof e.note==`string`&&typeof e.createdAt==`number`),u())}function l(){t(s(),o.value)}function u(){o.value.sort((e,t)=>e.time-t.time)}function d(e=``){let t={id:typeof crypto<`u`&&`randomUUID`in crypto?`bm_${crypto.randomUUID()}`:`bm_${Date.now()}_${o.value.length}`,time:r.value,note:e,createdAt:Date.now()};return o.value.push(t),u(),l(),t}function f(e){let t=o.value.findIndex(t=>t.id===e);t!==-1&&(o.value.splice(t,1),l())}function p(e,t){let n=o.value.find(t=>t.id===e);n&&(n.note=t,l())}function m(e){let t=o.value.find(t=>t.id===e);t&&i(t.time)}function h(){o.value=[],l()}return a.length||c(),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:p,goToBookmark:m,clearBookmarks:h}}function ce(e,t,n){let r=b(0),i=b(!0),a=b(!1),o=b(n?.watermark??!1),s=b(n?.watermarkText??``);function c(e){e>r.value&&(r.value=e)}function l(e){!n?.preventSeekOnFirstWatch||!i.value||(e.currentTime??0)>r.value+2&&(e.currentTime=r.value)}function u(){if(!n?.focusDetection)return;let t=e.value;t&&(document.hidden?(a.value=!0,t.paused||t.pause()):a.value=!1)}function d(e){n?.preventSeekOnFirstWatch&&e.on(Y.SEEKING,()=>l(e)),e.on(Y.TIME_UPDATE,()=>{c(t.value)}),n?.focusDetection&&document.addEventListener(`visibilitychange`,u)}function f(){i.value=!1}function p(e){s.value=e}return _(()=>{document.removeEventListener(`visibilitychange`,u)}),{maxWatchedTime:r,isFirstWatch:i,isBlurred:a,showWatermark:o,watermarkText:s,bindEvents:d,markAsWatched:f,setWatermarkText:p}}function le(e){let t=e.trim().split(`:`);return t.length===3?Number(t[0])*3600+Number(t[1])*60+Number(t[2]):Number(t[0])*60+Number(t[1])}function ue(e){let t=[],n=e.trim().split(/\n\s*\n/);for(let e of n){let n=e.trim().split(`
|
|
2
|
-
`)
|
|
3
|
-
`).replace(/<[^>]+>/g,``).trim();c&&t.push({start:o,end:s,text:c})}return t}function de(e,t=[],n=b(0)){let r=b(null),i=b([...t]),o=b({}),s=b(!1),c=a(()=>{if(!r.value)return``;let e=o.value[r.value];if(!e?.length)return``;let t=n.value;return e.find(e=>t>=e.start&&t<e.end)?.text??``}),l=a(()=>i.value.length>0);async function u(e){if(o.value[e])return o.value[e];let t=i.value.find(t=>t.language===e);if(!t)return[];s.value=!0;try{let n=await fetch(t.src);if(!n.ok)return console.warn(`[C_VideoPlayer] 字幕加载失败: ${t.src} (${n.status})`),[];let r=ue(await n.text());return o.value[e]=r,r}catch(e){return console.warn(`[C_VideoPlayer] 字幕加载异常:`,e),[]}finally{s.value=!1}}async function d(){if(!i.value.length)return;let e=i.value.find(e=>e.default)??i.value[0];await u(e.language),r.value=e.language}async function f(e){if(!i.value.find(t=>t.language===e)){console.warn(`[C_VideoPlayer] 未找到字幕轨道: ${e}`);return}await u(e),r.value=e}function p(){r.value=null}function m(){if(r.value)p();else{let e=i.value.find(e=>e.default)??i.value[0];e&&f(e.language)}}return{activeLanguage:r,subtitleList:i,currentText:c,hasSubtitles:l,isLoading:s,initSubtitles:d,switchSubtitle:f,closeSubtitle:p,toggleSubtitle:m}}function fe(e,t,n){let r=b(null),i=b(new Set),a=b(``),o=b(!1),s=b(!1);function c(){if(r.value||!n.value.length)return;let e=t.value,a=n.value.find(t=>!i.value.has(t.id)&&Math.abs(e-t.triggerTime)<1);a&&l(a)}function l(t){r.value=t,a.value=t.type===`multiple`?[]:``,o.value=!1,s.value=!1,e.value?.pause()}function u(){if(!r.value)return!1;let e=r.value,t=p(e,a.value);return s.value=t,o.value=!0,(t||!e.required)&&i.value.add(e.id),t}function d(){if(!r.value)return;let t=r.value;t.required&&!i.value.has(t.id)||(r.value=null,o.value=!1,a.value=``,e.value?.play())}function f(){r.value&&(a.value=r.value.type===`multiple`?[]:``,o.value=!1,s.value=!1)}function p(e,t){if(e.type===`multiple`){let n=Array.isArray(t)?[...t].sort():[t],r=Array.isArray(e.answer)?[...e.answer].sort():[e.answer];return n.length===r.length&&n.every((e,t)=>e===r[t])}return t===e.answer}return k(t,()=>{c()}),{activeQuiz:r,completedQuizIds:i,selectedAnswer:a,showResult:o,lastAnswerCorrect:s,submitAnswer:u,closeQuiz:d,retryQuiz:f}}function pe(e,t){let n=b(!1),r=null;function i(){!e.value||!t.value||(r=new IntersectionObserver(([e])=>{n.value=!e.isIntersecting},{threshold:.3}),r.observe(e.value))}function a(){r&&=(r.disconnect(),null),n.value=!1}function o(){e.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function s(){n.value=!1,a()}return _(()=>{a()}),{isMiniMode:n,initObserver:i,destroyObserver:a,scrollToPlayer:o,closeMiniPlayer:s}}function me(e,t,n={}){let{enabled:r=!0,onToggleFullscreen:i}=n,a={" ":(e,t)=>{e.preventDefault(),t.paused?t.play():t.pause()},ArrowLeft:(e,t)=>{e.preventDefault(),t.currentTime=Math.max(0,(t.currentTime??0)-5)},ArrowRight:(e,t)=>{e.preventDefault(),t.currentTime=Math.min(t.duration??0,(t.currentTime??0)+5)},ArrowUp:(e,t)=>{e.preventDefault(),t.volume=Math.min(1,(t.volume??0)+K)},ArrowDown:(e,t)=>{e.preventDefault(),t.volume=Math.max(0,(t.volume??0)-K)},f:e=>{e.preventDefault(),i?.()},F:e=>{e.preventDefault(),i?.()},m:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75},M:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75}};function o(t){if(!r)return;let n=e.value;if(!n)return;let i=t.target;if(i.tagName===`INPUT`||i.tagName===`TEXTAREA`||i.isContentEditable)return;let o=a[t.key];o?.(t,n)}function s(){r&&t.value?.addEventListener(`keydown`,o)}function c(){t.value?.removeEventListener(`keydown`,o)}return _(()=>{c()}),{startListening:s,stopListening:c}}function he(e,t){function n(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function r(e,r){t(n(e,r))}let i=()=>r(`play`),a=()=>r(`pause`),o=()=>r(`ended`),s=()=>r(`seek`),c=()=>r(`error`),l=()=>r(`buffer`),u=e=>{r(`fullscreen`,{isFullscreen:e})},d=e=>{r(`quality_change`,e)},f=()=>{r(`speed_change`,{rate:e.playbackRate})};e.on(Y.PLAY,i),e.on(Y.PAUSE,a),e.on(Y.ENDED,o),e.on(Y.SEEKED,s),e.on(Y.ERROR,c),e.on(Y.WAITING,l),e.on(Y.FULLSCREEN_CHANGE,u),e.on(Y.DEFINITION_CHANGE,d),e.on(Y.RATE_CHANGE,f);function p(){e.off(Y.PLAY,i),e.off(Y.PAUSE,a),e.off(Y.ENDED,o),e.off(Y.SEEKED,s),e.off(Y.ERROR,c),e.off(Y.WAITING,l),e.off(Y.FULLSCREEN_CHANGE,u),e.off(Y.DEFINITION_CHANGE,d),e.off(Y.RATE_CHANGE,f)}return{report:r,destroy:p}}const ge={key:0,class:`vp-control-bar`},_e={class:`vp-control-bar__left`},ve={class:`vp-control-bar__center`},ye={class:`vp-control-bar__right`};var be=e(f({__name:`ControlBar`,props:{visible:{type:Boolean,default:!0}},setup(e){return(t,n)=>e.visible?(y(),c(`div`,ge,[l(`div`,_e,[S(t.$slots,`left`,{},void 0,!0)]),l(`div`,ve,[S(t.$slots,`center`,{},void 0,!0)]),l(`div`,ye,[S(t.$slots,`right`,{},void 0,!0)])])):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-e8b787cf`]]);const xe={key:0,class:`vp-subtitle-overlay`},Se={class:`vp-subtitle-text`},Ce={key:0,class:`vp-subtitle-toggle`},we={class:`vp-subtitle-menu`},Te=[`onClick`];var Ee=e(f({__name:`SubtitleOverlay`,props:{text:{},tracks:{},activeLanguage:{}},emits:[`switch`,`close`],setup(e){return(t,n)=>{let a=M,o=F;return y(),c(r,null,[s(` 字幕文本 `),d(i,{name:`vp-subtitle-fade`},{default:A(()=>[e.text?(y(),c(`div`,xe,[l(`span`,Se,T(e.text),1)])):s(`v-if`,!0)]),_:1}),s(` 字幕切换按钮(叠加在播放器控制栏上方) `),e.tracks.length?(y(),c(`div`,Ce,[d(o,{trigger:`click`,placement:`top`,"show-arrow":!1},{trigger:A(()=>[d(a,{quaternary:``,size:`small`,class:h([`vp-subtitle-btn`,{"is-active":!!e.activeLanguage}])},{default:A(()=>[...n[1]||=[u(` 字幕 `,-1)]]),_:1},8,[`class`])]),default:A(()=>[l(`div`,we,[l(`div`,{class:h([`vp-subtitle-menu__item`,{"is-active":!e.activeLanguage}]),onClick:n[0]||=e=>t.$emit(`close`)},` 关闭字幕 `,2),(y(!0),c(r,null,x(e.tracks,n=>(y(),c(`div`,{key:n.language,class:h([`vp-subtitle-menu__item`,{"is-active":e.activeLanguage===n.language}]),onClick:e=>t.$emit(`switch`,n.language)},T(n.label),11,Te))),128))])]),_:1})])):s(`v-if`,!0)],64)}}}),[[`__scopeId`,`data-v-20ac6438`]]);const De={key:0,class:`vp-chapter-markers`},Oe={key:0,class:`vp-chapter-current`},ke={class:`vp-chapter-index`},Ae={class:`vp-chapter-title`},je={class:`vp-chapter-list`},Me=[`onClick`],Ne={class:`vp-chapter-item-index`},Pe={class:`vp-chapter-item-title`},Fe={class:`vp-chapter-item-time`};var Ie=e(f({__name:`ChapterMarkers`,props:{chapters:{},currentChapter:{},currentIndex:{}},emits:[`goTo`],setup(e){function t(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(n,i)=>{let a=M,o=F;return e.chapters.length?(y(),c(`div`,De,[s(` 当前章节信息 `),e.currentChapter?(y(),c(`div`,Oe,[l(`span`,ke,T(e.currentIndex+1)+`/`+T(e.chapters.length),1),l(`span`,Ae,T(e.currentChapter.title),1)])):s(`v-if`,!0),s(` 章节列表面板 `),d(o,{trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:A(()=>[d(a,{quaternary:``,size:`small`,class:`vp-chapter-trigger`},{icon:A(()=>[...i[0]||=[l(`span`,{class:`vp-chapter-icon`},`☰`,-1)]]),default:A(()=>[i[1]||=u(` 章节 `,-1)]),_:1})]),default:A(()=>[l(`div`,je,[(y(!0),c(r,null,x(e.chapters,(r,i)=>(y(),c(`div`,{key:r.id,class:h([`vp-chapter-item`,{"is-active":r.id===e.currentChapter?.id}]),onClick:e=>n.$emit(`goTo`,r.id)},[l(`span`,Ne,T(i+1),1),l(`span`,Pe,T(r.title),1),l(`span`,Fe,T(t(r.startTime)),1)],10,Me))),128))])]),_:1})])):s(`v-if`,!0)}}}),[[`__scopeId`,`data-v-8828163e`]]);const Le={class:`vp-bookmark-panel`},Re={class:`vp-bookmark-list`},ze=[`aria-label`,`onClick`],Be={class:`vp-bookmark-note`};var Ve=e(f({__name:`BookmarkPanel`,props:{bookmarks:{}},emits:[`add`,`remove`,`goTo`],setup(e,{emit:t}){let n=t;function i(){n(`add`,``)}function a(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(t,n)=>{let f=M,p=j,m=F;return y(),c(`div`,Le,[s(` 添加书签按钮 `),d(f,{quaternary:``,size:`small`,class:`vp-bookmark-add-btn`,onClick:i},{icon:A(()=>[...n[0]||=[l(`span`,null,`🔖`,-1)]]),default:A(()=>[n[1]||=u(` 书签 `,-1)]),_:1}),s(` 书签列表弹窗 `),e.bookmarks.length?(y(),o(m,{key:0,trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:A(()=>[d(p,{value:e.bookmarks.length,max:99,type:`info`},{default:A(()=>[d(f,{quaternary:``,size:`small`,class:`vp-bookmark-list-btn`},{default:A(()=>[...n[2]||=[u(` 列表 `,-1)]]),_:1})]),_:1},8,[`value`])]),default:A(()=>[l(`div`,Re,[(y(!0),c(r,null,x(e.bookmarks,e=>(y(),c(`div`,{key:e.id,class:`vp-bookmark-item`},[l(`button`,{type:`button`,class:`vp-bookmark-time`,"aria-label":`跳转到 ${a(e.time)}`,onClick:n=>t.$emit(`goTo`,e.id)},T(a(e.time)),9,ze),l(`span`,Be,T(e.note||`无备注`),1),d(f,{quaternary:``,size:`tiny`,type:`error`,onClick:n=>t.$emit(`remove`,e.id)},{default:A(()=>[...n[3]||=[u(` ✕ `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})):s(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-29942590`]]);const He={key:0,class:`vp-quiz-overlay`},Ue={class:`vp-quiz-card`},We={class:`vp-quiz-header`},Ge={class:`vp-quiz-type-tag`},Ke={class:`vp-quiz-title`},qe={class:`vp-quiz-options`},Je={class:`vp-quiz-actions`};var Ye=e(f({__name:`QuizOverlay`,props:p({quiz:{},showResult:{type:Boolean,default:!1},isCorrect:{type:Boolean,default:!1}},{answer:{default:``},answerModifiers:{}}),emits:p([`submit`,`retry`,`close`],[`update:answer`]),setup(e){let t=e,n=b(``),f=b([]),p=O(e,`answer`),m=a(()=>({single:`单选题`,multiple:`多选题`,judge:`判断题`})[t.quiz?.type??`single`]??`单选题`),g=a(()=>t.quiz?.type===`multiple`?f.value.length>0:n.value!==``);return k(n,e=>{t.quiz?.type!==`multiple`&&(p.value=e)}),k(f,e=>{t.quiz?.type===`multiple`&&(p.value=[...e])}),k(()=>t.quiz?.id,()=>{n.value=``,f.value=[]}),(t,a)=>{let p=N,_=P,v=I,b=L,S=M;return y(),o(i,{name:`vp-quiz-fade`},{default:A(()=>[e.quiz?(y(),c(`div`,He,[l(`div`,Ue,[s(` 标题 `),l(`div`,We,[l(`span`,Ge,T(m.value),1),l(`h3`,Ke,T(e.quiz.title),1)]),s(` 选项 `),l(`div`,qe,[e.quiz.type===`multiple`?(y(),o(_,{key:0,value:f.value,"onUpdate:value":a[0]||=e=>f.value=e,disabled:e.showResult},{default:A(()=>[(y(!0),c(r,null,x(e.quiz.options,e=>(y(),c(`div`,{key:e.key,class:`vp-quiz-option`},[d(p,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`])):(y(),o(b,{key:1,value:n.value,"onUpdate:value":a[1]||=e=>n.value=e,disabled:e.showResult},{default:A(()=>[(y(!0),c(r,null,x(e.quiz.options,e=>(y(),c(`div`,{key:e.key,class:`vp-quiz-option`},[d(v,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`]))]),s(` 结果反馈 `),e.showResult?(y(),c(`div`,{key:0,class:h([`vp-quiz-result`,e.isCorrect?`is-correct`:`is-wrong`])},T(e.isCorrect?`✓ 回答正确!`:`✗ 回答错误,请重试`),3)):s(`v-if`,!0),s(` 操作按钮 `),l(`div`,Je,[e.showResult?(y(),c(r,{key:1},[!e.isCorrect&&e.quiz.required?(y(),o(S,{key:0,type:`warning`,onClick:a[3]||=e=>t.$emit(`retry`)},{default:A(()=>[...a[6]||=[u(` 重新作答 `,-1)]]),_:1})):s(`v-if`,!0),e.isCorrect||!e.quiz.required?(y(),o(S,{key:1,type:`primary`,onClick:a[4]||=e=>t.$emit(`close`)},{default:A(()=>[...a[7]||=[u(` 继续学习 `,-1)]]),_:1})):s(`v-if`,!0)],64)):(y(),o(S,{key:0,type:`primary`,disabled:!g.value,onClick:a[2]||=e=>t.$emit(`submit`)},{default:A(()=>[...a[5]||=[u(` 提交答案 `,-1)]]),_:1},8,[`disabled`]))])])])):s(`v-if`,!0)]),_:1})}}}),[[`__scopeId`,`data-v-1132a37b`]]),Xe=e(f({__name:`WatermarkOverlay`,props:{visible:{type:Boolean,default:!0},text:{default:``},fontSize:{default:X.fontSize},color:{default:X.color},rotate:{default:X.rotate},gap:{default:X.gap}},setup(e){let t=e,n=a(()=>{let e=t.gap*t.gap;return Math.ceil(2073600/e)}),i=a(()=>({position:`absolute`,inset:0,overflow:`hidden`,pointerEvents:`none`,zIndex:50,display:`flex`,flexWrap:`wrap`,alignContent:`flex-start`,gap:`${t.gap}px`,padding:`${t.gap/2}px`})),o=a(()=>({fontSize:`${t.fontSize}px`,color:t.color,transform:`rotate(${t.rotate}deg)`,userSelect:`none`,whiteSpace:`nowrap`,lineHeight:1}));return(t,a)=>e.visible&&e.text?(y(),c(`div`,{key:0,class:`vp-watermark`,style:g(i.value)},[(y(!0),c(r,null,x(n.value,t=>(y(),c(`span`,{key:t,class:`vp-watermark-item`,style:g(o.value)},T(e.text),5))),128))],4)):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-9a051cb4`]]),Ze=e(f({name:`C_VideoPlayer`,__name:`index`,props:{url:{},sourceType:{},width:{},height:{},poster:{},fluid:{type:Boolean},autoplay:{type:Boolean},autoplayMuted:{type:Boolean},loop:{type:Boolean},volume:{},startTime:{},playbackRates:{},defaultPlaybackRate:{},pip:{type:Boolean},fullscreen:{type:Boolean},cssFullscreen:{type:Boolean},miniPlayer:{type:Boolean},screenshot:{type:Boolean},keyboard:{type:Boolean},lang:{},qualityList:{},defaultQuality:{},chapters:{},subtitles:{},quizzes:{},bookmarks:{},thumbnail:{},onProgress:{type:Function},antiCheat:{},onAnalytics:{type:Function},playerOptions:{}},emits:[`ready`,`stateChange`,`timeUpdate`,`ended`,`error`,`qualityChange`,`rateChange`,`fullscreenChange`,`bookmarkChange`,`quizAnswer`,`chapterChange`,`progressUpdate`],setup(e,{expose:t,emit:n}){let r=e,i=n,u=Z(r),{containerRef:f,playerRef:p,playerState:g,currentTime:x,duration:S,isFullscreen:C}=u,w=b(null),T=Q(p),O=E(r,`url`),j=ie(p,x,S,O,r.onProgress,r.antiCheat),M=ae(p,r.qualityList),N=a(()=>r.chapters??[]),P=oe(N,x,S,T.seek),F=se(O,x,T.seek,r.bookmarks),I=ce(p,x,r.antiCheat),L=de(p,r.subtitles,x),R=fe(p,x,a(()=>r.quizzes??[])),z=pe(w,a(()=>r.miniPlayer??!1)),B=me(p,w,{enabled:r.keyboard!==!1,onToggleFullscreen:()=>{p.value?.getFullscreen?.()}}),V=null,H=!1;function U(e){F.addBookmark(e),i(`bookmarkChange`,F.bookmarks.value)}function W(){let e=R.submitAnswer(),t=R.activeQuiz.value;t&&i(`quizAnswer`,t.id,R.selectedAnswer.value,e)}function G(){R.closeQuiz()}return k(g,e=>{i(`stateChange`,e)}),k(C,e=>{i(`fullscreenChange`,e)}),k(()=>P.currentChapter.value,e=>{e&&i(`chapterChange`,e)}),v(async()=>{if(u.containerRef.value=f.value,await m(),H)return;try{await u.initPlayer()}catch(e){H||i(`error`,e instanceof Error?e:Error(String(e)));return}if(H)return;let e=p.value;if(!e)return;M.bindEvents(e),I.bindEvents(e),L.initSubtitles(),B.startListening(),z.initObserver();let t=j.restoreProgress();t>0&&r.startTime===void 0&&(e.currentTime=t),e.on(Y.PLAY,()=>{j.onPlay()}),e.on(Y.PAUSE,()=>{j.onPause()}),e.on(Y.TIME_UPDATE,()=>{j.onTimeUpdate(),i(`timeUpdate`,x.value,S.value),i(`progressUpdate`,j.getProgressData())}),e.on(Y.ENDED,()=>{i(`ended`),I.markAsWatched()}),e.on(Y.ERROR,()=>{i(`error`,Error(`播放器错误`))}),e.on(Y.READY,()=>{i(`ready`)}),e.on(Y.AFTER_DEFINITION_CHANGE,e=>{i(`qualityChange`,e.to)}),e.on(Y.RATE_CHANGE,e=>{i(`rateChange`,e)}),r.onAnalytics&&(V=he(e,r.onAnalytics).destroy)}),_(()=>{H=!0,V?.(),B.stopListening(),z.destroyObserver()}),t({play:T.play,pause:T.pause,seek:T.seek,setPlaybackRate:T.setPlaybackRate,setVolume:T.setVolume,switchQuality:M.switchQuality,getProgressData:j.getProgressData,destroy:u.destroyPlayer,getPlayerInstance:()=>p.value}),(e,t)=>(y(),c(`div`,{ref_key:`wrapperRef`,ref:w,class:h([`c-video-player`,{"is-mini":D(z).isMiniMode.value,"is-fullscreen":D(C)}]),tabindex:`0`},[s(` 播放器容器 `),l(`div`,{ref_key:`containerRef`,ref:f,class:`c-video-player__container`},null,512),s(` 动态水印 `),d(Xe,{visible:D(I).showWatermark.value,text:D(I).watermarkText.value},null,8,[`visible`,`text`]),s(` 字幕渲染层 `),d(Ee,{text:D(L).currentText.value,tracks:D(L).subtitleList.value,"active-language":D(L).activeLanguage.value,onSwitch:D(L).switchSubtitle,onClose:D(L).closeSubtitle},null,8,[`text`,`tracks`,`active-language`,`onSwitch`,`onClose`]),s(` 测验弹窗 `),r.quizzes?.length?(y(),o(Ye,{key:0,answer:D(R).selectedAnswer.value,"onUpdate:answer":t[0]||=e=>D(R).selectedAnswer.value=e,quiz:D(R).activeQuiz.value,"show-result":D(R).showResult.value,"is-correct":D(R).lastAnswerCorrect.value,onSubmit:W,onRetry:t[1]||=e=>D(R).retryQuiz(),onClose:G},null,8,[`answer`,`quiz`,`show-result`,`is-correct`])):s(`v-if`,!0),s(` 扩展控制栏(xgplayer 自带控制栏外的扩展) `),d(be,{visible:!0},{left:A(()=>[s(` 章节标记 `),r.chapters?.length?(y(),o(Ie,{key:0,chapters:N.value,"current-chapter":D(P).currentChapter.value,"current-index":D(P).currentChapterIndex.value,onGoTo:D(P).goToChapter},null,8,[`chapters`,`current-chapter`,`current-index`,`onGoTo`])):s(`v-if`,!0)]),right:A(()=>[s(` 书签面板 `),d(Ve,{bookmarks:D(F).bookmarks.value,onAdd:U,onRemove:D(F).removeBookmark,onGoTo:D(F).goToBookmark},null,8,[`bookmarks`,`onRemove`,`onGoTo`])]),_:1}),s(` 小窗关闭按钮 `),D(z).isMiniMode.value?(y(),c(`button`,{key:1,type:`button`,class:`c-video-player__mini-close`,"aria-label":`关闭小窗播放`,onClick:t[2]||=e=>D(z).closeMiniPlayer()},` ✕ `)):s(`v-if`,!0),s(` 小窗点击回原位 `),D(z).isMiniMode.value?(y(),c(`button`,{key:2,type:`button`,class:`c-video-player__mini-back`,onClick:t[3]||=e=>D(z).scrollToPlayer()},` 回到原位 `)):s(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-e6dc58ed`]]);export{J as _,ie as a,X as b,V as c,B as d,G as f,W as g,ee as h,oe as i,z as l,U as m,de as n,Q as o,H as p,se as r,Z as s,Ze as t,R as u,q as v,Y as x,K as y};
|
|
1
|
+
import{t as e}from"./export-helper.js";import{i as t,t as n}from"./storage.js";import{Fragment as r,Transition as i,computed as a,createBlock as o,createCommentVNode as s,createElementBlock as c,createElementVNode as l,createTextVNode as u,createVNode as d,defineComponent as f,mergeModels as p,nextTick as m,normalizeClass as h,normalizeStyle as g,onBeforeUnmount as _,onMounted as v,openBlock as y,ref as b,renderList as x,renderSlot as S,resolveComponent as C,shallowRef as w,toDisplayString as T,toRef as E,unref as D,useModel as O,watch as k,withCtx as A}from"vue";import{NBadge as j,NButton as M,NCheckbox as N,NCheckboxGroup as P,NPopover as F,NRadio as I,NRadioGroup as L}from"naive-ui";const R=[.5,.75,1,1.25,1.5,2,3],z=1,B=.75,V=3e4,H=5e3,ee={"360p":`流畅 360P`,"480p":`标清 480P`,"720p":`高清 720P`,"1080p":`超清 1080P`,"1440p":`2K 1440P`,"4K":`4K 超高清`},U={".mp4":`mp4`,".m3u8":`hls`,".mpd":`dash`,".flv":`flv`},W={SPACE:`播放/暂停`,ARROW_LEFT:`快退 5 秒`,ARROW_RIGHT:`快进 5 秒`,ARROW_UP:`音量增加 10%`,ARROW_DOWN:`音量减少 10%`,F:`全屏/退出全屏`,M:`静音/取消静音`,ESC:`退出全屏`},te=5,G=.1,K=`c_video_player_`,q={VOLUME:`${K}volume`,PLAYBACK_RATE:`${K}playback_rate`,PROGRESS:`${K}progress_`,BOOKMARKS:`${K}bookmarks_`},J={READY:`ready`,PLAY:`play`,PAUSE:`pause`,ENDED:`ended`,ERROR:`error`,SEEKING:`seeking`,SEEKED:`seeked`,TIME_UPDATE:`timeupdate`,WAITING:`waiting`,DURATION_CHANGE:`durationchange`,RATE_CHANGE:`ratechange`,FULLSCREEN_CHANGE:`fullscreen_change`,DEFINITION_CHANGE:`definition_change`,BEFORE_DEFINITION_CHANGE:`before_definition_change`,AFTER_DEFINITION_CHANGE:`after_definition_change`},Y={fontSize:14,color:`rgba(150, 150, 150, 0.15)`,rotate:-25,gap:120};function ne(e){try{let{pathname:t}=new URL(e,location.href);return U[t.slice(t.lastIndexOf(`.`)).toLowerCase()]??`mp4`}catch{return`mp4`}}function re(e){let t=b(null),n=w(null),r=b(`idle`),i=b(0),a=b(0),o=b(!1),s=0,c=!1;function l(){return{el:t.value,url:e.url,width:e.width??`100%`,height:e.height??`100%`,fluid:e.fluid!==!1,fitVideoSize:`fixWidth`,poster:e.poster??``,playsinline:!0,videoAttributes:{crossOrigin:`anonymous`},lang:e.lang??`zh-cn`,inactive:3e3}}function u(){return{autoplay:e.autoplay??!1,autoplayMuted:e.autoplayMuted??!1,loop:e.loop??!1,volume:e.volume??B,startTime:e.startTime??0,defaultPlaybackRate:e.defaultPlaybackRate??1,playbackRate:e.playbackRates?{list:e.playbackRates.map(e=>e)}:!0}}function d(){return{pip:e.pip!==!1,screenShot:e.screenshot??!1,mini:e.miniPlayer??!1,fullscreen:e.fullscreen!==!1,cssFullscreen:e.cssFullscreen!==!1,keyShortcut:!1}}function f(t){e.thumbnail&&(t.thumbnail={urls:e.thumbnail.urls,pic_num:e.thumbnail.picNum,col:e.thumbnail.col,row:e.thumbnail.row,width:e.thumbnail.width,height:e.thumbnail.height}),e.qualityList?.length&&(t.definition={list:e.qualityList.map(e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate})),defaultDefinition:e.defaultQuality??e.qualityList[0].label}),e.playerOptions&&Object.assign(t,e.playerOptions)}function p(){let t=e.sourceType??ne(e.url),n={...l(),...u(),...d()};return f(n),n.__sourceType=t,n}async function m(){if(c||!t.value)return;let e=++s;r.value=`loading`;let l=p(),u=l.__sourceType;delete l.__sourceType;let d;try{if(u===`hls`){let{default:e}=await import(`xgplayer-hls`);d=e}else{let{default:e}=await import(`xgplayer`);d=e}if(c||e!==s||!t.value)return;n.value=new d(l)}catch(t){if(c||e!==s)return;throw r.value=`error`,t}let f=n.value;f.on(J.READY,()=>{r.value=`ready`}),f.on(J.PLAY,()=>{r.value=`playing`}),f.on(J.PAUSE,()=>{r.value=`paused`}),f.on(J.ENDED,()=>{r.value=`ended`}),f.on(J.ERROR,()=>{r.value=`error`}),f.on(J.TIME_UPDATE,()=>{i.value=f.currentTime??0,a.value=f.duration??0}),f.on(J.DURATION_CHANGE,()=>{a.value=f.duration??0}),f.on(J.FULLSCREEN_CHANGE,e=>{o.value=e})}function h(){s++;let e=n.value;e&&(e.destroy(),n.value=null),r.value=`idle`,i.value=0,a.value=0,o.value=!1}return _(()=>{c=!0,h()}),{containerRef:t,playerRef:n,playerState:r,currentTime:i,duration:a,isFullscreen:o,initPlayer:m,destroyPlayer:h}}function X(e){let n=b(ie()),r=b(ae()),i=b(!1);function a(){e.value?.play()}function o(){e.value?.pause()}function s(){let t=e.value;t&&(t.paused?t.play():t.pause())}function c(t){let n=e.value;n&&(n.currentTime=Math.max(0,Math.min(t,n.duration??0)))}function l(r){let a=e.value;if(!a)return;let o=Math.max(0,Math.min(1,r));a.volume=o,n.value=o,i.value=o===0,t(q.VOLUME,o)}function u(){let t=e.value;t&&(i.value?l(n.value>0?n.value:.5):(t.volume=0,i.value=!0))}function d(n){let i=e.value;i&&(i.playbackRate=n,r.value=n,t(q.PLAYBACK_RATE,n))}function f(){let t=e.value;t&&(t.volume=n.value,t.playbackRate=r.value,i.value=n.value===0)}return k(e,e=>{e&&f()}),{volume:n,playbackRate:r,isMuted:i,play:a,pause:o,togglePlay:s,seek:c,setVolume:l,toggleMute:u,setPlaybackRate:d}}function ie(){let e=Number(n(q.VOLUME));return Number.isFinite(e)&&e>=0&&e<=1?e:.75}function ae(){let e=Number(n(q.PLAYBACK_RATE));return Number.isFinite(e)&&e>0?e:1}function Z(e,r,i,a,o,s){let c=b(0),l=b(0),u=0,d=!1,f=null,p=null;function m(){return q.PROGRESS+encodeURIComponent(a.value)}function h(){let e=n(m());return!e||typeof e!=`object`?0:(c.value=Q(e.watchedDuration),l.value=Math.min(100,Q(e.completionPercent)),Q(e.currentTime))}function g(){return{currentTime:r.value,duration:i.value,watchedDuration:c.value,completionPercent:l.value,updatedAt:Date.now()}}function v(){t(m(),g())}function y(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function x(){y(o,g()),v()}function S(){if(!d)return;let e=performance.now();if(u>0){let t=(e-u)/1e3;t>0&&t<5&&(c.value+=t)}u=e,i.value>0&&(l.value=Math.min(100,Math.round(c.value/i.value*100)))}function C(){let e=s?.heartbeatInterval??V;!Number.isFinite(e)||e<=0||(f=setInterval(()=>{d&&y(s?.onHeartbeat,g())},e))}function w(){p=setInterval(()=>{d&&x()},H)}function T(){let e=g();v(),y(o,e)}function E(){if(document.hidden)S(),x(),d=!1;else{let t=e.value;t&&!t.paused&&(d=!0,u=performance.now())}}function D(){A(),C(),w(),window.addEventListener(`beforeunload`,T),document.addEventListener(`visibilitychange`,E)}function O(){d=!1,A(),v()}function A(){f&&=(clearInterval(f),null),p&&=(clearInterval(p),null),window.removeEventListener(`beforeunload`,T),document.removeEventListener(`visibilitychange`,E)}function j(){d=!0,u=performance.now()}function M(){S(),d=!1,u=0,v()}function N(){S()}return k(e,e=>{e?D():A()}),_(()=>{O()}),{watchedDuration:c,completionPercent:l,getProgressData:g,restoreProgress:h,saveProgress:v,startTracking:D,stopTracking:O,onPlay:j,onPause:M,onTimeUpdate:N}}function Q(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function oe(e,t=[]){let n=b(null),r=b(!1);function i(e){e.on(J.AFTER_DEFINITION_CHANGE,e=>{n.value=e.to,r.value=!1}),e.on(J.BEFORE_DEFINITION_CHANGE,()=>{r.value=!0})}function a(n){let i=e.value;if(!i||!t.length)return;let a=t.find(e=>e.label===n);if(!a){console.warn(`[C_VideoPlayer] 未找到清晰度: ${n}`);return}r.value=!0,i.changeDefinition?.({url:a.url,definition:a.label,text:{zh:a.label,en:a.label},bitrate:a.bitrate})}return{currentQuality:n,isSwitching:r,switchQuality:a,bindEvents:i}}function $(e,t,n,r){let i=a(()=>{if(!e.value.length)return null;let n=t.value;return e.value.find(e=>n>=e.startTime&&n<e.endTime)??null}),o=a(()=>i.value?e.value.findIndex(e=>e.id===i.value.id):-1),s=a(()=>!n.value||!e.value.length?[]:e.value.map(e=>({...e,startPercent:e.startTime/n.value*100,endPercent:e.endTime/n.value*100,widthPercent:(e.endTime-e.startTime)/n.value*100})));function c(t){let n=e.value.find(e=>e.id===t);n&&r(n.startTime)}function l(){let t=o.value;t>0&&r(e.value[t-1].startTime)}function u(){let t=o.value;t>=0&&t<e.value.length-1&&r(e.value[t+1].startTime)}return{currentChapter:i,currentChapterIndex:o,chapterMarkers:s,goToChapter:c,prevChapter:l,nextChapter:u}}function se(e,r,i,a=[]){let o=b([...a]);function s(){return q.BOOKMARKS+encodeURIComponent(e.value)}function c(){let e=n(s());Array.isArray(e)&&(o.value=e.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`&&typeof e.time==`number`&&Number.isFinite(e.time)&&typeof e.note==`string`&&typeof e.createdAt==`number`),u())}function l(){t(s(),o.value)}function u(){o.value.sort((e,t)=>e.time-t.time)}function d(e=``){let t={id:typeof crypto<`u`&&`randomUUID`in crypto?`bm_${crypto.randomUUID()}`:`bm_${Date.now()}_${o.value.length}`,time:r.value,note:e,createdAt:Date.now()};return o.value.push(t),u(),l(),t}function f(e){let t=o.value.findIndex(t=>t.id===e);t!==-1&&(o.value.splice(t,1),l())}function p(e,t){let n=o.value.find(t=>t.id===e);n&&(n.note=t,l())}function m(e){let t=o.value.find(t=>t.id===e);t&&i(t.time)}function h(){o.value=[],l()}return a.length||c(),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:p,goToBookmark:m,clearBookmarks:h}}function ce(e,t,n){let r=b(0),i=b(!0),a=b(!1),o=b(n?.watermark??!1),s=b(n?.watermarkText??``);function c(e){e>r.value&&(r.value=e)}function l(e){!n?.preventSeekOnFirstWatch||!i.value||(e.currentTime??0)>r.value+2&&(e.currentTime=r.value)}function u(){if(!n?.focusDetection)return;let t=e.value;t&&(document.hidden?(a.value=!0,t.paused||t.pause()):a.value=!1)}function d(e){n?.preventSeekOnFirstWatch&&e.on(J.SEEKING,()=>l(e)),e.on(J.TIME_UPDATE,()=>{c(t.value)}),n?.focusDetection&&document.addEventListener(`visibilitychange`,u)}function f(){i.value=!1}function p(e){s.value=e}return _(()=>{document.removeEventListener(`visibilitychange`,u)}),{maxWatchedTime:r,isFirstWatch:i,isBlurred:a,showWatermark:o,watermarkText:s,bindEvents:d,markAsWatched:f,setWatermarkText:p}}function le(e){let t=[];e.forEach((e,n)=>{!Number.isFinite(e.start)||!Number.isFinite(e.end)||e.end<=e.start||t.push({time:e.start,index:n,active:!0},{time:e.end,index:n,active:!1})}),t.sort((e,t)=>e.time-t.time);let n=new Uint8Array(e.length),r=[],i=[],a=e=>{let t=r.length;for(r.push(e);t>0;){let n=t-1>>>1;if(r[n]<=e)break;r[t]=r[n],t=n}r[t]=e},o=()=>{for(;r.length&&!n[r[0]];){let e=r.pop();if(!r.length)break;let t=0;for(;t*2+1<r.length;){let n=t*2+1;if(n+1<r.length&&r[n+1]<r[n]&&n++,r[n]>=e)break;r[t]=r[n],t=n}r[t]=e}},s=0;for(;s<t.length;){let c=t[s].time;for(;s<t.length&&t[s].time===c;){let e=t[s++];n[e.index]=Number(e.active),e.active&&a(e.index)}if(o(),!r.length||s===t.length)continue;let l=t[s].time,{text:u}=e[r[0]],d=i[i.length-1];d?.end===c&&d.text===u?d.end=l:i.push({start:c,end:l,text:u})}return i}function ue(e,t){if(!Number.isFinite(t))return``;let n=0,r=e.length;for(;n<r;){let i=n+r>>>1;e[i].start<=t?n=i+1:r=i}let i=e[n-1];return i&&t<i.end?i.text:``}function de(e){let t=e.trim().match(/^(?:(\d{2,}):)?(\d{2}):(\d{2})\.(\d{3})$/);if(!t)return NaN;let[,n=`0`,r,i,a]=t;return Number(r)>59||Number(i)>59?NaN:Number(n)*3600+Number(r)*60+Number(i)+Number(a)/1e3}function fe(e){let t=[],n=e.replace(/\r\n?/g,`
|
|
2
|
+
`).trim().split(/\n\s*\n/);for(let e of n){let n=e.trim().split(`
|
|
3
|
+
`);if(/^(?:NOTE|STYLE|REGION)(?:\s|$)/.test(n[0]))continue;let r=n.findIndex(e=>e.includes(`-->`));if(r===-1)continue;let[i,a]=n[r].split(`-->`);if(!i||!a)continue;let o=de(i),s=de(a.trim().split(/\s+/)[0]);if(!Number.isFinite(o)||!Number.isFinite(s)||s<=o)continue;let c=n.slice(r+1).join(`
|
|
4
|
+
`).replace(/<[^>]+>/g,``).trim();c&&t.push({start:o,end:s,text:c})}return t}function pe(e,t=[],n=b(0)){let r=b(null),i=b([...t]),o=w({}),s=b(!1),c=new Map,l=0,u=!1,d=a(()=>{if(!r.value)return``;let e=o.value[r.value];return e?ue(e.timeline,n.value):``}),f=a(()=>i.value.length>0);function p(e){if(u)return Promise.resolve([]);if(Object.prototype.hasOwnProperty.call(o.value,e))return Promise.resolve(o.value[e].cues);let t=c.get(e);if(t)return t.promise;let n=i.value.find(t=>t.language===e);if(!n)return Promise.resolve([]);let r=new AbortController;s.value=!0;let a=Promise.resolve().then(async()=>{let t=await fetch(n.src,{signal:r.signal});if(!t.ok)throw Error(`字幕加载失败: ${n.src} (${t.status})`);let i=await t.text();if(u||r.signal.aborted)return[];let a=fe(i);return o.value={...o.value,[e]:{cues:a,timeline:le(a)}},a}).catch(e=>(!u&&!r.signal.aborted&&console.warn(`[C_VideoPlayer] 字幕加载异常:`,e),[])).finally(()=>{c.delete(e),u||(s.value=c.size>0)});return c.set(e,{controller:r,promise:a}),a}async function m(e){if(u)return;if(!i.value.find(t=>t.language===e)){console.warn(`[C_VideoPlayer] 未找到字幕轨道: ${e}`);return}let t=++l;await p(e),!u&&t===l&&(r.value=e)}async function h(){let e=i.value.find(e=>e.default)??i.value[0];e&&await m(e.language)}function g(){l++,r.value=null}function v(){r.value?g():h()}return _(()=>{u=!0,l++,c.forEach(({controller:e})=>e.abort()),c.clear(),s.value=!1}),{activeLanguage:r,subtitleList:i,currentText:d,hasSubtitles:f,isLoading:s,initSubtitles:h,switchSubtitle:m,closeSubtitle:g,toggleSubtitle:v}}function me(e,t,n){let r=b(null),i=b(new Set),a=b(``),o=b(!1),s=b(!1);function c(){if(r.value||!n.value.length)return;let e=t.value,a=n.value.find(t=>!i.value.has(t.id)&&Math.abs(e-t.triggerTime)<1);a&&l(a)}function l(t){r.value=t,a.value=t.type===`multiple`?[]:``,o.value=!1,s.value=!1,e.value?.pause()}function u(){if(!r.value)return!1;let e=r.value,t=p(e,a.value);return s.value=t,o.value=!0,(t||!e.required)&&i.value.add(e.id),t}function d(){if(!r.value)return;let t=r.value;t.required&&!i.value.has(t.id)||(r.value=null,o.value=!1,a.value=``,e.value?.play())}function f(){r.value&&(a.value=r.value.type===`multiple`?[]:``,o.value=!1,s.value=!1)}function p(e,t){if(e.type===`multiple`){let n=Array.isArray(t)?[...t].sort():[t],r=Array.isArray(e.answer)?[...e.answer].sort():[e.answer];return n.length===r.length&&n.every((e,t)=>e===r[t])}return t===e.answer}return k(t,()=>{c()}),{activeQuiz:r,completedQuizIds:i,selectedAnswer:a,showResult:o,lastAnswerCorrect:s,submitAnswer:u,closeQuiz:d,retryQuiz:f}}function he(e,t){let n=b(!1),r=null;function i(){!e.value||!t.value||(r=new IntersectionObserver(([e])=>{n.value=!e.isIntersecting},{threshold:.3}),r.observe(e.value))}function a(){r&&=(r.disconnect(),null),n.value=!1}function o(){e.value?.scrollIntoView({behavior:`smooth`,block:`center`})}function s(){n.value=!1,a()}return _(()=>{a()}),{isMiniMode:n,initObserver:i,destroyObserver:a,scrollToPlayer:o,closeMiniPlayer:s}}function ge(e,t,n={}){let{enabled:r=!0,onToggleFullscreen:i}=n,a={" ":(e,t)=>{e.preventDefault(),t.paused?t.play():t.pause()},ArrowLeft:(e,t)=>{e.preventDefault(),t.currentTime=Math.max(0,(t.currentTime??0)-5)},ArrowRight:(e,t)=>{e.preventDefault(),t.currentTime=Math.min(t.duration??0,(t.currentTime??0)+5)},ArrowUp:(e,t)=>{e.preventDefault(),t.volume=Math.min(1,(t.volume??0)+G)},ArrowDown:(e,t)=>{e.preventDefault(),t.volume=Math.max(0,(t.volume??0)-G)},f:e=>{e.preventDefault(),i?.()},F:e=>{e.preventDefault(),i?.()},m:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75},M:(e,t)=>{e.preventDefault(),t.volume=t.volume>0?0:.75}};function o(t){if(!r)return;let n=e.value;if(!n)return;let i=t.target;if(i.tagName===`INPUT`||i.tagName===`TEXTAREA`||i.isContentEditable)return;let o=a[t.key];o?.(t,n)}function s(){r&&t.value?.addEventListener(`keydown`,o)}function c(){t.value?.removeEventListener(`keydown`,o)}return _(()=>{c()}),{startListening:s,stopListening:c}}function _e(e,t){function n(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function r(e,r){t(n(e,r))}let i=()=>r(`play`),a=()=>r(`pause`),o=()=>r(`ended`),s=()=>r(`seek`),c=()=>r(`error`),l=()=>r(`buffer`),u=e=>{r(`fullscreen`,{isFullscreen:e})},d=e=>{r(`quality_change`,e)},f=()=>{r(`speed_change`,{rate:e.playbackRate})};e.on(J.PLAY,i),e.on(J.PAUSE,a),e.on(J.ENDED,o),e.on(J.SEEKED,s),e.on(J.ERROR,c),e.on(J.WAITING,l),e.on(J.FULLSCREEN_CHANGE,u),e.on(J.DEFINITION_CHANGE,d),e.on(J.RATE_CHANGE,f);function p(){e.off(J.PLAY,i),e.off(J.PAUSE,a),e.off(J.ENDED,o),e.off(J.SEEKED,s),e.off(J.ERROR,c),e.off(J.WAITING,l),e.off(J.FULLSCREEN_CHANGE,u),e.off(J.DEFINITION_CHANGE,d),e.off(J.RATE_CHANGE,f)}return{report:r,destroy:p}}const ve={key:0,class:`vp-control-bar`},ye={class:`vp-control-bar__left`},be={class:`vp-control-bar__center`},xe={class:`vp-control-bar__right`};var Se=e(f({__name:`ControlBar`,props:{visible:{type:Boolean,default:!0}},setup(e){return(t,n)=>e.visible?(y(),c(`div`,ve,[l(`div`,ye,[S(t.$slots,`left`,{},void 0,!0)]),l(`div`,be,[S(t.$slots,`center`,{},void 0,!0)]),l(`div`,xe,[S(t.$slots,`right`,{},void 0,!0)])])):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-e8b787cf`]]);const Ce={key:0,class:`vp-subtitle-overlay`},we={class:`vp-subtitle-text`},Te={key:0,class:`vp-subtitle-toggle`},Ee={class:`vp-subtitle-menu`},De=[`onClick`];var Oe=e(f({__name:`SubtitleOverlay`,props:{text:{},tracks:{},activeLanguage:{}},emits:[`switch`,`close`],setup(e){return(t,n)=>{let a=M,o=F;return y(),c(r,null,[s(` 字幕文本 `),d(i,{name:`vp-subtitle-fade`},{default:A(()=>[e.text?(y(),c(`div`,Ce,[l(`span`,we,T(e.text),1)])):s(`v-if`,!0)]),_:1}),s(` 字幕切换按钮(叠加在播放器控制栏上方) `),e.tracks.length?(y(),c(`div`,Te,[d(o,{trigger:`click`,placement:`top`,"show-arrow":!1},{trigger:A(()=>[d(a,{quaternary:``,size:`small`,class:h([`vp-subtitle-btn`,{"is-active":!!e.activeLanguage}])},{default:A(()=>[...n[1]||=[u(` 字幕 `,-1)]]),_:1},8,[`class`])]),default:A(()=>[l(`div`,Ee,[l(`div`,{class:h([`vp-subtitle-menu__item`,{"is-active":!e.activeLanguage}]),onClick:n[0]||=e=>t.$emit(`close`)},` 关闭字幕 `,2),(y(!0),c(r,null,x(e.tracks,n=>(y(),c(`div`,{key:n.language,class:h([`vp-subtitle-menu__item`,{"is-active":e.activeLanguage===n.language}]),onClick:e=>t.$emit(`switch`,n.language)},T(n.label),11,De))),128))])]),_:1})])):s(`v-if`,!0)],64)}}}),[[`__scopeId`,`data-v-20ac6438`]]);const ke={key:0,class:`vp-chapter-markers`},Ae={key:0,class:`vp-chapter-current`},je={class:`vp-chapter-index`},Me={class:`vp-chapter-title`},Ne={class:`vp-chapter-list`},Pe=[`onClick`],Fe={class:`vp-chapter-item-index`},Ie={class:`vp-chapter-item-title`},Le={class:`vp-chapter-item-time`};var Re=e(f({__name:`ChapterMarkers`,props:{chapters:{},currentChapter:{},currentIndex:{}},emits:[`goTo`],setup(e){function t(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(n,i)=>{let a=M,o=F;return e.chapters.length?(y(),c(`div`,ke,[s(` 当前章节信息 `),e.currentChapter?(y(),c(`div`,Ae,[l(`span`,je,T(e.currentIndex+1)+`/`+T(e.chapters.length),1),l(`span`,Me,T(e.currentChapter.title),1)])):s(`v-if`,!0),s(` 章节列表面板 `),d(o,{trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:A(()=>[d(a,{quaternary:``,size:`small`,class:`vp-chapter-trigger`},{icon:A(()=>[...i[0]||=[l(`span`,{class:`vp-chapter-icon`},`☰`,-1)]]),default:A(()=>[i[1]||=u(` 章节 `,-1)]),_:1})]),default:A(()=>[l(`div`,Ne,[(y(!0),c(r,null,x(e.chapters,(r,i)=>(y(),c(`div`,{key:r.id,class:h([`vp-chapter-item`,{"is-active":r.id===e.currentChapter?.id}]),onClick:e=>n.$emit(`goTo`,r.id)},[l(`span`,Fe,T(i+1),1),l(`span`,Ie,T(r.title),1),l(`span`,Le,T(t(r.startTime)),1)],10,Pe))),128))])]),_:1})])):s(`v-if`,!0)}}}),[[`__scopeId`,`data-v-8828163e`]]);const ze={class:`vp-bookmark-panel`},Be={class:`vp-bookmark-list`},Ve=[`aria-label`,`onClick`],He={class:`vp-bookmark-note`};var Ue=e(f({__name:`BookmarkPanel`,props:{bookmarks:{}},emits:[`add`,`remove`,`goTo`],setup(e,{emit:t}){let n=t;function i(){n(`add`,``)}function a(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}return(t,n)=>{let f=M,p=j,m=F;return y(),c(`div`,ze,[s(` 添加书签按钮 `),d(f,{quaternary:``,size:`small`,class:`vp-bookmark-add-btn`,onClick:i},{icon:A(()=>[...n[0]||=[l(`span`,null,`🔖`,-1)]]),default:A(()=>[n[1]||=u(` 书签 `,-1)]),_:1}),s(` 书签列表弹窗 `),e.bookmarks.length?(y(),o(m,{key:0,trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:A(()=>[d(p,{value:e.bookmarks.length,max:99,type:`info`},{default:A(()=>[d(f,{quaternary:``,size:`small`,class:`vp-bookmark-list-btn`},{default:A(()=>[...n[2]||=[u(` 列表 `,-1)]]),_:1})]),_:1},8,[`value`])]),default:A(()=>[l(`div`,Be,[(y(!0),c(r,null,x(e.bookmarks,e=>(y(),c(`div`,{key:e.id,class:`vp-bookmark-item`},[l(`button`,{type:`button`,class:`vp-bookmark-time`,"aria-label":`跳转到 ${a(e.time)}`,onClick:n=>t.$emit(`goTo`,e.id)},T(a(e.time)),9,Ve),l(`span`,He,T(e.note||`无备注`),1),d(f,{quaternary:``,size:`tiny`,type:`error`,onClick:n=>t.$emit(`remove`,e.id)},{default:A(()=>[...n[3]||=[u(` ✕ `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})):s(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-29942590`]]);const We={key:0,class:`vp-quiz-overlay`},Ge={class:`vp-quiz-card`},Ke={class:`vp-quiz-header`},qe={class:`vp-quiz-type-tag`},Je={class:`vp-quiz-title`},Ye={class:`vp-quiz-options`},Xe={class:`vp-quiz-actions`};var Ze=e(f({__name:`QuizOverlay`,props:p({quiz:{},showResult:{type:Boolean,default:!1},isCorrect:{type:Boolean,default:!1}},{answer:{default:``},answerModifiers:{}}),emits:p([`submit`,`retry`,`close`],[`update:answer`]),setup(e){let t=e,n=b(``),f=b([]),p=O(e,`answer`),m=a(()=>({single:`单选题`,multiple:`多选题`,judge:`判断题`})[t.quiz?.type??`single`]??`单选题`),g=a(()=>t.quiz?.type===`multiple`?f.value.length>0:n.value!==``);return k(n,e=>{t.quiz?.type!==`multiple`&&(p.value=e)}),k(f,e=>{t.quiz?.type===`multiple`&&(p.value=[...e])}),k(()=>t.quiz?.id,()=>{n.value=``,f.value=[]}),(t,a)=>{let p=N,_=P,v=I,b=L,S=M;return y(),o(i,{name:`vp-quiz-fade`},{default:A(()=>[e.quiz?(y(),c(`div`,We,[l(`div`,Ge,[s(` 标题 `),l(`div`,Ke,[l(`span`,qe,T(m.value),1),l(`h3`,Je,T(e.quiz.title),1)]),s(` 选项 `),l(`div`,Ye,[e.quiz.type===`multiple`?(y(),o(_,{key:0,value:f.value,"onUpdate:value":a[0]||=e=>f.value=e,disabled:e.showResult},{default:A(()=>[(y(!0),c(r,null,x(e.quiz.options,e=>(y(),c(`div`,{key:e.key,class:`vp-quiz-option`},[d(p,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`])):(y(),o(b,{key:1,value:n.value,"onUpdate:value":a[1]||=e=>n.value=e,disabled:e.showResult},{default:A(()=>[(y(!0),c(r,null,x(e.quiz.options,e=>(y(),c(`div`,{key:e.key,class:`vp-quiz-option`},[d(v,{value:e.key,label:`${e.key}. ${e.label}`},null,8,[`value`,`label`])]))),128))]),_:1},8,[`value`,`disabled`]))]),s(` 结果反馈 `),e.showResult?(y(),c(`div`,{key:0,class:h([`vp-quiz-result`,e.isCorrect?`is-correct`:`is-wrong`])},T(e.isCorrect?`✓ 回答正确!`:`✗ 回答错误,请重试`),3)):s(`v-if`,!0),s(` 操作按钮 `),l(`div`,Xe,[e.showResult?(y(),c(r,{key:1},[!e.isCorrect&&e.quiz.required?(y(),o(S,{key:0,type:`warning`,onClick:a[3]||=e=>t.$emit(`retry`)},{default:A(()=>[...a[6]||=[u(` 重新作答 `,-1)]]),_:1})):s(`v-if`,!0),e.isCorrect||!e.quiz.required?(y(),o(S,{key:1,type:`primary`,onClick:a[4]||=e=>t.$emit(`close`)},{default:A(()=>[...a[7]||=[u(` 继续学习 `,-1)]]),_:1})):s(`v-if`,!0)],64)):(y(),o(S,{key:0,type:`primary`,disabled:!g.value,onClick:a[2]||=e=>t.$emit(`submit`)},{default:A(()=>[...a[5]||=[u(` 提交答案 `,-1)]]),_:1},8,[`disabled`]))])])])):s(`v-if`,!0)]),_:1})}}}),[[`__scopeId`,`data-v-1132a37b`]]),Qe=e(f({__name:`WatermarkOverlay`,props:{visible:{type:Boolean,default:!0},text:{default:``},fontSize:{default:Y.fontSize},color:{default:Y.color},rotate:{default:Y.rotate},gap:{default:Y.gap}},setup(e){let t=e,n=a(()=>{let e=t.gap*t.gap;return Math.ceil(2073600/e)}),i=a(()=>({position:`absolute`,inset:0,overflow:`hidden`,pointerEvents:`none`,zIndex:50,display:`flex`,flexWrap:`wrap`,alignContent:`flex-start`,gap:`${t.gap}px`,padding:`${t.gap/2}px`})),o=a(()=>({fontSize:`${t.fontSize}px`,color:t.color,transform:`rotate(${t.rotate}deg)`,userSelect:`none`,whiteSpace:`nowrap`,lineHeight:1}));return(t,a)=>e.visible&&e.text?(y(),c(`div`,{key:0,class:`vp-watermark`,style:g(i.value)},[(y(!0),c(r,null,x(n.value,t=>(y(),c(`span`,{key:t,class:`vp-watermark-item`,style:g(o.value)},T(e.text),5))),128))],4)):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-9a051cb4`]]),$e=e(f({name:`C_VideoPlayer`,__name:`index`,props:{url:{},sourceType:{},width:{},height:{},poster:{},fluid:{type:Boolean},autoplay:{type:Boolean},autoplayMuted:{type:Boolean},loop:{type:Boolean},volume:{},startTime:{},playbackRates:{},defaultPlaybackRate:{},pip:{type:Boolean},fullscreen:{type:Boolean},cssFullscreen:{type:Boolean},miniPlayer:{type:Boolean},screenshot:{type:Boolean},keyboard:{type:Boolean},lang:{},qualityList:{},defaultQuality:{},chapters:{},subtitles:{},quizzes:{},bookmarks:{},thumbnail:{},onProgress:{type:Function},antiCheat:{},onAnalytics:{type:Function},playerOptions:{}},emits:[`ready`,`stateChange`,`timeUpdate`,`ended`,`error`,`qualityChange`,`rateChange`,`fullscreenChange`,`bookmarkChange`,`quizAnswer`,`chapterChange`,`progressUpdate`],setup(e,{expose:t,emit:n}){let r=e,i=n,u=re(r),{containerRef:f,playerRef:p,playerState:g,currentTime:x,duration:S,isFullscreen:C}=u,w=b(null),T=X(p),O=E(r,`url`),j=Z(p,x,S,O,r.onProgress,r.antiCheat),M=oe(p,r.qualityList),N=a(()=>r.chapters??[]),P=$(N,x,S,T.seek),F=se(O,x,T.seek,r.bookmarks),I=ce(p,x,r.antiCheat),L=pe(p,r.subtitles,x),R=me(p,x,a(()=>r.quizzes??[])),z=he(w,a(()=>r.miniPlayer??!1)),B=ge(p,w,{enabled:r.keyboard!==!1,onToggleFullscreen:()=>{p.value?.getFullscreen?.()}}),V=null,H=!1;function ee(e){F.addBookmark(e),i(`bookmarkChange`,F.bookmarks.value)}function U(){let e=R.submitAnswer(),t=R.activeQuiz.value;t&&i(`quizAnswer`,t.id,R.selectedAnswer.value,e)}function W(){R.closeQuiz()}return k(g,e=>{i(`stateChange`,e)}),k(C,e=>{i(`fullscreenChange`,e)}),k(()=>P.currentChapter.value,e=>{e&&i(`chapterChange`,e)}),v(async()=>{if(u.containerRef.value=f.value,await m(),H)return;try{await u.initPlayer()}catch(e){H||i(`error`,e instanceof Error?e:Error(String(e)));return}if(H)return;let e=p.value;if(!e)return;M.bindEvents(e),I.bindEvents(e),L.initSubtitles(),B.startListening(),z.initObserver();let t=j.restoreProgress();t>0&&r.startTime===void 0&&(e.currentTime=t),e.on(J.PLAY,()=>{j.onPlay()}),e.on(J.PAUSE,()=>{j.onPause()}),e.on(J.TIME_UPDATE,()=>{j.onTimeUpdate(),i(`timeUpdate`,x.value,S.value),i(`progressUpdate`,j.getProgressData())}),e.on(J.ENDED,()=>{i(`ended`),I.markAsWatched()}),e.on(J.ERROR,()=>{i(`error`,Error(`播放器错误`))}),e.on(J.READY,()=>{i(`ready`)}),e.on(J.AFTER_DEFINITION_CHANGE,e=>{i(`qualityChange`,e.to)}),e.on(J.RATE_CHANGE,e=>{i(`rateChange`,e)}),r.onAnalytics&&(V=_e(e,r.onAnalytics).destroy)}),_(()=>{H=!0,V?.(),B.stopListening(),z.destroyObserver()}),t({play:T.play,pause:T.pause,seek:T.seek,setPlaybackRate:T.setPlaybackRate,setVolume:T.setVolume,switchQuality:M.switchQuality,getProgressData:j.getProgressData,destroy:u.destroyPlayer,getPlayerInstance:()=>p.value}),(e,t)=>(y(),c(`div`,{ref_key:`wrapperRef`,ref:w,class:h([`c-video-player`,{"is-mini":D(z).isMiniMode.value,"is-fullscreen":D(C)}]),tabindex:`0`},[s(` 播放器容器 `),l(`div`,{ref_key:`containerRef`,ref:f,class:`c-video-player__container`},null,512),s(` 动态水印 `),d(Qe,{visible:D(I).showWatermark.value,text:D(I).watermarkText.value},null,8,[`visible`,`text`]),s(` 字幕渲染层 `),d(Oe,{text:D(L).currentText.value,tracks:D(L).subtitleList.value,"active-language":D(L).activeLanguage.value,onSwitch:D(L).switchSubtitle,onClose:D(L).closeSubtitle},null,8,[`text`,`tracks`,`active-language`,`onSwitch`,`onClose`]),s(` 测验弹窗 `),r.quizzes?.length?(y(),o(Ze,{key:0,answer:D(R).selectedAnswer.value,"onUpdate:answer":t[0]||=e=>D(R).selectedAnswer.value=e,quiz:D(R).activeQuiz.value,"show-result":D(R).showResult.value,"is-correct":D(R).lastAnswerCorrect.value,onSubmit:U,onRetry:t[1]||=e=>D(R).retryQuiz(),onClose:W},null,8,[`answer`,`quiz`,`show-result`,`is-correct`])):s(`v-if`,!0),s(` 扩展控制栏(xgplayer 自带控制栏外的扩展) `),d(Se,{visible:!0},{left:A(()=>[s(` 章节标记 `),r.chapters?.length?(y(),o(Re,{key:0,chapters:N.value,"current-chapter":D(P).currentChapter.value,"current-index":D(P).currentChapterIndex.value,onGoTo:D(P).goToChapter},null,8,[`chapters`,`current-chapter`,`current-index`,`onGoTo`])):s(`v-if`,!0)]),right:A(()=>[s(` 书签面板 `),d(Ue,{bookmarks:D(F).bookmarks.value,onAdd:ee,onRemove:D(F).removeBookmark,onGoTo:D(F).goToBookmark},null,8,[`bookmarks`,`onRemove`,`onGoTo`])]),_:1}),s(` 小窗关闭按钮 `),D(z).isMiniMode.value?(y(),c(`button`,{key:1,type:`button`,class:`c-video-player__mini-close`,"aria-label":`关闭小窗播放`,onClick:t[2]||=e=>D(z).closeMiniPlayer()},` ✕ `)):s(`v-if`,!0),s(` 小窗点击回原位 `),D(z).isMiniMode.value?(y(),c(`button`,{key:2,type:`button`,class:`c-video-player__mini-back`,onClick:t[3]||=e=>D(z).scrollToPlayer()},` 回到原位 `)):s(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-e6dc58ed`]]);export{q as _,Z as a,Y as b,V as c,B as d,W as f,U as g,te as h,$ as i,z as l,ee as m,pe as n,X as o,H as p,se as r,re as s,$e as t,R as u,K as v,J as x,G as y};
|
package/dist/C_VtableGantt.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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
3
|
/* 甘特图组件样式 */
|
|
4
|
-
.c-vtable-gantt-wrapper[data-v-
|
|
4
|
+
.c-vtable-gantt-wrapper[data-v-d89b5f44] {
|
|
5
5
|
display: flex;
|
|
6
6
|
flex-direction: column;
|
|
7
7
|
border: 1px solid var(--c-border, #e1e4e8);
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
|
|
11
11
|
height: 100%;
|
|
12
12
|
}
|
|
13
|
-
.c-vtable-gantt-wrapper .gantt-toolbar[data-v-
|
|
13
|
+
.c-vtable-gantt-wrapper .gantt-toolbar[data-v-d89b5f44] {
|
|
14
14
|
display: flex;
|
|
15
15
|
justify-content: space-between;
|
|
16
16
|
align-items: center;
|
|
@@ -19,75 +19,75 @@
|
|
|
19
19
|
min-height: 48px;
|
|
20
20
|
flex-shrink: 0;
|
|
21
21
|
}
|
|
22
|
-
.c-vtable-gantt-wrapper .gantt-toolbar .toolbar-left .gantt-title[data-v-
|
|
22
|
+
.c-vtable-gantt-wrapper .gantt-toolbar .toolbar-left .gantt-title[data-v-d89b5f44] {
|
|
23
23
|
font-size: 16px;
|
|
24
24
|
font-weight: 600;
|
|
25
25
|
color: var(--c-text-1, #333);
|
|
26
26
|
}
|
|
27
|
-
.c-vtable-gantt-wrapper .gantt-toolbar .toolbar-right[data-v-
|
|
27
|
+
.c-vtable-gantt-wrapper .gantt-toolbar .toolbar-right[data-v-d89b5f44] {
|
|
28
28
|
display: flex;
|
|
29
29
|
gap: 8px;
|
|
30
30
|
align-items: center;
|
|
31
31
|
}
|
|
32
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
32
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] {
|
|
33
33
|
flex: 1;
|
|
34
34
|
position: relative;
|
|
35
35
|
min-height: 400px;
|
|
36
36
|
overflow: hidden;
|
|
37
37
|
/* 确保甘特图组件完全填充容器 */
|
|
38
38
|
}
|
|
39
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
39
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] > * {
|
|
40
40
|
width: 100%;
|
|
41
41
|
height: 100%;
|
|
42
42
|
}
|
|
43
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
43
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] {
|
|
44
44
|
/* 确保甘特图内部组件正确填充 */
|
|
45
45
|
}
|
|
46
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
46
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt {
|
|
47
47
|
width: 100% !important;
|
|
48
48
|
height: 100% !important;
|
|
49
49
|
overflow: hidden;
|
|
50
50
|
}
|
|
51
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
51
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt * {
|
|
52
52
|
backface-visibility: hidden;
|
|
53
53
|
transform: translateZ(0);
|
|
54
54
|
-webkit-font-smoothing: subpixel-antialiased;
|
|
55
55
|
}
|
|
56
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
56
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] {
|
|
57
57
|
/* 防止内部表格自动调整高度 */
|
|
58
58
|
}
|
|
59
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
59
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt-table {
|
|
60
60
|
height: 100% !important;
|
|
61
61
|
box-sizing: border-box;
|
|
62
62
|
}
|
|
63
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
63
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] {
|
|
64
64
|
/* 防止拖动时底部色块闪烁 */
|
|
65
65
|
}
|
|
66
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
66
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt-chart {
|
|
67
67
|
position: relative;
|
|
68
68
|
overflow: hidden;
|
|
69
69
|
will-change: transform;
|
|
70
70
|
transform: translateZ(0);
|
|
71
71
|
}
|
|
72
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
72
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] {
|
|
73
73
|
/* 针对拖动元素的优化 */
|
|
74
74
|
}
|
|
75
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
75
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt-task {
|
|
76
76
|
backface-visibility: hidden;
|
|
77
77
|
transform: translateZ(0);
|
|
78
78
|
}
|
|
79
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
79
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt-task.dragging {
|
|
80
80
|
z-index: 1000;
|
|
81
81
|
pointer-events: none;
|
|
82
82
|
}
|
|
83
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
83
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] {
|
|
84
84
|
/* 防止拖动时底部区域的重绘闪烁 */
|
|
85
85
|
}
|
|
86
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
86
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt-chart-container {
|
|
87
87
|
position: relative;
|
|
88
88
|
overflow: hidden;
|
|
89
89
|
}
|
|
90
|
-
.c-vtable-gantt-wrapper .gantt-container[data-v-
|
|
90
|
+
.c-vtable-gantt-wrapper .gantt-container[data-v-d89b5f44] .vtable-gantt-chart-container::after {
|
|
91
91
|
content: "";
|
|
92
92
|
position: absolute;
|
|
93
93
|
bottom: 0;
|
|
@@ -99,23 +99,24 @@
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/* layer: shortcuts */
|
|
102
|
-
.container[data-v-
|
|
102
|
+
.container[data-v-d89b5f44]{width:100%;}
|
|
103
103
|
@media (min-width: 640px){
|
|
104
|
-
.container[data-v-
|
|
104
|
+
.container[data-v-d89b5f44]{max-width:640px;}
|
|
105
105
|
}
|
|
106
106
|
@media (min-width: 768px){
|
|
107
|
-
.container[data-v-
|
|
107
|
+
.container[data-v-d89b5f44]{max-width:768px;}
|
|
108
108
|
}
|
|
109
109
|
@media (min-width: 1024px){
|
|
110
|
-
.container[data-v-
|
|
110
|
+
.container[data-v-d89b5f44]{max-width:1024px;}
|
|
111
111
|
}
|
|
112
112
|
@media (min-width: 1280px){
|
|
113
|
-
.container[data-v-
|
|
113
|
+
.container[data-v-d89b5f44]{max-width:1280px;}
|
|
114
114
|
}
|
|
115
115
|
@media (min-width: 1536px){
|
|
116
|
-
.container[data-v-
|
|
116
|
+
.container[data-v-d89b5f44]{max-width:1536px;}
|
|
117
117
|
}
|
|
118
118
|
/* layer: default */
|
|
119
|
-
.visible[data-v-
|
|
120
|
-
.grid[data-v-
|
|
121
|
-
.
|
|
119
|
+
.visible[data-v-d89b5f44]{visibility:visible;}
|
|
120
|
+
.grid[data-v-d89b5f44]{display:grid;}
|
|
121
|
+
.table[data-v-d89b5f44]{display:table;}
|
|
122
|
+
.px[data-v-d89b5f44]{padding-left:1rem;padding-right:1rem;}
|