@robot-admin/naive-ui-components 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +5 -5
- package/README_EN.md +5 -5
- package/SECURITY.md +39 -0
- package/dist/C_AntV.css +31 -31
- package/dist/C_AntV2.cjs +1 -1
- package/dist/C_AntV2.js +1 -1
- package/dist/C_Breadcrumb.css +308 -20
- package/dist/C_Breadcrumb.d.cts +2 -2
- package/dist/C_Breadcrumb.d.ts +2 -2
- package/dist/C_Breadcrumb2.cjs +1 -1
- package/dist/C_Breadcrumb2.js +1 -1
- package/dist/C_Chat.css +90 -90
- package/dist/C_Chat2.cjs +1 -1
- package/dist/C_Chat2.js +1 -1
- package/dist/C_CollapsePanel2.cjs +1 -1
- package/dist/C_CollapsePanel2.js +1 -1
- package/dist/C_Draggable.css +53 -53
- package/dist/C_Draggable2.cjs +1 -1
- package/dist/C_Draggable2.js +1 -1
- package/dist/C_FilePreview.css +98 -98
- package/dist/C_FilePreview.d.cts +2 -2
- package/dist/C_FilePreview.d.ts +2 -2
- package/dist/C_FilePreview2.cjs +1 -1
- package/dist/C_FilePreview2.js +1 -1
- package/dist/C_Form.base.css +9 -9
- package/dist/C_Form.css +9 -9
- package/dist/C_FormSearch.css +52 -52
- package/dist/C_FormSearch2.cjs +1 -1
- package/dist/C_FormSearch2.js +1 -1
- package/dist/C_Language.css +2 -2
- package/dist/C_Language2.cjs +1 -1
- package/dist/C_Language2.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_Menu.css +1 -1
- package/dist/C_Menu.d.cts +2 -2
- package/dist/C_Menu.d.ts +2 -2
- package/dist/C_Menu2.cjs +1 -1
- package/dist/C_Menu2.js +1 -1
- package/dist/C_NotificationCenter.css +124 -124
- package/dist/C_NotificationCenter.d.cts +2 -2
- package/dist/C_NotificationCenter.d.ts +2 -2
- package/dist/C_NotificationCenter2.cjs +1 -1
- package/dist/C_NotificationCenter2.js +1 -1
- package/dist/C_Skeleton.css +2 -2
- package/dist/C_Skeleton2.cjs +1 -1
- package/dist/C_Skeleton2.js +1 -1
- package/dist/C_SplitPane.css +66 -66
- package/dist/C_SplitPane2.cjs +1 -1
- package/dist/C_SplitPane2.js +1 -1
- package/dist/C_Table.base.css +9 -9
- package/dist/C_Table.css +9 -9
- package/dist/C_Table.d.ts +1 -0
- package/dist/C_Theme2.cjs +1 -1
- package/dist/C_Theme2.js +1 -1
- package/dist/C_Timeline.css +46 -46
- package/dist/C_Timeline2.cjs +1 -1
- package/dist/C_Timeline2.js +1 -1
- package/dist/C_Transfer.css +26 -26
- package/dist/C_Transfer2.cjs +1 -1
- package/dist/C_Transfer2.js +1 -1
- package/dist/C_Tree.css +23 -23
- package/dist/C_Tree.d.ts +1 -0
- package/dist/C_Tree2.cjs +1 -1
- package/dist/C_Tree2.js +1 -1
- package/dist/C_Upload2.cjs +1 -1
- package/dist/C_Upload2.js +1 -1
- package/dist/C_VideoPlayer.d.cts +2 -2
- package/dist/C_VideoPlayer.d.ts +2 -2
- package/dist/C_VideoPlayer2.cjs +2 -2
- package/dist/C_VideoPlayer2.js +2 -2
- package/dist/C_WaterFall.css +31 -29
- package/dist/C_WaterFall2.cjs +1 -1
- package/dist/C_WaterFall2.js +1 -1
- package/dist/C_WorkFlow.css +111 -111
- package/dist/C_WorkFlow2.cjs +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/config.cjs +1 -0
- package/dist/config.d.cts +8 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +1 -0
- package/dist/constants3.d.cts +34 -11
- package/dist/constants3.d.ts +34 -11
- package/dist/constants4.d.cts +14 -3
- package/dist/constants4.d.ts +14 -3
- package/dist/constants5.d.cts +24 -20
- package/dist/constants5.d.ts +24 -20
- package/dist/data.d.cts +6 -6
- package/dist/data.d.ts +6 -6
- package/dist/dateRange.d.cts +2 -0
- package/dist/dateRange.d.ts +2 -0
- package/dist/feedback.cjs +1 -1
- package/dist/feedback.js +1 -1
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +8 -7
- package/dist/index.d.ts +9 -7
- package/dist/index.js +1 -1
- package/dist/index.vue.d.cts +4 -4
- package/dist/index.vue.d.ts +4 -4
- 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/index12.vue.d.ts +2 -2
- package/dist/index13.vue.d.cts +2 -2
- package/dist/index13.vue.d.ts +6 -6
- package/dist/index14.vue.d.cts +6 -6
- package/dist/index14.vue.d.ts +0 -1
- package/dist/index15.vue.d.cts +0 -1
- package/dist/index16.vue.d.ts +2 -2
- package/dist/index17.vue.d.cts +2 -2
- package/dist/index17.vue.d.ts +1 -1
- package/dist/index18.vue.d.cts +1 -1
- package/dist/index18.vue.d.ts +44 -40
- package/dist/index19.vue.d.cts +2 -2
- package/dist/index19.vue.d.ts +2 -2
- package/dist/index2.vue.d.cts +1 -1
- package/dist/index2.vue.d.ts +1 -1
- package/dist/index20.vue.d.cts +1 -1
- package/dist/index20.vue.d.ts +1 -1
- package/dist/index21.vue.d.cts +1 -1
- package/dist/index21.vue.d.ts +1 -1
- package/dist/index22.vue.d.cts +2 -2
- package/dist/index22.vue.d.ts +2 -2
- package/dist/index25.vue.d.cts +2 -3
- package/dist/index25.vue.d.ts +2 -3
- package/dist/index26.vue.d.cts +3 -3
- package/dist/index26.vue.d.ts +3 -3
- package/dist/index3.vue.d.cts +4 -4
- package/dist/index3.vue.d.ts +4 -4
- package/dist/index4.vue.d.cts +44 -40
- package/dist/index4.vue.d.ts +26 -12
- package/dist/index5.vue.d.cts +26 -12
- package/dist/index6.vue.d.ts +0 -2
- package/dist/index7.vue.d.cts +0 -2
- package/dist/index8.vue.d.ts +4 -4
- package/dist/index9.vue.d.cts +4 -4
- package/dist/index9.vue.d.ts +5 -5
- package/dist/mapUtils.d.cts +3 -3
- package/dist/mapUtils.d.ts +3 -3
- package/dist/presets.d.cts +1 -1
- package/dist/presets.d.ts +1 -1
- package/dist/public.d.ts +3 -1
- package/dist/style.css +1154 -864
- package/dist/types.d.cts +3 -1
- package/dist/useCalendarEvents.d.cts +1 -1
- package/dist/useCalendarEvents.d.ts +1 -1
- package/dist/useCollapsePanel.d.cts +3 -3
- package/dist/useCollapsePanel.d.ts +3 -3
- package/dist/useComponentLocale.cjs +1 -1
- package/dist/useComponentLocale.js +1 -1
- package/dist/useCropperCore.d.cts +4 -4
- package/dist/useCropperCore.d.ts +4 -4
- package/dist/useDraggableLayout.d.cts +1 -0
- package/dist/useDraggableLayout.d.ts +1 -0
- package/dist/useEdgeInteraction.d.cts +2 -2
- package/dist/useEdgeInteraction.d.ts +2 -2
- package/dist/useFullscreen.d.cts +41 -23
- package/dist/useFullscreen.d.ts +41 -23
- package/dist/useInfiniteScroll.d.cts +6 -4
- package/dist/useInfiniteScroll.d.ts +6 -4
- package/dist/useQRCode.d.cts +4 -4
- package/dist/useQRCode.d.ts +4 -4
- package/dist/useSignatureHistory.d.cts +2 -2
- package/dist/useSignatureHistory.d.ts +2 -2
- package/dist/useSplitResize.d.cts +6 -7
- package/dist/useSplitResize.d.ts +6 -7
- package/dist/useTableQuery.cjs +1 -1
- package/dist/useTableQuery.d.cts +6 -10
- package/dist/useTableQuery.d.ts +6 -10
- package/dist/useTableQuery.js +1 -1
- package/dist/useWorkflowValidation.d.cts +11 -3
- package/dist/useWorkflowValidation.d.ts +11 -3
- package/dist/verification.d.cts +1 -1
- package/dist/verification.d.ts +1 -1
- package/docs/architecture.en.md +3 -1
- package/docs/architecture.md +3 -1
- package/docs/guides/usage.en.md +22 -0
- package/docs/guides/usage.md +73 -0
- package/package.json +27 -10
- package/dist/context.cjs +0 -1
- package/dist/context.js +0 -1
package/dist/C_VideoPlayer2.cjs
CHANGED
|
@@ -1,4 +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;y();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,p=()=>!u&&e===l&&r.value===f;f.on(m.READY,()=>{p()&&(i.value=`ready`)}),f.on(m.PLAY,()=>{p()&&(i.value=`playing`)}),f.on(m.PAUSE,()=>{p()&&(i.value=`paused`)}),f.on(m.ENDED,()=>{p()&&(i.value=`ended`)}),f.on(m.ERROR,()=>{p()&&(i.value=`error`)}),f.on(m.TIME_UPDATE,()=>{p()&&(o.value=f.currentTime??0,s.value=f.duration??0)}),f.on(m.DURATION_CHANGE,()=>{p()&&(s.value=f.duration??0)}),f.on(m.FULLSCREEN_CHANGE,e=>{p()&&(c.value=e)})}function y(){l++;let e=r.value;e&&(r.value=null,e.destroy()),i.value=`idle`,o.value=0,s.value=0,c.value=!1}return(0,n.onBeforeUnmount)(()=>{u=!0}),(0,n.onUnmounted)(()=>{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=!1,g=null,_=null,v=a.value;function y(){return p.PROGRESS+encodeURIComponent(v)}function b(){let e=t.t(y());return!e||typeof e!=`object`?0:(u.value=S(e.watchedDuration),d.value=Math.min(100,S(e.completionPercent)),S(e.currentTime))}function x(){return{currentTime:r.value,duration:i.value,watchedDuration:u.value,completionPercent:d.value,updatedAt:Date.now()}}function C(){v&&t.i(y(),x())}function w(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function T(){w(c,x()),C()}function E(){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 D(){let e=l?.heartbeatInterval??o;!Number.isFinite(e)||e<=0||(g=setInterval(()=>{m&&w(l?.onHeartbeat,x())},e))}function O(){_=setInterval(()=>{m&&T()},s)}function k(){let e=x();C(),w(c,e)}function A(){if(document.hidden)E(),T(),m=!1;else{let t=e.value;t&&!t.paused&&(m=!0,f=performance.now())}}function j(){N(),h=!0,D(),O(),window.addEventListener(`beforeunload`,k),document.addEventListener(`visibilitychange`,A)}function M(){let e=h;E(),m=!1,h=!1,N(),e&&C()}function N(){g&&=(clearInterval(g),null),_&&=(clearInterval(_),null),window.removeEventListener(`beforeunload`,k),document.removeEventListener(`visibilitychange`,A)}function P(){h||j(),m=!0,f=performance.now()}function F(){E(),m=!1,f=0,C()}function I(){E()}return(0,n.watch)(a,e=>{M(),v=e,u.value=0,d.value=0,f=0,r.value=0,i.value=0},{flush:`sync`}),(0,n.watch)(e,e=>{e?j():N()}),(0,n.onBeforeUnmount)(()=>{M()}),{watchedDuration:u,completionPercent:d,getProgressData:x,restoreProgress:b,saveProgress:C,startTracking:j,stopTracking:M,onPlay:P,onPause:F,onTimeUpdate:I}}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),a=()=>(0,n.toValue)(t)??[],o=e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate});function s(){let a=(0,n.toValue)(t);if(a===void 0)return;let s=a,c=e.value;c&&(c.definitionList=s.map(o)),s.some(e=>e.label===r.value)||(r.value=null,i.value=!1)}(0,n.watch)([e,()=>(0,n.toValue)(t)],s,{deep:!0});function c(o){o.on(m.AFTER_DEFINITION_CHANGE,s=>{if(e.value!==o)return;let c=typeof s.to==`string`?s.to:s.to.definition;(0,n.toValue)(t)!==void 0&&!a().some(e=>e.label===c)||(r.value=c,i.value=!1)}),o.on(m.BEFORE_DEFINITION_CHANGE,()=>{e.value===o&&(i.value=!0)})}function l(t){let n=e.value,r=a().find(e=>e.label===t);!n||!r||(i.value=!0,n.changeDefinition(o(r)))}return{currentQuality:r,isSwitching:i,switchQuality:l,bindEvents:c}}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)([]);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(0,n.watch)([e,()=>(0,n.toValue)(a)],()=>{let e=(0,n.toValue)(a)??[];o.value=e.map(e=>({...e})),e.length||c()},{immediate:!0,deep:!0,flush:`sync`}),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:m,goToBookmark:h,clearBookmarks:g}}function E(e,t,r){let i=(0,n.computed)(()=>(0,n.toValue)(r)),a=(0,n.ref)(0),o=(0,n.ref)(!0),s=(0,n.ref)(!1),c=(0,n.computed)(()=>i.value?.watermark??!1),l=(0,n.ref)(i.value?.watermarkText??``);function u(e){e>a.value&&(a.value=e)}function d(e){!i.value?.preventSeekOnFirstWatch||!o.value||(e.currentTime??0)>a.value+2&&(e.currentTime=a.value)}function f(){if(!i.value?.focusDetection)return;let t=e.value;t&&(document.hidden?(s.value=!0,t.paused||t.pause()):s.value=!1)}function p(n){n.on(m.SEEKING,()=>{e.value===n&&d(n)}),n.on(m.TIME_UPDATE,()=>{e.value===n&&u(t.value)}),document.addEventListener(`visibilitychange`,f)}function h(){o.value=!1}function g(e){l.value=e}return(0,n.watch)(()=>i.value?.watermarkText,e=>{l.value=e??``}),(0,n.onBeforeUnmount)(()=>{document.removeEventListener(`visibilitychange`,f)}),{maxWatchedTime:a,isFirstWatch:o,isBlurred:s,showWatermark:c,watermarkText:l,bindEvents:p,markAsWatched:h,setWatermarkText:g}}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,`
|
|
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(t){if(t===`dash`||t===`flv`){let n=e.sourceAdapters?.[t];if(!n)throw Error(`视频协议 ${t.toUpperCase()} 未配置 sourceAdapters 适配器`);return await n()}else if(t===`hls`){let{default:e}=await import(`xgplayer-hls`);return e}else{let{default:e}=await import(`xgplayer`);return e}}async function y(){if(u||!t.value)return;b();let e=++l;i.value=`loading`;let n=_(),a=n.__sourceType;delete n.__sourceType;let d;try{if(d=await v(a),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,p=()=>!u&&e===l&&r.value===f;f.on(m.READY,()=>{p()&&(i.value=`ready`)}),f.on(m.PLAY,()=>{p()&&(i.value=`playing`)}),f.on(m.PAUSE,()=>{p()&&(i.value=`paused`)}),f.on(m.ENDED,()=>{p()&&(i.value=`ended`)}),f.on(m.ERROR,()=>{p()&&(i.value=`error`)}),f.on(m.TIME_UPDATE,()=>{p()&&(o.value=f.currentTime??0,s.value=f.duration??0)}),f.on(m.DURATION_CHANGE,()=>{p()&&(s.value=f.duration??0)}),f.on(m.FULLSCREEN_CHANGE,e=>{p()&&(c.value=e)})}function b(){l++;let e=r.value;e&&(r.value=null,e.destroy()),i.value=`idle`,o.value=0,s.value=0,c.value=!1}return(0,n.onBeforeUnmount)(()=>{u=!0}),(0,n.onUnmounted)(()=>{u=!0,b()}),{containerRef:t,playerRef:r,playerState:i,currentTime:o,duration:s,isFullscreen:c,initPlayer:y,destroyPlayer:b}}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=!1,g=null,_=null,v=a.value;function y(){return p.PROGRESS+encodeURIComponent(v)}function b(){let e=t.t(y());return!e||typeof e!=`object`?0:(u.value=S(e.watchedDuration),d.value=Math.min(100,S(e.completionPercent)),S(e.currentTime))}function x(){return{currentTime:r.value,duration:i.value,watchedDuration:u.value,completionPercent:d.value,updatedAt:Date.now()}}function C(){v&&t.i(y(),x())}function w(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function T(){w(c,x()),C()}function E(){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 D(){let e=l?.heartbeatInterval??o;!Number.isFinite(e)||e<=0||(g=setInterval(()=>{m&&w(l?.onHeartbeat,x())},e))}function O(){_=setInterval(()=>{m&&T()},s)}function k(){let e=x();C(),w(c,e)}function A(){if(document.hidden)E(),T(),m=!1;else{let t=e.value;t&&!t.paused&&(m=!0,f=performance.now())}}function j(){N(),h=!0,D(),O(),window.addEventListener(`beforeunload`,k),document.addEventListener(`visibilitychange`,A)}function M(){let e=h;E(),m=!1,h=!1,N(),e&&C()}function N(){g&&=(clearInterval(g),null),_&&=(clearInterval(_),null),window.removeEventListener(`beforeunload`,k),document.removeEventListener(`visibilitychange`,A)}function P(){h||j(),m=!0,f=performance.now()}function F(){E(),m=!1,f=0,C()}function I(){E()}return(0,n.watch)(a,e=>{M(),v=e,u.value=0,d.value=0,f=0,r.value=0,i.value=0},{flush:`sync`}),(0,n.watch)(e,e=>{e?j():N()}),(0,n.onBeforeUnmount)(()=>{M()}),{watchedDuration:u,completionPercent:d,getProgressData:x,restoreProgress:b,saveProgress:C,startTracking:j,stopTracking:M,onPlay:P,onPause:F,onTimeUpdate:I}}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),a=()=>(0,n.toValue)(t)??[],o=e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate});function s(){let a=(0,n.toValue)(t);if(a===void 0)return;let s=a,c=e.value;c&&(c.definitionList=s.map(o)),s.some(e=>e.label===r.value)||(r.value=null,i.value=!1)}(0,n.watch)([e,()=>(0,n.toValue)(t)],s,{deep:!0});function c(o){o.on(m.AFTER_DEFINITION_CHANGE,s=>{if(e.value!==o)return;let c=typeof s.to==`string`?s.to:s.to.definition;(0,n.toValue)(t)!==void 0&&!a().some(e=>e.label===c)||(r.value=c,i.value=!1)}),o.on(m.BEFORE_DEFINITION_CHANGE,()=>{e.value===o&&(i.value=!0)})}function l(t){let n=e.value,r=a().find(e=>e.label===t);!n||!r||(i.value=!0,n.changeDefinition(o(r)))}return{currentQuality:r,isSwitching:i,switchQuality:l,bindEvents:c}}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)([]);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(0,n.watch)([e,()=>(0,n.toValue)(a)],()=>{let e=(0,n.toValue)(a)??[];o.value=e.map(e=>({...e})),e.length||c()},{immediate:!0,deep:!0,flush:`sync`}),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:m,goToBookmark:h,clearBookmarks:g}}function E(e,t,r){let i=(0,n.computed)(()=>(0,n.toValue)(r)),a=(0,n.ref)(0),o=(0,n.ref)(!0),s=(0,n.ref)(!1),c=(0,n.computed)(()=>i.value?.watermark??!1),l=(0,n.ref)(i.value?.watermarkText??``);function u(e){e>a.value&&(a.value=e)}function d(e){!i.value?.preventSeekOnFirstWatch||!o.value||(e.currentTime??0)>a.value+2&&(e.currentTime=a.value)}function f(){if(!i.value?.focusDetection)return;let t=e.value;t&&(document.hidden?(s.value=!0,t.paused||t.pause()):s.value=!1)}function p(n){n.on(m.SEEKING,()=>{e.value===n&&d(n)}),n.on(m.TIME_UPDATE,()=>{e.value===n&&u(t.value)}),document.addEventListener(`visibilitychange`,f)}function h(){o.value=!1}function g(e){l.value=e}return(0,n.watch)(()=>i.value?.watermarkText,e=>{l.value=e??``}),(0,n.onBeforeUnmount)(()=>{document.removeEventListener(`visibilitychange`,f)}),{maxWatchedTime:a,isFirstWatch:o,isBlurred:s,showWatermark:c,watermarkText:l,bindEvents:p,markAsWatched:h,setWatermarkText:g}}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
2
|
`).trim().split(/\n\s*\n/);for(let e of n){let n=e.trim().split(`
|
|
3
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)(((0,n.toValue)(t)??[]).map(e=>({...e}))),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||c.get(e)?.controller!==r)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.get(e)?.controller===r&&(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()}function v(){l++,c.forEach(({controller:e})=>e.abort()),c.clear(),o.value={},i.value=null,s.value=!1}return(0,n.watch)(()=>(0,n.toValue)(t),e=>{v(),a.value=(e??[]).map(e=>({...e})),h()},{deep:!0}),(0,n.onBeforeUnmount)(()=>{u=!0,v()}),{activeLanguage:i,subtitleList:a,currentText:d,hasSubtitles:f,isLoading:s,initSubtitles:h,resetSubtitles:v,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(e){return JSON.stringify([e.id,e.triggerTime,e.type,e.title,e.options.map(e=>[e.key,e.label]),Array.isArray(e.answer)?[...e.answer].sort():e.answer,e.required===!0])}let u,d=new Set,f=new Map(r.value.map(e=>[e.id,l(e)]));function p(){i.value=null,u=void 0,o.value=``,s.value=!1,c.value=!1}function m(){if(i.value||!r.value.length)return;let e=t.value,n=r.value.find(t=>!a.value.has(t.id)&&!d.has(t.id)&&Math.abs(e-t.triggerTime)<1);n&&h(n)}function h(t){i.value=t,u=l(t),o.value=t.type===`multiple`?[]:``,s.value=!1,c.value=!1,e.value?.pause()}function g(){if(x(),!i.value)return!1;let e=i.value,t=y(e,o.value);return c.value=t,s.value=!0,(t||!e.required)&&a.value.add(e.id),t}function _(){if(x(),!i.value)return;let t=i.value;t.required&&!a.value.has(t.id)||(p(),e.value?.play())}function v(){x(),i.value&&(o.value=i.value.type===`multiple`?[]:``,s.value=!1,c.value=!1)}function y(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}(0,n.watch)(t,()=>{d.clear(),x()||m()});let b=()=>r.value.map(e=>({quiz:e,identity:l(e)}));function x(e=b()){let t=new Map(e.map(({quiz:e,identity:t})=>[e.id,t]));if(a.value.forEach(e=>{(!t.has(e)||f.get(e)!==t.get(e))&&a.value.delete(e)}),f=t,i.value){let t=e.find(({quiz:e})=>e.id===i.value.id);if(!t||t.identity!==u)return d.add(i.value.id),p(),!0;i.value=t.quiz}return!1}return(0,n.watch)(b,e=>{x(e)||m()}),{activeQuiz:i,completedQuizIds:a,selectedAnswer:o,showResult:s,lastAnswerCorrect:c,submitAnswer:g,closeQuiz:_,retryQuiz:v}}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{onToggleFullscreen:i}=r,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)+d)},ArrowDown:(e,t)=>{e.preventDefault(),t.volume=Math.max(0,(t.volume??0)-d)},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.enabled===!1)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(){t.value?.addEventListener(`keydown`,o)}function c(){t.value?.removeEventListener(`keydown`,o)}return(0,n.onBeforeUnmount)(()=>{c()}),{startListening:s,stopListening:c}}function F(e,t){let n=!0;function r(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function i(e,i){if(!n)return;let a=r(e,i);try{Promise.resolve(t(a)).catch(()=>void 0)}catch{}}let a=()=>i(`play`),o=()=>i(`pause`),s=()=>i(`ended`),c=()=>i(`seek`),l=()=>i(`error`),u=()=>i(`buffer`),d=e=>{i(`fullscreen`,{isFullscreen:e})},f=e=>{i(`quality_change`,e)},p=()=>{i(`speed_change`,{rate:e.playbackRate})};e.on(m.PLAY,a),e.on(m.PAUSE,o),e.on(m.ENDED,s),e.on(m.SEEKED,c),e.on(m.ERROR,l),e.on(m.WAITING,u),e.on(m.FULLSCREEN_CHANGE,d),e.on(m.DEFINITION_CHANGE,f),e.on(m.RATE_CHANGE,p);function h(){n=!1,e.off(m.PLAY,a),e.off(m.PAUSE,o),e.off(m.ENDED,s),e.off(m.SEEKED,c),e.off(m.ERROR,l),e.off(m.WAITING,u),e.off(m.FULLSCREEN_CHANGE,d),e.off(m.DEFINITION_CHANGE,f),e.off(m.RATE_CHANGE,p)}return{report:i,destroy:h}}const I={key:0,class:`vp-control-bar`},L={class:`vp-control-bar__left`},R={class:`vp-control-bar__center`},z={class:`vp-control-bar__right`},B=(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`,I,[(0,n.createElementVNode)(`div`,L,[(0,n.renderSlot)(t.$slots,`left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,R,[(0,n.renderSlot)(t.$slots,`center`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,z,[(0,n.renderSlot)(t.$slots,`right`,{},void 0,!0)])])):(0,n.createCommentVNode)(`v-if`,!0)}});var ee=e.t(B,[[`__scopeId`,`data-v-e8b787cf`]]);const V={key:0,class:`vp-subtitle-overlay`},H={class:`vp-subtitle-text`},U={key:0,class:`vp-subtitle-toggle`},te={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`,V,[(0,n.createElementVNode)(`span`,H,(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`,U,[(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`,te,[(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`},ge={class:`vp-quiz-type-tag`},_e={class:`vp-quiz-title`},ve={class:`vp-quiz-options`},ye={class:`vp-quiz-actions`},be=(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`,ge,(0,n.toDisplayString)(s.value),1),(0,n.createElementVNode)(`h3`,_e,(0,n.toDisplayString)(e.quiz.title),1)]),(0,n.createCommentVNode)(` 选项 `),(0,n.createElementVNode)(`div`,ve,[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`,ye,[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 xe=e.t(be,[[`__scopeId`,`data-v-1132a37b`]]);const $=(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($,[[`__scopeId`,`data-v-9a051cb4`]]);const Ce=(0,n.defineComponent)({name:`VideoPlayerRuntime`,__name:`VideoPlayerRuntime`,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,e=>i.onProgress?.(e),{get heartbeatInterval(){return i.antiCheat?.heartbeatInterval},get onHeartbeat(){return i.antiCheat?.onHeartbeat}}),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),I=M(c,u,(0,n.computed)(()=>i.quizzes??[])),L=N(p,(0,n.computed)(()=>i.miniPlayer??!1)),R=P(c,p,{get enabled(){return i.keyboard!==!1},onToggleFullscreen:()=>{c.value?.getFullscreen?.()}}),z=null,B=!1;(0,n.watch)([c,()=>i.onAnalytics],([e,t])=>{z?.(),z=null,!(B||!e||!t)&&(z=F(e,e=>i.onAnalytics?.(e)).destroy)},{flush:`post`});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),k.bindEvents(e),A.initSubtitles(),R.startListening(),L.initObserver();let t=y.restoreProgress();t>0&&i.startTime===void 0&&(e.currentTime=t,u.value=t);let r=()=>!B&&c.value===e;e.on(m.PLAY,()=>{r()&&y.onPlay()}),e.on(m.PAUSE,()=>{r()&&y.onPause()}),e.on(m.TIME_UPDATE,()=>{r()&&(y.onTimeUpdate(),a(`timeUpdate`,u.value,d.value),a(`progressUpdate`,y.getProgressData()))}),e.on(m.ENDED,()=>{r()&&(a(`ended`),k.markAsWatched())}),e.on(m.ERROR,()=>{r()&&a(`error`,Error(`播放器错误`))}),e.on(m.READY,()=>{r()&&a(`ready`)}),e.on(m.AFTER_DEFINITION_CHANGE,e=>{r()&&a(`qualityChange`,typeof e.to==`string`?e.to:e.to.definition)}),e.on(m.RATE_CHANGE,()=>{r()&&a(`rateChange`,e.playbackRate)})}),(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:()=>{y.stopTracking(),A.resetSubtitles(),z?.(),z=null,R.stopListening(),L.destroyObserver(),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)(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)(xe,{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)(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: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 we=e.t(Ce,[[`__scopeId`,`data-v-11b6a582`]]);const Te=(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=(0,n.ref)(),s=(0,n.ref)(!0),c=(0,n.computed)(()=>JSON.stringify([i.url,i.sourceType]));return(0,n.watch)(c,()=>{s.value=!0},{flush:`sync`}),t({play:()=>o.value?.play(),pause:()=>o.value?.pause(),seek:e=>o.value?.seek(e),setPlaybackRate:e=>o.value?.setPlaybackRate(e),setVolume:e=>o.value?.setVolume(e),switchQuality:e=>o.value?.switchQuality(e),getProgressData:()=>o.value?.getProgressData()??{currentTime:0,duration:0,watchedDuration:0,completionPercent:0,updatedAt:Date.now()},destroy:()=>{o.value?.destroy(),s.value=!1},getPlayerInstance:()=>o.value?.getPlayerInstance()??null}),(e,t)=>i.url&&s.value?((0,n.openBlock)(),(0,n.createBlock)(we,(0,n.mergeProps)({key:c.value,ref_key:`runtime`,ref:o},i,{onReady:t[0]||=e=>a(`ready`),onStateChange:t[1]||=e=>a(`stateChange`,e),onTimeUpdate:t[2]||=(e,t)=>a(`timeUpdate`,e,t),onEnded:t[3]||=e=>a(`ended`),onError:t[4]||=e=>a(`error`,e),onQualityChange:t[5]||=e=>a(`qualityChange`,e),onRateChange:t[6]||=e=>a(`rateChange`,e),onFullscreenChange:t[7]||=e=>a(`fullscreenChange`,e),onBookmarkChange:t[8]||=e=>a(`bookmarkChange`,e),onQuizAnswer:t[9]||=(e,t,n)=>a(`quizAnswer`,e,t,n),onChapterChange:t[10]||=e=>a(`chapterChange`,e),onProgressUpdate:t[11]||=e=>a(`progressUpdate`,e)}),null,16)):(0,n.createCommentVNode)(`v-if`,!0)}});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 Te}}),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}});
|
|
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)(((0,n.toValue)(t)??[]).map(e=>({...e}))),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||c.get(e)?.controller!==r)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.get(e)?.controller===r&&(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()}function v(){l++,c.forEach(({controller:e})=>e.abort()),c.clear(),o.value={},i.value=null,s.value=!1}return(0,n.watch)(()=>(0,n.toValue)(t),e=>{v(),a.value=(e??[]).map(e=>({...e})),h()},{deep:!0}),(0,n.onBeforeUnmount)(()=>{u=!0,v()}),{activeLanguage:i,subtitleList:a,currentText:d,hasSubtitles:f,isLoading:s,initSubtitles:h,resetSubtitles:v,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(e){return JSON.stringify([e.id,e.triggerTime,e.type,e.title,e.options.map(e=>[e.key,e.label]),Array.isArray(e.answer)?[...e.answer].sort():e.answer,e.required===!0])}let u,d=new Set,f=new Map(r.value.map(e=>[e.id,l(e)]));function p(){i.value=null,u=void 0,o.value=``,s.value=!1,c.value=!1}function m(){if(i.value||!r.value.length)return;let e=t.value,n=r.value.find(t=>!a.value.has(t.id)&&!d.has(t.id)&&Math.abs(e-t.triggerTime)<1);n&&h(n)}function h(t){i.value=t,u=l(t),o.value=t.type===`multiple`?[]:``,s.value=!1,c.value=!1,e.value?.pause()}function g(){if(x(),!i.value)return!1;let e=i.value,t=y(e,o.value);return c.value=t,s.value=!0,(t||!e.required)&&a.value.add(e.id),t}function _(){if(x(),!i.value)return;let t=i.value;t.required&&!a.value.has(t.id)||(p(),e.value?.play())}function v(){x(),i.value&&(o.value=i.value.type===`multiple`?[]:``,s.value=!1,c.value=!1)}function y(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}(0,n.watch)(t,()=>{d.clear(),x()||m()});let b=()=>r.value.map(e=>({quiz:e,identity:l(e)}));function x(e=b()){let t=new Map(e.map(({quiz:e,identity:t})=>[e.id,t]));if(a.value.forEach(e=>{(!t.has(e)||f.get(e)!==t.get(e))&&a.value.delete(e)}),f=t,i.value){let t=e.find(({quiz:e})=>e.id===i.value.id);if(!t||t.identity!==u)return d.add(i.value.id),p(),!0;i.value=t.quiz}return!1}return(0,n.watch)(b,e=>{x(e)||m()}),{activeQuiz:i,completedQuizIds:a,selectedAnswer:o,showResult:s,lastAnswerCorrect:c,submitAnswer:g,closeQuiz:_,retryQuiz:v}}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{onToggleFullscreen:i}=r,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)+d)},ArrowDown:(e,t)=>{e.preventDefault(),t.volume=Math.max(0,(t.volume??0)-d)},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.enabled===!1)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(){t.value?.addEventListener(`keydown`,o)}function c(){t.value?.removeEventListener(`keydown`,o)}return(0,n.onBeforeUnmount)(()=>{c()}),{startListening:s,stopListening:c}}function F(e,t){let n=!0;function r(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function i(e,i){if(!n)return;let a=r(e,i);try{Promise.resolve(t(a)).catch(()=>void 0)}catch{}}let a=()=>i(`play`),o=()=>i(`pause`),s=()=>i(`ended`),c=()=>i(`seek`),l=()=>i(`error`),u=()=>i(`buffer`),d=e=>{i(`fullscreen`,{isFullscreen:e})},f=e=>{i(`quality_change`,e)},p=()=>{i(`speed_change`,{rate:e.playbackRate})};e.on(m.PLAY,a),e.on(m.PAUSE,o),e.on(m.ENDED,s),e.on(m.SEEKED,c),e.on(m.ERROR,l),e.on(m.WAITING,u),e.on(m.FULLSCREEN_CHANGE,d),e.on(m.DEFINITION_CHANGE,f),e.on(m.RATE_CHANGE,p);function h(){n=!1,e.off(m.PLAY,a),e.off(m.PAUSE,o),e.off(m.ENDED,s),e.off(m.SEEKED,c),e.off(m.ERROR,l),e.off(m.WAITING,u),e.off(m.FULLSCREEN_CHANGE,d),e.off(m.DEFINITION_CHANGE,f),e.off(m.RATE_CHANGE,p)}return{report:i,destroy:h}}const I={key:0,class:`vp-control-bar`},L={class:`vp-control-bar__left`},R={class:`vp-control-bar__center`},z={class:`vp-control-bar__right`},B=(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`,I,[(0,n.createElementVNode)(`div`,L,[(0,n.renderSlot)(t.$slots,`left`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,R,[(0,n.renderSlot)(t.$slots,`center`,{},void 0,!0)]),(0,n.createElementVNode)(`div`,z,[(0,n.renderSlot)(t.$slots,`right`,{},void 0,!0)])])):(0,n.createCommentVNode)(`v-if`,!0)}});var ee=e.t(B,[[`__scopeId`,`data-v-e8b787cf`]]);const V={key:0,class:`vp-subtitle-overlay`},H={class:`vp-subtitle-text`},U={key:0,class:`vp-subtitle-toggle`},te={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`,V,[(0,n.createElementVNode)(`span`,H,(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`,U,[(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`,te,[(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`},ge={class:`vp-quiz-type-tag`},_e={class:`vp-quiz-title`},ve={class:`vp-quiz-options`},ye={class:`vp-quiz-actions`},be=(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`,ge,(0,n.toDisplayString)(s.value),1),(0,n.createElementVNode)(`h3`,_e,(0,n.toDisplayString)(e.quiz.title),1)]),(0,n.createCommentVNode)(` 选项 `),(0,n.createElementVNode)(`div`,ve,[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`,ye,[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 xe=e.t(be,[[`__scopeId`,`data-v-1132a37b`]]);const $=(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($,[[`__scopeId`,`data-v-9a051cb4`]]);const Ce=(0,n.defineComponent)({name:`VideoPlayerRuntime`,__name:`VideoPlayerRuntime`,props:{url:{},sourceType:{},sourceAdapters:{},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,e=>i.onProgress?.(e),{get heartbeatInterval(){return i.antiCheat?.heartbeatInterval},get onHeartbeat(){return i.antiCheat?.onHeartbeat}}),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),I=M(c,u,(0,n.computed)(()=>i.quizzes??[])),L=N(p,(0,n.computed)(()=>i.miniPlayer??!1)),R=P(c,p,{get enabled(){return i.keyboard!==!1},onToggleFullscreen:()=>{c.value?.getFullscreen?.()}}),z=null,B=!1;(0,n.watch)([c,()=>i.onAnalytics],([e,t])=>{z?.(),z=null,!(B||!e||!t)&&(z=F(e,e=>i.onAnalytics?.(e)).destroy)},{flush:`post`});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),k.bindEvents(e),A.initSubtitles(),R.startListening(),L.initObserver();let t=y.restoreProgress();t>0&&i.startTime===void 0&&(e.currentTime=t,u.value=t);let r=()=>!B&&c.value===e;e.on(m.PLAY,()=>{r()&&y.onPlay()}),e.on(m.PAUSE,()=>{r()&&y.onPause()}),e.on(m.TIME_UPDATE,()=>{r()&&(y.onTimeUpdate(),a(`timeUpdate`,u.value,d.value),a(`progressUpdate`,y.getProgressData()))}),e.on(m.ENDED,()=>{r()&&(a(`ended`),k.markAsWatched())}),e.on(m.ERROR,()=>{r()&&a(`error`,Error(`播放器错误`))}),e.on(m.READY,()=>{r()&&a(`ready`)}),e.on(m.AFTER_DEFINITION_CHANGE,e=>{r()&&a(`qualityChange`,typeof e.to==`string`?e.to:e.to.definition)}),e.on(m.RATE_CHANGE,()=>{r()&&a(`rateChange`,e.playbackRate)})}),(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:()=>{y.stopTracking(),A.resetSubtitles(),z?.(),z=null,R.stopListening(),L.destroyObserver(),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)(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)(xe,{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)(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: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 we=e.t(Ce,[[`__scopeId`,`data-v-11b6a582`]]);const Te=(0,n.defineComponent)({name:`C_VideoPlayer`,__name:`index`,props:{url:{},sourceType:{},sourceAdapters:{},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=(0,n.ref)(),s=(0,n.ref)(!0),c=(0,n.computed)(()=>JSON.stringify([i.url,i.sourceType]));return(0,n.watch)(c,()=>{s.value=!0},{flush:`sync`}),t({play:()=>o.value?.play(),pause:()=>o.value?.pause(),seek:e=>o.value?.seek(e),setPlaybackRate:e=>o.value?.setPlaybackRate(e),setVolume:e=>o.value?.setVolume(e),switchQuality:e=>o.value?.switchQuality(e),getProgressData:()=>o.value?.getProgressData()??{currentTime:0,duration:0,watchedDuration:0,completionPercent:0,updatedAt:Date.now()},destroy:()=>{o.value?.destroy(),s.value=!1},getPlayerInstance:()=>o.value?.getPlayerInstance()??null}),(e,t)=>i.url&&s.value?((0,n.openBlock)(),(0,n.createBlock)(we,(0,n.mergeProps)({key:c.value,ref_key:`runtime`,ref:o},i,{onReady:t[0]||=e=>a(`ready`),onStateChange:t[1]||=e=>a(`stateChange`,e),onTimeUpdate:t[2]||=(e,t)=>a(`timeUpdate`,e,t),onEnded:t[3]||=e=>a(`ended`),onError:t[4]||=e=>a(`error`,e),onQualityChange:t[5]||=e=>a(`qualityChange`,e),onRateChange:t[6]||=e=>a(`rateChange`,e),onFullscreenChange:t[7]||=e=>a(`fullscreenChange`,e),onBookmarkChange:t[8]||=e=>a(`bookmarkChange`,e),onQuizAnswer:t[9]||=(e,t,n)=>a(`quizAnswer`,e,t,n),onChapterChange:t[10]||=e=>a(`chapterChange`,e),onProgressUpdate:t[11]||=e=>a(`progressUpdate`,e)}),null,16)):(0,n.createCommentVNode)(`v-if`,!0)}});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 Te}}),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,4 +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,mergeProps as m,nextTick as h,normalizeClass as g,normalizeStyle as _,onBeforeUnmount as v,onMounted as y,onUnmounted as b,openBlock as x,ref as S,renderList as C,renderSlot as w,resolveComponent as T,shallowRef as E,toDisplayString as D,toRef as O,toValue as k,unref as A,useModel as j,watch as M,withCtx as N}from"vue";import{NBadge as P,NButton as F,NCheckbox as I,NCheckboxGroup as L,NPopover as R,NRadio as z,NRadioGroup as B}from"naive-ui";const V=[.5,.75,1,1.25,1.5,2,3],H=1,U=.75,W=3e4,G=5e3,ee={"360p":`流畅 360P`,"480p":`标清 480P`,"720p":`高清 720P`,"1080p":`超清 1080P`,"1440p":`2K 1440P`,"4K":`4K 超高清`},te={".mp4":`mp4`,".m3u8":`hls`,".mpd":`dash`,".flv":`flv`},ne={SPACE:`播放/暂停`,ARROW_LEFT:`快退 5 秒`,ARROW_RIGHT:`快进 5 秒`,ARROW_UP:`音量增加 10%`,ARROW_DOWN:`音量减少 10%`,F:`全屏/退出全屏`,M:`静音/取消静音`,ESC:`退出全屏`},re=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 ie(e){try{let{pathname:t}=new URL(e,location.href);return te[t.slice(t.lastIndexOf(`.`)).toLowerCase()]??`mp4`}catch{return`mp4`}}function ae(e){let t=S(null),n=E(null),r=S(`idle`),i=S(0),a=S(0),o=S(!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??U,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??ie(e.url),n={...l(),...u(),...d()};return f(n),n.__sourceType=t,n}async function m(){if(c||!t.value)return;h();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,m=()=>!c&&e===s&&n.value===f;f.on(Y.READY,()=>{m()&&(r.value=`ready`)}),f.on(Y.PLAY,()=>{m()&&(r.value=`playing`)}),f.on(Y.PAUSE,()=>{m()&&(r.value=`paused`)}),f.on(Y.ENDED,()=>{m()&&(r.value=`ended`)}),f.on(Y.ERROR,()=>{m()&&(r.value=`error`)}),f.on(Y.TIME_UPDATE,()=>{m()&&(i.value=f.currentTime??0,a.value=f.duration??0)}),f.on(Y.DURATION_CHANGE,()=>{m()&&(a.value=f.duration??0)}),f.on(Y.FULLSCREEN_CHANGE,e=>{m()&&(o.value=e)})}function h(){s++;let e=n.value;e&&(n.value=null,e.destroy()),r.value=`idle`,i.value=0,a.value=0,o.value=!1}return v(()=>{c=!0}),b(()=>{c=!0,h()}),{containerRef:t,playerRef:n,playerState:r,currentTime:i,duration:a,isFullscreen:o,initPlayer:m,destroyPlayer:h}}function oe(e){let n=S(se()),r=S(ce()),i=S(!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 M(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 se(){let e=Number(n(J.VOLUME));return Number.isFinite(e)&&e>=0&&e<=1?e:.75}function ce(){let e=Number(n(J.PLAYBACK_RATE));return Number.isFinite(e)&&e>0?e:1}function Z(e,r,i,a,o,s){let c=S(0),l=S(0),u=0,d=!1,f=!1,p=null,m=null,h=a.value;function g(){return J.PROGRESS+encodeURIComponent(h)}function _(){let e=n(g());return!e||typeof e!=`object`?0:(c.value=Q(e.watchedDuration),l.value=Math.min(100,Q(e.completionPercent)),Q(e.currentTime))}function y(){return{currentTime:r.value,duration:i.value,watchedDuration:c.value,completionPercent:l.value,updatedAt:Date.now()}}function b(){h&&t(g(),y())}function x(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function C(){x(o,y()),b()}function w(){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 T(){let e=s?.heartbeatInterval??W;!Number.isFinite(e)||e<=0||(p=setInterval(()=>{d&&x(s?.onHeartbeat,y())},e))}function E(){m=setInterval(()=>{d&&C()},G)}function D(){let e=y();b(),x(o,e)}function O(){if(document.hidden)w(),C(),d=!1;else{let t=e.value;t&&!t.paused&&(d=!0,u=performance.now())}}function k(){j(),f=!0,T(),E(),window.addEventListener(`beforeunload`,D),document.addEventListener(`visibilitychange`,O)}function A(){let e=f;w(),d=!1,f=!1,j(),e&&b()}function j(){p&&=(clearInterval(p),null),m&&=(clearInterval(m),null),window.removeEventListener(`beforeunload`,D),document.removeEventListener(`visibilitychange`,O)}function N(){f||k(),d=!0,u=performance.now()}function P(){w(),d=!1,u=0,b()}function F(){w()}return M(a,e=>{A(),h=e,c.value=0,l.value=0,u=0,r.value=0,i.value=0},{flush:`sync`}),M(e,e=>{e?k():j()}),v(()=>{A()}),{watchedDuration:c,completionPercent:l,getProgressData:y,restoreProgress:_,saveProgress:b,startTracking:k,stopTracking:A,onPlay:N,onPause:P,onTimeUpdate:F}}function Q(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function le(e,t){let n=S(null),r=S(!1),i=()=>k(t)??[],a=e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate});function o(){let i=k(t);if(i===void 0)return;let o=i,s=e.value;s&&(s.definitionList=o.map(a)),o.some(e=>e.label===n.value)||(n.value=null,r.value=!1)}M([e,()=>k(t)],o,{deep:!0});function s(a){a.on(Y.AFTER_DEFINITION_CHANGE,o=>{if(e.value!==a)return;let s=typeof o.to==`string`?o.to:o.to.definition;k(t)!==void 0&&!i().some(e=>e.label===s)||(n.value=s,r.value=!1)}),a.on(Y.BEFORE_DEFINITION_CHANGE,()=>{e.value===a&&(r.value=!0)})}function c(t){let n=e.value,o=i().find(e=>e.label===t);!n||!o||(r.value=!0,n.changeDefinition(a(o)))}return{currentQuality:n,isSwitching:r,switchQuality:c,bindEvents:s}}function ue(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 de(e,r,i,a=[]){let o=S([]);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 M([e,()=>k(a)],()=>{let e=k(a)??[];o.value=e.map(e=>({...e})),e.length||c()},{immediate:!0,deep:!0,flush:`sync`}),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:p,goToBookmark:m,clearBookmarks:h}}function fe(e,t,n){let r=a(()=>k(n)),i=S(0),o=S(!0),s=S(!1),c=a(()=>r.value?.watermark??!1),l=S(r.value?.watermarkText??``);function u(e){e>i.value&&(i.value=e)}function d(e){!r.value?.preventSeekOnFirstWatch||!o.value||(e.currentTime??0)>i.value+2&&(e.currentTime=i.value)}function f(){if(!r.value?.focusDetection)return;let t=e.value;t&&(document.hidden?(s.value=!0,t.paused||t.pause()):s.value=!1)}function p(n){n.on(Y.SEEKING,()=>{e.value===n&&d(n)}),n.on(Y.TIME_UPDATE,()=>{e.value===n&&u(t.value)}),document.addEventListener(`visibilitychange`,f)}function m(){o.value=!1}function h(e){l.value=e}return M(()=>r.value?.watermarkText,e=>{l.value=e??``}),v(()=>{document.removeEventListener(`visibilitychange`,f)}),{maxWatchedTime:i,isFirstWatch:o,isBlurred:s,showWatermark:c,watermarkText:l,bindEvents:p,markAsWatched:m,setWatermarkText:h}}function pe(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 me(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 he(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 ge(e){let t=[],n=e.replace(/\r\n?/g,`
|
|
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,mergeProps as m,nextTick as h,normalizeClass as g,normalizeStyle as _,onBeforeUnmount as v,onMounted as y,onUnmounted as b,openBlock as x,ref as S,renderList as C,renderSlot as w,resolveComponent as T,shallowRef as E,toDisplayString as D,toRef as O,toValue as k,unref as A,useModel as j,watch as M,withCtx as N}from"vue";import{NBadge as P,NButton as F,NCheckbox as I,NCheckboxGroup as L,NPopover as R,NRadio as z,NRadioGroup as B}from"naive-ui";const V=[.5,.75,1,1.25,1.5,2,3],H=1,U=.75,W=3e4,G=5e3,ee={"360p":`流畅 360P`,"480p":`标清 480P`,"720p":`高清 720P`,"1080p":`超清 1080P`,"1440p":`2K 1440P`,"4K":`4K 超高清`},te={".mp4":`mp4`,".m3u8":`hls`,".mpd":`dash`,".flv":`flv`},ne={SPACE:`播放/暂停`,ARROW_LEFT:`快退 5 秒`,ARROW_RIGHT:`快进 5 秒`,ARROW_UP:`音量增加 10%`,ARROW_DOWN:`音量减少 10%`,F:`全屏/退出全屏`,M:`静音/取消静音`,ESC:`退出全屏`},re=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 ie(e){try{let{pathname:t}=new URL(e,location.href);return te[t.slice(t.lastIndexOf(`.`)).toLowerCase()]??`mp4`}catch{return`mp4`}}function ae(e){let t=S(null),n=E(null),r=S(`idle`),i=S(0),a=S(0),o=S(!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??U,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??ie(e.url),n={...l(),...u(),...d()};return f(n),n.__sourceType=t,n}async function m(t){if(t===`dash`||t===`flv`){let n=e.sourceAdapters?.[t];if(!n)throw Error(`视频协议 ${t.toUpperCase()} 未配置 sourceAdapters 适配器`);return await n()}else if(t===`hls`){let{default:e}=await import(`xgplayer-hls`);return e}else{let{default:e}=await import(`xgplayer`);return e}}async function h(){if(c||!t.value)return;g();let e=++s;r.value=`loading`;let l=p(),u=l.__sourceType;delete l.__sourceType;let d;try{if(d=await m(u),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,h=()=>!c&&e===s&&n.value===f;f.on(Y.READY,()=>{h()&&(r.value=`ready`)}),f.on(Y.PLAY,()=>{h()&&(r.value=`playing`)}),f.on(Y.PAUSE,()=>{h()&&(r.value=`paused`)}),f.on(Y.ENDED,()=>{h()&&(r.value=`ended`)}),f.on(Y.ERROR,()=>{h()&&(r.value=`error`)}),f.on(Y.TIME_UPDATE,()=>{h()&&(i.value=f.currentTime??0,a.value=f.duration??0)}),f.on(Y.DURATION_CHANGE,()=>{h()&&(a.value=f.duration??0)}),f.on(Y.FULLSCREEN_CHANGE,e=>{h()&&(o.value=e)})}function g(){s++;let e=n.value;e&&(n.value=null,e.destroy()),r.value=`idle`,i.value=0,a.value=0,o.value=!1}return v(()=>{c=!0}),b(()=>{c=!0,g()}),{containerRef:t,playerRef:n,playerState:r,currentTime:i,duration:a,isFullscreen:o,initPlayer:h,destroyPlayer:g}}function oe(e){let n=S(se()),r=S(ce()),i=S(!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 M(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 se(){let e=Number(n(J.VOLUME));return Number.isFinite(e)&&e>=0&&e<=1?e:.75}function ce(){let e=Number(n(J.PLAYBACK_RATE));return Number.isFinite(e)&&e>0?e:1}function Z(e,r,i,a,o,s){let c=S(0),l=S(0),u=0,d=!1,f=!1,p=null,m=null,h=a.value;function g(){return J.PROGRESS+encodeURIComponent(h)}function _(){let e=n(g());return!e||typeof e!=`object`?0:(c.value=Q(e.watchedDuration),l.value=Math.min(100,Q(e.completionPercent)),Q(e.currentTime))}function y(){return{currentTime:r.value,duration:i.value,watchedDuration:c.value,completionPercent:l.value,updatedAt:Date.now()}}function b(){h&&t(g(),y())}function x(e,t){if(e)try{Promise.resolve(e(t)).catch(()=>void 0)}catch{}}function C(){x(o,y()),b()}function w(){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 T(){let e=s?.heartbeatInterval??W;!Number.isFinite(e)||e<=0||(p=setInterval(()=>{d&&x(s?.onHeartbeat,y())},e))}function E(){m=setInterval(()=>{d&&C()},G)}function D(){let e=y();b(),x(o,e)}function O(){if(document.hidden)w(),C(),d=!1;else{let t=e.value;t&&!t.paused&&(d=!0,u=performance.now())}}function k(){j(),f=!0,T(),E(),window.addEventListener(`beforeunload`,D),document.addEventListener(`visibilitychange`,O)}function A(){let e=f;w(),d=!1,f=!1,j(),e&&b()}function j(){p&&=(clearInterval(p),null),m&&=(clearInterval(m),null),window.removeEventListener(`beforeunload`,D),document.removeEventListener(`visibilitychange`,O)}function N(){f||k(),d=!0,u=performance.now()}function P(){w(),d=!1,u=0,b()}function F(){w()}return M(a,e=>{A(),h=e,c.value=0,l.value=0,u=0,r.value=0,i.value=0},{flush:`sync`}),M(e,e=>{e?k():j()}),v(()=>{A()}),{watchedDuration:c,completionPercent:l,getProgressData:y,restoreProgress:_,saveProgress:b,startTracking:k,stopTracking:A,onPlay:N,onPause:P,onTimeUpdate:F}}function Q(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function le(e,t){let n=S(null),r=S(!1),i=()=>k(t)??[],a=e=>({url:e.url,definition:e.label,text:{zh:e.label,en:e.label},bitrate:e.bitrate});function o(){let i=k(t);if(i===void 0)return;let o=i,s=e.value;s&&(s.definitionList=o.map(a)),o.some(e=>e.label===n.value)||(n.value=null,r.value=!1)}M([e,()=>k(t)],o,{deep:!0});function s(a){a.on(Y.AFTER_DEFINITION_CHANGE,o=>{if(e.value!==a)return;let s=typeof o.to==`string`?o.to:o.to.definition;k(t)!==void 0&&!i().some(e=>e.label===s)||(n.value=s,r.value=!1)}),a.on(Y.BEFORE_DEFINITION_CHANGE,()=>{e.value===a&&(r.value=!0)})}function c(t){let n=e.value,o=i().find(e=>e.label===t);!n||!o||(r.value=!0,n.changeDefinition(a(o)))}return{currentQuality:n,isSwitching:r,switchQuality:c,bindEvents:s}}function ue(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 de(e,r,i,a=[]){let o=S([]);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 M([e,()=>k(a)],()=>{let e=k(a)??[];o.value=e.map(e=>({...e})),e.length||c()},{immediate:!0,deep:!0,flush:`sync`}),{bookmarks:o,addBookmark:d,removeBookmark:f,updateBookmark:p,goToBookmark:m,clearBookmarks:h}}function fe(e,t,n){let r=a(()=>k(n)),i=S(0),o=S(!0),s=S(!1),c=a(()=>r.value?.watermark??!1),l=S(r.value?.watermarkText??``);function u(e){e>i.value&&(i.value=e)}function d(e){!r.value?.preventSeekOnFirstWatch||!o.value||(e.currentTime??0)>i.value+2&&(e.currentTime=i.value)}function f(){if(!r.value?.focusDetection)return;let t=e.value;t&&(document.hidden?(s.value=!0,t.paused||t.pause()):s.value=!1)}function p(n){n.on(Y.SEEKING,()=>{e.value===n&&d(n)}),n.on(Y.TIME_UPDATE,()=>{e.value===n&&u(t.value)}),document.addEventListener(`visibilitychange`,f)}function m(){o.value=!1}function h(e){l.value=e}return M(()=>r.value?.watermarkText,e=>{l.value=e??``}),v(()=>{document.removeEventListener(`visibilitychange`,f)}),{maxWatchedTime:i,isFirstWatch:o,isBlurred:s,showWatermark:c,watermarkText:l,bindEvents:p,markAsWatched:m,setWatermarkText:h}}function pe(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 me(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 he(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 ge(e){let t=[],n=e.replace(/\r\n?/g,`
|
|
2
2
|
`).trim().split(/\n\s*\n/);for(let e of n){let n=e.trim().split(`
|
|
3
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=he(i),s=he(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 $(e,t=[],n=S(0)){let r=S(null),i=S((k(t)??[]).map(e=>({...e}))),o=E({}),s=S(!1),c=new Map,l=0,u=!1,d=a(()=>{if(!r.value)return``;let e=o.value[r.value];return e?me(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||c.get(e)?.controller!==r)return[];let a=ge(i);return o.value={...o.value,[e]:{cues:a,timeline:pe(a)}},a}).catch(e=>(!u&&!r.signal.aborted&&console.warn(`[C_VideoPlayer] 字幕加载异常:`,e),[])).finally(()=>{c.get(e)?.controller===r&&(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 _(){r.value?g():h()}function y(){l++,c.forEach(({controller:e})=>e.abort()),c.clear(),o.value={},r.value=null,s.value=!1}return M(()=>k(t),e=>{y(),i.value=(e??[]).map(e=>({...e})),h()},{deep:!0}),v(()=>{u=!0,y()}),{activeLanguage:r,subtitleList:i,currentText:d,hasSubtitles:f,isLoading:s,initSubtitles:h,resetSubtitles:y,switchSubtitle:m,closeSubtitle:g,toggleSubtitle:_}}function _e(e,t,n){let r=S(null),i=S(new Set),a=S(``),o=S(!1),s=S(!1);function c(e){return JSON.stringify([e.id,e.triggerTime,e.type,e.title,e.options.map(e=>[e.key,e.label]),Array.isArray(e.answer)?[...e.answer].sort():e.answer,e.required===!0])}let l,u=new Set,d=new Map(n.value.map(e=>[e.id,c(e)]));function f(){r.value=null,l=void 0,a.value=``,o.value=!1,s.value=!1}function p(){if(r.value||!n.value.length)return;let e=t.value,a=n.value.find(t=>!i.value.has(t.id)&&!u.has(t.id)&&Math.abs(e-t.triggerTime)<1);a&&m(a)}function m(t){r.value=t,l=c(t),a.value=t.type===`multiple`?[]:``,o.value=!1,s.value=!1,e.value?.pause()}function h(){if(b(),!r.value)return!1;let e=r.value,t=v(e,a.value);return s.value=t,o.value=!0,(t||!e.required)&&i.value.add(e.id),t}function g(){if(b(),!r.value)return;let t=r.value;t.required&&!i.value.has(t.id)||(f(),e.value?.play())}function _(){b(),r.value&&(a.value=r.value.type===`multiple`?[]:``,o.value=!1,s.value=!1)}function v(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}M(t,()=>{u.clear(),b()||p()});let y=()=>n.value.map(e=>({quiz:e,identity:c(e)}));function b(e=y()){let t=new Map(e.map(({quiz:e,identity:t})=>[e.id,t]));if(i.value.forEach(e=>{(!t.has(e)||d.get(e)!==t.get(e))&&i.value.delete(e)}),d=t,r.value){let t=e.find(({quiz:e})=>e.id===r.value.id);if(!t||t.identity!==l)return u.add(r.value.id),f(),!0;r.value=t.quiz}return!1}return M(y,e=>{b(e)||p()}),{activeQuiz:r,completedQuizIds:i,selectedAnswer:a,showResult:o,lastAnswerCorrect:s,submitAnswer:h,closeQuiz:g,retryQuiz:_}}function ve(e,t){let n=S(!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 v(()=>{a()}),{isMiniMode:n,initObserver:i,destroyObserver:a,scrollToPlayer:o,closeMiniPlayer:s}}function ye(e,t,n={}){let{onToggleFullscreen:r}=n,i={" ":(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(),r?.()},F:e=>{e.preventDefault(),r?.()},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 a(t){if(n.enabled===!1)return;let r=e.value;if(!r)return;let a=t.target;if(a.tagName===`INPUT`||a.tagName===`TEXTAREA`||a.isContentEditable)return;let o=i[t.key];o?.(t,r)}function o(){t.value?.addEventListener(`keydown`,a)}function s(){t.value?.removeEventListener(`keydown`,a)}return v(()=>{s()}),{startListening:o,stopListening:s}}function be(e,t){let n=!0;function r(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function i(e,i){if(!n)return;let a=r(e,i);try{Promise.resolve(t(a)).catch(()=>void 0)}catch{}}let a=()=>i(`play`),o=()=>i(`pause`),s=()=>i(`ended`),c=()=>i(`seek`),l=()=>i(`error`),u=()=>i(`buffer`),d=e=>{i(`fullscreen`,{isFullscreen:e})},f=e=>{i(`quality_change`,e)},p=()=>{i(`speed_change`,{rate:e.playbackRate})};e.on(Y.PLAY,a),e.on(Y.PAUSE,o),e.on(Y.ENDED,s),e.on(Y.SEEKED,c),e.on(Y.ERROR,l),e.on(Y.WAITING,u),e.on(Y.FULLSCREEN_CHANGE,d),e.on(Y.DEFINITION_CHANGE,f),e.on(Y.RATE_CHANGE,p);function m(){n=!1,e.off(Y.PLAY,a),e.off(Y.PAUSE,o),e.off(Y.ENDED,s),e.off(Y.SEEKED,c),e.off(Y.ERROR,l),e.off(Y.WAITING,u),e.off(Y.FULLSCREEN_CHANGE,d),e.off(Y.DEFINITION_CHANGE,f),e.off(Y.RATE_CHANGE,p)}return{report:i,destroy:m}}const xe={key:0,class:`vp-control-bar`},Se={class:`vp-control-bar__left`},Ce={class:`vp-control-bar__center`},we={class:`vp-control-bar__right`};var Te=e(f({__name:`ControlBar`,props:{visible:{type:Boolean,default:!0}},setup(e){return(t,n)=>e.visible?(x(),c(`div`,xe,[l(`div`,Se,[w(t.$slots,`left`,{},void 0,!0)]),l(`div`,Ce,[w(t.$slots,`center`,{},void 0,!0)]),l(`div`,we,[w(t.$slots,`right`,{},void 0,!0)])])):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-e8b787cf`]]);const Ee={key:0,class:`vp-subtitle-overlay`},De={class:`vp-subtitle-text`},Oe={key:0,class:`vp-subtitle-toggle`},ke={class:`vp-subtitle-menu`},Ae=[`onClick`];var je=e(f({__name:`SubtitleOverlay`,props:{text:{},tracks:{},activeLanguage:{}},emits:[`switch`,`close`],setup(e){return(t,n)=>{let a=F,o=R;return x(),c(r,null,[s(` 字幕文本 `),d(i,{name:`vp-subtitle-fade`},{default:N(()=>[e.text?(x(),c(`div`,Ee,[l(`span`,De,D(e.text),1)])):s(`v-if`,!0)]),_:1}),s(` 字幕切换按钮(叠加在播放器控制栏上方) `),e.tracks.length?(x(),c(`div`,Oe,[d(o,{trigger:`click`,placement:`top`,"show-arrow":!1},{trigger:N(()=>[d(a,{quaternary:``,size:`small`,class:g([`vp-subtitle-btn`,{"is-active":!!e.activeLanguage}])},{default:N(()=>[...n[1]||=[u(` 字幕 `,-1)]]),_:1},8,[`class`])]),default:N(()=>[l(`div`,ke,[l(`div`,{class:g([`vp-subtitle-menu__item`,{"is-active":!e.activeLanguage}]),onClick:n[0]||=e=>t.$emit(`close`)},` 关闭字幕 `,2),(x(!0),c(r,null,C(e.tracks,n=>(x(),c(`div`,{key:n.language,class:g([`vp-subtitle-menu__item`,{"is-active":e.activeLanguage===n.language}]),onClick:e=>t.$emit(`switch`,n.language)},D(n.label),11,Ae))),128))])]),_:1})])):s(`v-if`,!0)],64)}}}),[[`__scopeId`,`data-v-20ac6438`]]);const Me={key:0,class:`vp-chapter-markers`},Ne={key:0,class:`vp-chapter-current`},Pe={class:`vp-chapter-index`},Fe={class:`vp-chapter-title`},Ie={class:`vp-chapter-list`},Le=[`onClick`],Re={class:`vp-chapter-item-index`},ze={class:`vp-chapter-item-title`},Be={class:`vp-chapter-item-time`};var Ve=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=F,o=R;return e.chapters.length?(x(),c(`div`,Me,[s(` 当前章节信息 `),e.currentChapter?(x(),c(`div`,Ne,[l(`span`,Pe,D(e.currentIndex+1)+`/`+D(e.chapters.length),1),l(`span`,Fe,D(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:N(()=>[d(a,{quaternary:``,size:`small`,class:`vp-chapter-trigger`},{icon:N(()=>[...i[0]||=[l(`span`,{class:`vp-chapter-icon`},`☰`,-1)]]),default:N(()=>[i[1]||=u(` 章节 `,-1)]),_:1})]),default:N(()=>[l(`div`,Ie,[(x(!0),c(r,null,C(e.chapters,(r,i)=>(x(),c(`div`,{key:r.id,class:g([`vp-chapter-item`,{"is-active":r.id===e.currentChapter?.id}]),onClick:e=>n.$emit(`goTo`,r.id)},[l(`span`,Re,D(i+1),1),l(`span`,ze,D(r.title),1),l(`span`,Be,D(t(r.startTime)),1)],10,Le))),128))])]),_:1})])):s(`v-if`,!0)}}}),[[`__scopeId`,`data-v-8828163e`]]);const He={class:`vp-bookmark-panel`},Ue={class:`vp-bookmark-list`},We=[`aria-label`,`onClick`],Ge={class:`vp-bookmark-note`};var Ke=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=F,p=P,m=R;return x(),c(`div`,He,[s(` 添加书签按钮 `),d(f,{quaternary:``,size:`small`,class:`vp-bookmark-add-btn`,onClick:i},{icon:N(()=>[...n[0]||=[l(`span`,null,`🔖`,-1)]]),default:N(()=>[n[1]||=u(` 书签 `,-1)]),_:1}),s(` 书签列表弹窗 `),e.bookmarks.length?(x(),o(m,{key:0,trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:N(()=>[d(p,{value:e.bookmarks.length,max:99,type:`info`},{default:N(()=>[d(f,{quaternary:``,size:`small`,class:`vp-bookmark-list-btn`},{default:N(()=>[...n[2]||=[u(` 列表 `,-1)]]),_:1})]),_:1},8,[`value`])]),default:N(()=>[l(`div`,Ue,[(x(!0),c(r,null,C(e.bookmarks,e=>(x(),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)},D(a(e.time)),9,We),l(`span`,Ge,D(e.note||`无备注`),1),d(f,{quaternary:``,size:`tiny`,type:`error`,onClick:n=>t.$emit(`remove`,e.id)},{default:N(()=>[...n[3]||=[u(` ✕ `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})):s(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-29942590`]]);const qe={key:0,class:`vp-quiz-overlay`},Je={class:`vp-quiz-card`},Ye={class:`vp-quiz-header`},Xe={class:`vp-quiz-type-tag`},Ze={class:`vp-quiz-title`},Qe={class:`vp-quiz-options`},$e={class:`vp-quiz-actions`};var et=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=S(``),f=S([]),p=j(e,`answer`),m=a(()=>({single:`单选题`,multiple:`多选题`,judge:`判断题`})[t.quiz?.type??`single`]??`单选题`),h=a(()=>t.quiz?.type===`multiple`?f.value.length>0:n.value!==``);return M(n,e=>{t.quiz?.type!==`multiple`&&(p.value=e)}),M(f,e=>{t.quiz?.type===`multiple`&&(p.value=[...e])}),M(()=>t.quiz?.id,()=>{n.value=``,f.value=[]}),(t,a)=>{let p=I,_=L,v=z,y=B,b=F;return x(),o(i,{name:`vp-quiz-fade`},{default:N(()=>[e.quiz?(x(),c(`div`,qe,[l(`div`,Je,[s(` 标题 `),l(`div`,Ye,[l(`span`,Xe,D(m.value),1),l(`h3`,Ze,D(e.quiz.title),1)]),s(` 选项 `),l(`div`,Qe,[e.quiz.type===`multiple`?(x(),o(_,{key:0,value:f.value,"onUpdate:value":a[0]||=e=>f.value=e,disabled:e.showResult},{default:N(()=>[(x(!0),c(r,null,C(e.quiz.options,e=>(x(),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`])):(x(),o(y,{key:1,value:n.value,"onUpdate:value":a[1]||=e=>n.value=e,disabled:e.showResult},{default:N(()=>[(x(!0),c(r,null,C(e.quiz.options,e=>(x(),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?(x(),c(`div`,{key:0,class:g([`vp-quiz-result`,e.isCorrect?`is-correct`:`is-wrong`])},D(e.isCorrect?`✓ 回答正确!`:`✗ 回答错误,请重试`),3)):s(`v-if`,!0),s(` 操作按钮 `),l(`div`,$e,[e.showResult?(x(),c(r,{key:1},[!e.isCorrect&&e.quiz.required?(x(),o(b,{key:0,type:`warning`,onClick:a[3]||=e=>t.$emit(`retry`)},{default:N(()=>[...a[6]||=[u(` 重新作答 `,-1)]]),_:1})):s(`v-if`,!0),e.isCorrect||!e.quiz.required?(x(),o(b,{key:1,type:`primary`,onClick:a[4]||=e=>t.$emit(`close`)},{default:N(()=>[...a[7]||=[u(` 继续学习 `,-1)]]),_:1})):s(`v-if`,!0)],64)):(x(),o(b,{key:0,type:`primary`,disabled:!h.value,onClick:a[2]||=e=>t.$emit(`submit`)},{default:N(()=>[...a[5]||=[u(` 提交答案 `,-1)]]),_:1},8,[`disabled`]))])])])):s(`v-if`,!0)]),_:1})}}}),[[`__scopeId`,`data-v-1132a37b`]]),tt=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?(x(),c(`div`,{key:0,class:`vp-watermark`,style:_(i.value)},[(x(!0),c(r,null,C(n.value,t=>(x(),c(`span`,{key:t,class:`vp-watermark-item`,style:_(o.value)},D(e.text),5))),128))],4)):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-9a051cb4`]]),nt=e(f({name:`VideoPlayerRuntime`,__name:`VideoPlayerRuntime`,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=ae(r),{containerRef:f,playerRef:p,playerState:m,currentTime:_,duration:b,isFullscreen:C}=u,w=S(null),T=oe(p),E=O(r,`url`),D=Z(p,_,b,E,e=>r.onProgress?.(e),{get heartbeatInterval(){return r.antiCheat?.heartbeatInterval},get onHeartbeat(){return r.antiCheat?.onHeartbeat}}),k=le(p,()=>r.qualityList),j=a(()=>r.chapters??[]),P=ue(j,_,b,T.seek),F=de(E,_,T.seek,()=>r.bookmarks),I=fe(p,_,()=>r.antiCheat),L=$(p,()=>r.subtitles,_),R=_e(p,_,a(()=>r.quizzes??[])),z=ve(w,a(()=>r.miniPlayer??!1)),B=ye(p,w,{get enabled(){return r.keyboard!==!1},onToggleFullscreen:()=>{p.value?.getFullscreen?.()}}),V=null,H=!1;M([p,()=>r.onAnalytics],([e,t])=>{V?.(),V=null,!(H||!e||!t)&&(V=be(e,e=>r.onAnalytics?.(e)).destroy)},{flush:`post`});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 M(m,e=>{i(`stateChange`,e)}),M(C,e=>{i(`fullscreenChange`,e)}),M(()=>P.currentChapter.value,e=>{e&&i(`chapterChange`,e)}),y(async()=>{if(u.containerRef.value=f.value,await h(),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;k.bindEvents(e),I.bindEvents(e),L.initSubtitles(),B.startListening(),z.initObserver();let t=D.restoreProgress();t>0&&r.startTime===void 0&&(e.currentTime=t,_.value=t);let n=()=>!H&&p.value===e;e.on(Y.PLAY,()=>{n()&&D.onPlay()}),e.on(Y.PAUSE,()=>{n()&&D.onPause()}),e.on(Y.TIME_UPDATE,()=>{n()&&(D.onTimeUpdate(),i(`timeUpdate`,_.value,b.value),i(`progressUpdate`,D.getProgressData()))}),e.on(Y.ENDED,()=>{n()&&(i(`ended`),I.markAsWatched())}),e.on(Y.ERROR,()=>{n()&&i(`error`,Error(`播放器错误`))}),e.on(Y.READY,()=>{n()&&i(`ready`)}),e.on(Y.AFTER_DEFINITION_CHANGE,e=>{n()&&i(`qualityChange`,typeof e.to==`string`?e.to:e.to.definition)}),e.on(Y.RATE_CHANGE,()=>{n()&&i(`rateChange`,e.playbackRate)})}),v(()=>{H=!0,V?.(),B.stopListening(),z.destroyObserver()}),t({play:T.play,pause:T.pause,seek:T.seek,setPlaybackRate:T.setPlaybackRate,setVolume:T.setVolume,switchQuality:k.switchQuality,getProgressData:D.getProgressData,destroy:()=>{D.stopTracking(),L.resetSubtitles(),V?.(),V=null,B.stopListening(),z.destroyObserver(),u.destroyPlayer()},getPlayerInstance:()=>p.value}),(e,t)=>(x(),c(`div`,{ref_key:`wrapperRef`,ref:w,class:g([`c-video-player`,{"is-mini":A(z).isMiniMode.value,"is-fullscreen":A(C)}]),tabindex:`0`},[s(` 播放器容器 `),l(`div`,{ref_key:`containerRef`,ref:f,class:`c-video-player__container`},null,512),s(` 动态水印 `),d(tt,{visible:A(I).showWatermark.value,text:A(I).watermarkText.value},null,8,[`visible`,`text`]),s(` 字幕渲染层 `),d(je,{text:A(L).currentText.value,tracks:A(L).subtitleList.value,"active-language":A(L).activeLanguage.value,onSwitch:A(L).switchSubtitle,onClose:A(L).closeSubtitle},null,8,[`text`,`tracks`,`active-language`,`onSwitch`,`onClose`]),s(` 测验弹窗 `),r.quizzes?.length?(x(),o(et,{key:0,answer:A(R).selectedAnswer.value,"onUpdate:answer":t[0]||=e=>A(R).selectedAnswer.value=e,quiz:A(R).activeQuiz.value,"show-result":A(R).showResult.value,"is-correct":A(R).lastAnswerCorrect.value,onSubmit:W,onRetry:t[1]||=e=>A(R).retryQuiz(),onClose:G},null,8,[`answer`,`quiz`,`show-result`,`is-correct`])):s(`v-if`,!0),s(` 扩展控制栏(xgplayer 自带控制栏外的扩展) `),d(Te,{visible:!0},{left:N(()=>[s(` 章节标记 `),r.chapters?.length?(x(),o(Ve,{key:0,chapters:j.value,"current-chapter":A(P).currentChapter.value,"current-index":A(P).currentChapterIndex.value,onGoTo:A(P).goToChapter},null,8,[`chapters`,`current-chapter`,`current-index`,`onGoTo`])):s(`v-if`,!0)]),right:N(()=>[s(` 书签面板 `),d(Ke,{bookmarks:A(F).bookmarks.value,onAdd:U,onRemove:A(F).removeBookmark,onGoTo:A(F).goToBookmark},null,8,[`bookmarks`,`onRemove`,`onGoTo`])]),_:1}),s(` 小窗关闭按钮 `),A(z).isMiniMode.value?(x(),c(`button`,{key:1,type:`button`,class:`c-video-player__mini-close`,"aria-label":`关闭小窗播放`,onClick:t[2]||=e=>A(z).closeMiniPlayer()},` ✕ `)):s(`v-if`,!0),s(` 小窗点击回原位 `),A(z).isMiniMode.value?(x(),c(`button`,{key:2,type:`button`,class:`c-video-player__mini-back`,onClick:t[3]||=e=>A(z).scrollToPlayer()},` 回到原位 `)):s(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-11b6a582`]]);const rt=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,c=S(),l=S(!0),u=a(()=>JSON.stringify([r.url,r.sourceType]));return M(u,()=>{l.value=!0},{flush:`sync`}),t({play:()=>c.value?.play(),pause:()=>c.value?.pause(),seek:e=>c.value?.seek(e),setPlaybackRate:e=>c.value?.setPlaybackRate(e),setVolume:e=>c.value?.setVolume(e),switchQuality:e=>c.value?.switchQuality(e),getProgressData:()=>c.value?.getProgressData()??{currentTime:0,duration:0,watchedDuration:0,completionPercent:0,updatedAt:Date.now()},destroy:()=>{c.value?.destroy(),l.value=!1},getPlayerInstance:()=>c.value?.getPlayerInstance()??null}),(e,t)=>r.url&&l.value?(x(),o(nt,m({key:u.value,ref_key:`runtime`,ref:c},r,{onReady:t[0]||=e=>i(`ready`),onStateChange:t[1]||=e=>i(`stateChange`,e),onTimeUpdate:t[2]||=(e,t)=>i(`timeUpdate`,e,t),onEnded:t[3]||=e=>i(`ended`),onError:t[4]||=e=>i(`error`,e),onQualityChange:t[5]||=e=>i(`qualityChange`,e),onRateChange:t[6]||=e=>i(`rateChange`,e),onFullscreenChange:t[7]||=e=>i(`fullscreenChange`,e),onBookmarkChange:t[8]||=e=>i(`bookmarkChange`,e),onQuizAnswer:t[9]||=(e,t,n)=>i(`quizAnswer`,e,t,n),onChapterChange:t[10]||=e=>i(`chapterChange`,e),onProgressUpdate:t[11]||=e=>i(`progressUpdate`,e)}),null,16)):s(`v-if`,!0)}});export{J as _,Z as a,X as b,W as c,U as d,ne as f,te as g,re as h,ue as i,H as l,ee as m,$ as n,oe as o,G as p,de as r,ae as s,rt as t,V as u,q as v,Y as x,K as y};
|
|
4
|
+
`).replace(/<[^>]+>/g,``).trim();c&&t.push({start:o,end:s,text:c})}return t}function $(e,t=[],n=S(0)){let r=S(null),i=S((k(t)??[]).map(e=>({...e}))),o=E({}),s=S(!1),c=new Map,l=0,u=!1,d=a(()=>{if(!r.value)return``;let e=o.value[r.value];return e?me(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||c.get(e)?.controller!==r)return[];let a=ge(i);return o.value={...o.value,[e]:{cues:a,timeline:pe(a)}},a}).catch(e=>(!u&&!r.signal.aborted&&console.warn(`[C_VideoPlayer] 字幕加载异常:`,e),[])).finally(()=>{c.get(e)?.controller===r&&(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 _(){r.value?g():h()}function y(){l++,c.forEach(({controller:e})=>e.abort()),c.clear(),o.value={},r.value=null,s.value=!1}return M(()=>k(t),e=>{y(),i.value=(e??[]).map(e=>({...e})),h()},{deep:!0}),v(()=>{u=!0,y()}),{activeLanguage:r,subtitleList:i,currentText:d,hasSubtitles:f,isLoading:s,initSubtitles:h,resetSubtitles:y,switchSubtitle:m,closeSubtitle:g,toggleSubtitle:_}}function _e(e,t,n){let r=S(null),i=S(new Set),a=S(``),o=S(!1),s=S(!1);function c(e){return JSON.stringify([e.id,e.triggerTime,e.type,e.title,e.options.map(e=>[e.key,e.label]),Array.isArray(e.answer)?[...e.answer].sort():e.answer,e.required===!0])}let l,u=new Set,d=new Map(n.value.map(e=>[e.id,c(e)]));function f(){r.value=null,l=void 0,a.value=``,o.value=!1,s.value=!1}function p(){if(r.value||!n.value.length)return;let e=t.value,a=n.value.find(t=>!i.value.has(t.id)&&!u.has(t.id)&&Math.abs(e-t.triggerTime)<1);a&&m(a)}function m(t){r.value=t,l=c(t),a.value=t.type===`multiple`?[]:``,o.value=!1,s.value=!1,e.value?.pause()}function h(){if(b(),!r.value)return!1;let e=r.value,t=v(e,a.value);return s.value=t,o.value=!0,(t||!e.required)&&i.value.add(e.id),t}function g(){if(b(),!r.value)return;let t=r.value;t.required&&!i.value.has(t.id)||(f(),e.value?.play())}function _(){b(),r.value&&(a.value=r.value.type===`multiple`?[]:``,o.value=!1,s.value=!1)}function v(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}M(t,()=>{u.clear(),b()||p()});let y=()=>n.value.map(e=>({quiz:e,identity:c(e)}));function b(e=y()){let t=new Map(e.map(({quiz:e,identity:t})=>[e.id,t]));if(i.value.forEach(e=>{(!t.has(e)||d.get(e)!==t.get(e))&&i.value.delete(e)}),d=t,r.value){let t=e.find(({quiz:e})=>e.id===r.value.id);if(!t||t.identity!==l)return u.add(r.value.id),f(),!0;r.value=t.quiz}return!1}return M(y,e=>{b(e)||p()}),{activeQuiz:r,completedQuizIds:i,selectedAnswer:a,showResult:o,lastAnswerCorrect:s,submitAnswer:h,closeQuiz:g,retryQuiz:_}}function ve(e,t){let n=S(!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 v(()=>{a()}),{isMiniMode:n,initObserver:i,destroyObserver:a,scrollToPlayer:o,closeMiniPlayer:s}}function ye(e,t,n={}){let{onToggleFullscreen:r}=n,i={" ":(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(),r?.()},F:e=>{e.preventDefault(),r?.()},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 a(t){if(n.enabled===!1)return;let r=e.value;if(!r)return;let a=t.target;if(a.tagName===`INPUT`||a.tagName===`TEXTAREA`||a.isContentEditable)return;let o=i[t.key];o?.(t,r)}function o(){t.value?.addEventListener(`keydown`,a)}function s(){t.value?.removeEventListener(`keydown`,a)}return v(()=>{s()}),{startListening:o,stopListening:s}}function be(e,t){let n=!0;function r(t,n){return{type:t,currentTime:e.currentTime??0,timestamp:Date.now(),payload:n}}function i(e,i){if(!n)return;let a=r(e,i);try{Promise.resolve(t(a)).catch(()=>void 0)}catch{}}let a=()=>i(`play`),o=()=>i(`pause`),s=()=>i(`ended`),c=()=>i(`seek`),l=()=>i(`error`),u=()=>i(`buffer`),d=e=>{i(`fullscreen`,{isFullscreen:e})},f=e=>{i(`quality_change`,e)},p=()=>{i(`speed_change`,{rate:e.playbackRate})};e.on(Y.PLAY,a),e.on(Y.PAUSE,o),e.on(Y.ENDED,s),e.on(Y.SEEKED,c),e.on(Y.ERROR,l),e.on(Y.WAITING,u),e.on(Y.FULLSCREEN_CHANGE,d),e.on(Y.DEFINITION_CHANGE,f),e.on(Y.RATE_CHANGE,p);function m(){n=!1,e.off(Y.PLAY,a),e.off(Y.PAUSE,o),e.off(Y.ENDED,s),e.off(Y.SEEKED,c),e.off(Y.ERROR,l),e.off(Y.WAITING,u),e.off(Y.FULLSCREEN_CHANGE,d),e.off(Y.DEFINITION_CHANGE,f),e.off(Y.RATE_CHANGE,p)}return{report:i,destroy:m}}const xe={key:0,class:`vp-control-bar`},Se={class:`vp-control-bar__left`},Ce={class:`vp-control-bar__center`},we={class:`vp-control-bar__right`};var Te=e(f({__name:`ControlBar`,props:{visible:{type:Boolean,default:!0}},setup(e){return(t,n)=>e.visible?(x(),c(`div`,xe,[l(`div`,Se,[w(t.$slots,`left`,{},void 0,!0)]),l(`div`,Ce,[w(t.$slots,`center`,{},void 0,!0)]),l(`div`,we,[w(t.$slots,`right`,{},void 0,!0)])])):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-e8b787cf`]]);const Ee={key:0,class:`vp-subtitle-overlay`},De={class:`vp-subtitle-text`},Oe={key:0,class:`vp-subtitle-toggle`},ke={class:`vp-subtitle-menu`},Ae=[`onClick`];var je=e(f({__name:`SubtitleOverlay`,props:{text:{},tracks:{},activeLanguage:{}},emits:[`switch`,`close`],setup(e){return(t,n)=>{let a=F,o=R;return x(),c(r,null,[s(` 字幕文本 `),d(i,{name:`vp-subtitle-fade`},{default:N(()=>[e.text?(x(),c(`div`,Ee,[l(`span`,De,D(e.text),1)])):s(`v-if`,!0)]),_:1}),s(` 字幕切换按钮(叠加在播放器控制栏上方) `),e.tracks.length?(x(),c(`div`,Oe,[d(o,{trigger:`click`,placement:`top`,"show-arrow":!1},{trigger:N(()=>[d(a,{quaternary:``,size:`small`,class:g([`vp-subtitle-btn`,{"is-active":!!e.activeLanguage}])},{default:N(()=>[...n[1]||=[u(` 字幕 `,-1)]]),_:1},8,[`class`])]),default:N(()=>[l(`div`,ke,[l(`div`,{class:g([`vp-subtitle-menu__item`,{"is-active":!e.activeLanguage}]),onClick:n[0]||=e=>t.$emit(`close`)},` 关闭字幕 `,2),(x(!0),c(r,null,C(e.tracks,n=>(x(),c(`div`,{key:n.language,class:g([`vp-subtitle-menu__item`,{"is-active":e.activeLanguage===n.language}]),onClick:e=>t.$emit(`switch`,n.language)},D(n.label),11,Ae))),128))])]),_:1})])):s(`v-if`,!0)],64)}}}),[[`__scopeId`,`data-v-20ac6438`]]);const Me={key:0,class:`vp-chapter-markers`},Ne={key:0,class:`vp-chapter-current`},Pe={class:`vp-chapter-index`},Fe={class:`vp-chapter-title`},Ie={class:`vp-chapter-list`},Le=[`onClick`],Re={class:`vp-chapter-item-index`},ze={class:`vp-chapter-item-title`},Be={class:`vp-chapter-item-time`};var Ve=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=F,o=R;return e.chapters.length?(x(),c(`div`,Me,[s(` 当前章节信息 `),e.currentChapter?(x(),c(`div`,Ne,[l(`span`,Pe,D(e.currentIndex+1)+`/`+D(e.chapters.length),1),l(`span`,Fe,D(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:N(()=>[d(a,{quaternary:``,size:`small`,class:`vp-chapter-trigger`},{icon:N(()=>[...i[0]||=[l(`span`,{class:`vp-chapter-icon`},`☰`,-1)]]),default:N(()=>[i[1]||=u(` 章节 `,-1)]),_:1})]),default:N(()=>[l(`div`,Ie,[(x(!0),c(r,null,C(e.chapters,(r,i)=>(x(),c(`div`,{key:r.id,class:g([`vp-chapter-item`,{"is-active":r.id===e.currentChapter?.id}]),onClick:e=>n.$emit(`goTo`,r.id)},[l(`span`,Re,D(i+1),1),l(`span`,ze,D(r.title),1),l(`span`,Be,D(t(r.startTime)),1)],10,Le))),128))])]),_:1})])):s(`v-if`,!0)}}}),[[`__scopeId`,`data-v-8828163e`]]);const He={class:`vp-bookmark-panel`},Ue={class:`vp-bookmark-list`},We=[`aria-label`,`onClick`],Ge={class:`vp-bookmark-note`};var Ke=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=F,p=P,m=R;return x(),c(`div`,He,[s(` 添加书签按钮 `),d(f,{quaternary:``,size:`small`,class:`vp-bookmark-add-btn`,onClick:i},{icon:N(()=>[...n[0]||=[l(`span`,null,`🔖`,-1)]]),default:N(()=>[n[1]||=u(` 书签 `,-1)]),_:1}),s(` 书签列表弹窗 `),e.bookmarks.length?(x(),o(m,{key:0,trigger:`click`,placement:`top-start`,"show-arrow":!1,style:{"max-height":`300px`,"overflow-y":`auto`}},{trigger:N(()=>[d(p,{value:e.bookmarks.length,max:99,type:`info`},{default:N(()=>[d(f,{quaternary:``,size:`small`,class:`vp-bookmark-list-btn`},{default:N(()=>[...n[2]||=[u(` 列表 `,-1)]]),_:1})]),_:1},8,[`value`])]),default:N(()=>[l(`div`,Ue,[(x(!0),c(r,null,C(e.bookmarks,e=>(x(),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)},D(a(e.time)),9,We),l(`span`,Ge,D(e.note||`无备注`),1),d(f,{quaternary:``,size:`tiny`,type:`error`,onClick:n=>t.$emit(`remove`,e.id)},{default:N(()=>[...n[3]||=[u(` ✕ `,-1)]]),_:1},8,[`onClick`])]))),128))])]),_:1})):s(`v-if`,!0)])}}}),[[`__scopeId`,`data-v-29942590`]]);const qe={key:0,class:`vp-quiz-overlay`},Je={class:`vp-quiz-card`},Ye={class:`vp-quiz-header`},Xe={class:`vp-quiz-type-tag`},Ze={class:`vp-quiz-title`},Qe={class:`vp-quiz-options`},$e={class:`vp-quiz-actions`};var et=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=S(``),f=S([]),p=j(e,`answer`),m=a(()=>({single:`单选题`,multiple:`多选题`,judge:`判断题`})[t.quiz?.type??`single`]??`单选题`),h=a(()=>t.quiz?.type===`multiple`?f.value.length>0:n.value!==``);return M(n,e=>{t.quiz?.type!==`multiple`&&(p.value=e)}),M(f,e=>{t.quiz?.type===`multiple`&&(p.value=[...e])}),M(()=>t.quiz?.id,()=>{n.value=``,f.value=[]}),(t,a)=>{let p=I,_=L,v=z,y=B,b=F;return x(),o(i,{name:`vp-quiz-fade`},{default:N(()=>[e.quiz?(x(),c(`div`,qe,[l(`div`,Je,[s(` 标题 `),l(`div`,Ye,[l(`span`,Xe,D(m.value),1),l(`h3`,Ze,D(e.quiz.title),1)]),s(` 选项 `),l(`div`,Qe,[e.quiz.type===`multiple`?(x(),o(_,{key:0,value:f.value,"onUpdate:value":a[0]||=e=>f.value=e,disabled:e.showResult},{default:N(()=>[(x(!0),c(r,null,C(e.quiz.options,e=>(x(),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`])):(x(),o(y,{key:1,value:n.value,"onUpdate:value":a[1]||=e=>n.value=e,disabled:e.showResult},{default:N(()=>[(x(!0),c(r,null,C(e.quiz.options,e=>(x(),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?(x(),c(`div`,{key:0,class:g([`vp-quiz-result`,e.isCorrect?`is-correct`:`is-wrong`])},D(e.isCorrect?`✓ 回答正确!`:`✗ 回答错误,请重试`),3)):s(`v-if`,!0),s(` 操作按钮 `),l(`div`,$e,[e.showResult?(x(),c(r,{key:1},[!e.isCorrect&&e.quiz.required?(x(),o(b,{key:0,type:`warning`,onClick:a[3]||=e=>t.$emit(`retry`)},{default:N(()=>[...a[6]||=[u(` 重新作答 `,-1)]]),_:1})):s(`v-if`,!0),e.isCorrect||!e.quiz.required?(x(),o(b,{key:1,type:`primary`,onClick:a[4]||=e=>t.$emit(`close`)},{default:N(()=>[...a[7]||=[u(` 继续学习 `,-1)]]),_:1})):s(`v-if`,!0)],64)):(x(),o(b,{key:0,type:`primary`,disabled:!h.value,onClick:a[2]||=e=>t.$emit(`submit`)},{default:N(()=>[...a[5]||=[u(` 提交答案 `,-1)]]),_:1},8,[`disabled`]))])])])):s(`v-if`,!0)]),_:1})}}}),[[`__scopeId`,`data-v-1132a37b`]]),tt=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?(x(),c(`div`,{key:0,class:`vp-watermark`,style:_(i.value)},[(x(!0),c(r,null,C(n.value,t=>(x(),c(`span`,{key:t,class:`vp-watermark-item`,style:_(o.value)},D(e.text),5))),128))],4)):s(`v-if`,!0)}}),[[`__scopeId`,`data-v-9a051cb4`]]),nt=e(f({name:`VideoPlayerRuntime`,__name:`VideoPlayerRuntime`,props:{url:{},sourceType:{},sourceAdapters:{},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=ae(r),{containerRef:f,playerRef:p,playerState:m,currentTime:_,duration:b,isFullscreen:C}=u,w=S(null),T=oe(p),E=O(r,`url`),D=Z(p,_,b,E,e=>r.onProgress?.(e),{get heartbeatInterval(){return r.antiCheat?.heartbeatInterval},get onHeartbeat(){return r.antiCheat?.onHeartbeat}}),k=le(p,()=>r.qualityList),j=a(()=>r.chapters??[]),P=ue(j,_,b,T.seek),F=de(E,_,T.seek,()=>r.bookmarks),I=fe(p,_,()=>r.antiCheat),L=$(p,()=>r.subtitles,_),R=_e(p,_,a(()=>r.quizzes??[])),z=ve(w,a(()=>r.miniPlayer??!1)),B=ye(p,w,{get enabled(){return r.keyboard!==!1},onToggleFullscreen:()=>{p.value?.getFullscreen?.()}}),V=null,H=!1;M([p,()=>r.onAnalytics],([e,t])=>{V?.(),V=null,!(H||!e||!t)&&(V=be(e,e=>r.onAnalytics?.(e)).destroy)},{flush:`post`});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 M(m,e=>{i(`stateChange`,e)}),M(C,e=>{i(`fullscreenChange`,e)}),M(()=>P.currentChapter.value,e=>{e&&i(`chapterChange`,e)}),y(async()=>{if(u.containerRef.value=f.value,await h(),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;k.bindEvents(e),I.bindEvents(e),L.initSubtitles(),B.startListening(),z.initObserver();let t=D.restoreProgress();t>0&&r.startTime===void 0&&(e.currentTime=t,_.value=t);let n=()=>!H&&p.value===e;e.on(Y.PLAY,()=>{n()&&D.onPlay()}),e.on(Y.PAUSE,()=>{n()&&D.onPause()}),e.on(Y.TIME_UPDATE,()=>{n()&&(D.onTimeUpdate(),i(`timeUpdate`,_.value,b.value),i(`progressUpdate`,D.getProgressData()))}),e.on(Y.ENDED,()=>{n()&&(i(`ended`),I.markAsWatched())}),e.on(Y.ERROR,()=>{n()&&i(`error`,Error(`播放器错误`))}),e.on(Y.READY,()=>{n()&&i(`ready`)}),e.on(Y.AFTER_DEFINITION_CHANGE,e=>{n()&&i(`qualityChange`,typeof e.to==`string`?e.to:e.to.definition)}),e.on(Y.RATE_CHANGE,()=>{n()&&i(`rateChange`,e.playbackRate)})}),v(()=>{H=!0,V?.(),B.stopListening(),z.destroyObserver()}),t({play:T.play,pause:T.pause,seek:T.seek,setPlaybackRate:T.setPlaybackRate,setVolume:T.setVolume,switchQuality:k.switchQuality,getProgressData:D.getProgressData,destroy:()=>{D.stopTracking(),L.resetSubtitles(),V?.(),V=null,B.stopListening(),z.destroyObserver(),u.destroyPlayer()},getPlayerInstance:()=>p.value}),(e,t)=>(x(),c(`div`,{ref_key:`wrapperRef`,ref:w,class:g([`c-video-player`,{"is-mini":A(z).isMiniMode.value,"is-fullscreen":A(C)}]),tabindex:`0`},[s(` 播放器容器 `),l(`div`,{ref_key:`containerRef`,ref:f,class:`c-video-player__container`},null,512),s(` 动态水印 `),d(tt,{visible:A(I).showWatermark.value,text:A(I).watermarkText.value},null,8,[`visible`,`text`]),s(` 字幕渲染层 `),d(je,{text:A(L).currentText.value,tracks:A(L).subtitleList.value,"active-language":A(L).activeLanguage.value,onSwitch:A(L).switchSubtitle,onClose:A(L).closeSubtitle},null,8,[`text`,`tracks`,`active-language`,`onSwitch`,`onClose`]),s(` 测验弹窗 `),r.quizzes?.length?(x(),o(et,{key:0,answer:A(R).selectedAnswer.value,"onUpdate:answer":t[0]||=e=>A(R).selectedAnswer.value=e,quiz:A(R).activeQuiz.value,"show-result":A(R).showResult.value,"is-correct":A(R).lastAnswerCorrect.value,onSubmit:W,onRetry:t[1]||=e=>A(R).retryQuiz(),onClose:G},null,8,[`answer`,`quiz`,`show-result`,`is-correct`])):s(`v-if`,!0),s(` 扩展控制栏(xgplayer 自带控制栏外的扩展) `),d(Te,{visible:!0},{left:N(()=>[s(` 章节标记 `),r.chapters?.length?(x(),o(Ve,{key:0,chapters:j.value,"current-chapter":A(P).currentChapter.value,"current-index":A(P).currentChapterIndex.value,onGoTo:A(P).goToChapter},null,8,[`chapters`,`current-chapter`,`current-index`,`onGoTo`])):s(`v-if`,!0)]),right:N(()=>[s(` 书签面板 `),d(Ke,{bookmarks:A(F).bookmarks.value,onAdd:U,onRemove:A(F).removeBookmark,onGoTo:A(F).goToBookmark},null,8,[`bookmarks`,`onRemove`,`onGoTo`])]),_:1}),s(` 小窗关闭按钮 `),A(z).isMiniMode.value?(x(),c(`button`,{key:1,type:`button`,class:`c-video-player__mini-close`,"aria-label":`关闭小窗播放`,onClick:t[2]||=e=>A(z).closeMiniPlayer()},` ✕ `)):s(`v-if`,!0),s(` 小窗点击回原位 `),A(z).isMiniMode.value?(x(),c(`button`,{key:2,type:`button`,class:`c-video-player__mini-back`,onClick:t[3]||=e=>A(z).scrollToPlayer()},` 回到原位 `)):s(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-11b6a582`]]);const rt=f({name:`C_VideoPlayer`,__name:`index`,props:{url:{},sourceType:{},sourceAdapters:{},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,c=S(),l=S(!0),u=a(()=>JSON.stringify([r.url,r.sourceType]));return M(u,()=>{l.value=!0},{flush:`sync`}),t({play:()=>c.value?.play(),pause:()=>c.value?.pause(),seek:e=>c.value?.seek(e),setPlaybackRate:e=>c.value?.setPlaybackRate(e),setVolume:e=>c.value?.setVolume(e),switchQuality:e=>c.value?.switchQuality(e),getProgressData:()=>c.value?.getProgressData()??{currentTime:0,duration:0,watchedDuration:0,completionPercent:0,updatedAt:Date.now()},destroy:()=>{c.value?.destroy(),l.value=!1},getPlayerInstance:()=>c.value?.getPlayerInstance()??null}),(e,t)=>r.url&&l.value?(x(),o(nt,m({key:u.value,ref_key:`runtime`,ref:c},r,{onReady:t[0]||=e=>i(`ready`),onStateChange:t[1]||=e=>i(`stateChange`,e),onTimeUpdate:t[2]||=(e,t)=>i(`timeUpdate`,e,t),onEnded:t[3]||=e=>i(`ended`),onError:t[4]||=e=>i(`error`,e),onQualityChange:t[5]||=e=>i(`qualityChange`,e),onRateChange:t[6]||=e=>i(`rateChange`,e),onFullscreenChange:t[7]||=e=>i(`fullscreenChange`,e),onBookmarkChange:t[8]||=e=>i(`bookmarkChange`,e),onQuizAnswer:t[9]||=(e,t,n)=>i(`quizAnswer`,e,t,n),onChapterChange:t[10]||=e=>i(`chapterChange`,e),onProgressUpdate:t[11]||=e=>i(`progressUpdate`,e)}),null,16)):s(`v-if`,!0)}});export{J as _,Z as a,X as b,W as c,U as d,ne as f,te as g,re as h,ue as i,H as l,ee as m,$ as n,oe as o,G as p,de as r,ae as s,rt as t,V as u,q as v,Y as x,K as y};
|
package/dist/C_WaterFall.css
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
:root{--c-primary: var(--primary-color, #2080f0);--c-primary-hover: var(--primary-color-hover, #4098fc);--c-primary-pressed: var(--primary-color-pressed, #1060c9);--c-success: var(--success-color, #18a058);--c-warning: var(--warning-color, #f0a020);--c-error: var(--error-color, #d03050);--c-info: var(--info-color, #2080f0);--c-bg-body: var(--body-color, #ffffff);--c-bg-card: var(--card-color, #ffffff);--c-bg-surface: var(--popover-color, #ffffff);--c-text-1: var(--text-color-1, #262626);--c-text-2: var(--text-color-2, #525252);--c-text-3: var(--text-color-3, #a3a3a3);--c-text-4: var(--text-color-4, #c0c0c0);--c-border: var(--border-color, #e5e7eb);--c-radius-sm: var(--border-radius-small, 4px);--c-radius: var(--border-radius, 6px);--c-transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);--c-transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);--c-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);--c-shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1);--c-shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1)}
|
|
2
2
|
|
|
3
|
-
.c-waterfall[data-v-
|
|
3
|
+
.c-waterfall[data-v-b89d8e04] {
|
|
4
4
|
width: 100%;
|
|
5
5
|
}
|
|
6
|
-
.waterfall__body[data-v-
|
|
6
|
+
.waterfall__body[data-v-b89d8e04] {
|
|
7
7
|
overflow: hidden;
|
|
8
8
|
}
|
|
9
|
-
.waterfall__item[data-v-
|
|
9
|
+
.waterfall__item[data-v-b89d8e04] {
|
|
10
10
|
cursor: pointer;
|
|
11
11
|
}
|
|
12
|
-
.waterfall__item[data-v-
|
|
12
|
+
.waterfall__item[data-v-b89d8e04]:focus-visible {
|
|
13
13
|
outline: 2px solid var(--primary-color, #2080f0);
|
|
14
14
|
outline-offset: 2px;
|
|
15
15
|
}
|
|
16
|
-
.waterfall__card[data-v-
|
|
16
|
+
.waterfall__card[data-v-b89d8e04] {
|
|
17
17
|
overflow: hidden;
|
|
18
18
|
border-radius: 8px;
|
|
19
19
|
border: 1px solid var(--border-color);
|
|
@@ -21,36 +21,36 @@
|
|
|
21
21
|
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
|
|
22
22
|
transition: box-shadow 0.2s ease, transform 0.2s ease;
|
|
23
23
|
}
|
|
24
|
-
.waterfall__card[data-v-
|
|
24
|
+
.waterfall__card[data-v-b89d8e04]:hover {
|
|
25
25
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
|
|
26
26
|
transform: translateY(-2px);
|
|
27
27
|
}
|
|
28
|
-
.waterfall__image[data-v-
|
|
28
|
+
.waterfall__image[data-v-b89d8e04] {
|
|
29
29
|
display: block;
|
|
30
30
|
width: 100%;
|
|
31
31
|
object-fit: cover;
|
|
32
32
|
background: var(--body-color);
|
|
33
33
|
}
|
|
34
|
-
.waterfall__title[data-v-
|
|
34
|
+
.waterfall__title[data-v-b89d8e04] {
|
|
35
35
|
padding: 10px 12px;
|
|
36
36
|
font-size: 13px;
|
|
37
37
|
line-height: 1.5;
|
|
38
38
|
color: var(--text-color-1);
|
|
39
39
|
word-break: break-all;
|
|
40
40
|
}
|
|
41
|
-
.waterfall__skeleton[data-v-
|
|
41
|
+
.waterfall__skeleton[data-v-b89d8e04] {
|
|
42
42
|
overflow: hidden;
|
|
43
43
|
border-radius: 8px;
|
|
44
44
|
}
|
|
45
|
-
.waterfall__skeleton-inner[data-v-
|
|
45
|
+
.waterfall__skeleton-inner[data-v-b89d8e04] {
|
|
46
46
|
width: 100%;
|
|
47
47
|
height: 100%;
|
|
48
48
|
border-radius: 8px;
|
|
49
49
|
background: linear-gradient(90deg, var(--body-color) 25%, color-mix(in srgb, var(--body-color) 80%, var(--border-color)) 37%, var(--body-color) 63%);
|
|
50
50
|
background-size: 400% 100%;
|
|
51
|
-
animation: shimmer-
|
|
51
|
+
animation: shimmer-b89d8e04 1.4s ease infinite;
|
|
52
52
|
}
|
|
53
|
-
@keyframes shimmer-
|
|
53
|
+
@keyframes shimmer-b89d8e04 {
|
|
54
54
|
0% {
|
|
55
55
|
background-position: 100% 50%;
|
|
56
56
|
}
|
|
@@ -58,35 +58,37 @@
|
|
|
58
58
|
background-position: 0 50%;
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
.waterfall__footer[data-v-
|
|
61
|
+
.waterfall__footer[data-v-b89d8e04] {
|
|
62
62
|
padding: 24px 0;
|
|
63
63
|
text-align: center;
|
|
64
64
|
}
|
|
65
|
-
.waterfall__sentinel[data-v-
|
|
65
|
+
.waterfall__sentinel[data-v-b89d8e04] {
|
|
66
66
|
height: 1px;
|
|
67
67
|
}
|
|
68
|
-
.waterfall__status[data-v-
|
|
68
|
+
.waterfall__status[data-v-b89d8e04] {
|
|
69
69
|
display: inline-flex;
|
|
70
70
|
gap: 8px;
|
|
71
71
|
align-items: center;
|
|
72
72
|
font-size: 13px;
|
|
73
73
|
color: var(--text-color-3);
|
|
74
74
|
}
|
|
75
|
-
.waterfall__status--done[data-v-
|
|
75
|
+
.waterfall__status--done[data-v-b89d8e04] {
|
|
76
76
|
color: var(--text-color-4);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
/* layer: default */
|
|
80
|
-
|
|
81
|
-
.
|
|
82
|
-
.
|
|
83
|
-
.
|
|
84
|
-
.
|
|
85
|
-
.
|
|
86
|
-
.
|
|
87
|
-
.
|
|
88
|
-
.
|
|
89
|
-
.
|
|
90
|
-
.
|
|
91
|
-
.
|
|
92
|
-
.
|
|
80
|
+
.\!visible[data-v-b89d8e04]{visibility:visible !important;}
|
|
81
|
+
.visible[data-v-b89d8e04]{visibility:visible;}
|
|
82
|
+
.absolute[data-v-b89d8e04]{position:absolute;}
|
|
83
|
+
.relative[data-v-b89d8e04]{position:relative;}
|
|
84
|
+
.ms[data-v-b89d8e04]{margin-inline-start:1rem;}
|
|
85
|
+
.block[data-v-b89d8e04]{display:block;}
|
|
86
|
+
.hidden[data-v-b89d8e04]{display:none;}
|
|
87
|
+
.inline-flex[data-v-b89d8e04]{display:inline-flex;}
|
|
88
|
+
.transform[data-v-b89d8e04]{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
|
|
89
|
+
.break-all[data-v-b89d8e04]{word-break:break-all;}
|
|
90
|
+
.border[data-v-b89d8e04]{border-width:1px;}
|
|
91
|
+
.px[data-v-b89d8e04]{padding-left:1rem;padding-right:1rem;}
|
|
92
|
+
.outline[data-v-b89d8e04]{outline-style:solid;}
|
|
93
|
+
.transition[data-v-b89d8e04]{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms;}
|
|
94
|
+
.ease[data-v-b89d8e04]{transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);}
|
package/dist/C_WaterFall2.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{minWidth:1600,columns:6},{minWidth:1200,columns:5},{minWidth:992,columns:4},{minWidth:768,columns:3},{minWidth:480,columns:2},{minWidth:0,columns:1}],i=[180,360];function a(e,n,i){let a=(0,t.ref)(4),o=(0,t.ref)(0);function s(e){if(n?.value&&n.value>0)return n.value;let t=[...i?.value?.length?i.value:r].sort((e,t)=>t.minWidth-e.minWidth);for(let n of t)if(e>=n.minWidth)return n.columns;return 1}let c=null;function l(){let t=e.value;if(!t)return;c=new ResizeObserver(e=>{for(let t of e){let{width:e}=t.contentRect;o.value=e,a.value=s(e)}}),c.observe(t);let n=t.getBoundingClientRect();o.value=n.width,a.value=s(n.width)}function u(){c?.disconnect(),c=null}return(0,t.onMounted)(l),(0,t.onBeforeUnmount)(u),(0,t.watch)(e,()=>{u(),l()}),(0,t.watch)([()=>n?.value,()=>i?.value],()=>{o.value>0&&(a.value=s(o.value))}),{columns:(0,t.readonly)(a),containerWidth:(0,t.readonly)(o)}}function o(e,n,r,i,a={}){let o=(0,t.ref)([]),s=(0,t.ref)(0),c=new Map,l=new Map,u=(0,t.computed)(()=>new Map(e.value.map(e=>[e.id,e.src]))),d,f=!1,p=()=>{d!==void 0&&cancelAnimationFrame(d),d=void 0};(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>{f=!0,p(),l.clear(),c.clear()});let m=()=>{if(!f){if(!a.batchImageLoads||typeof requestAnimationFrame>`u`){C();return}d===void 0&&(d=requestAnimationFrame(()=>{d=void 0,C()}))}};function h(e,t,n){let r=e/t;return Number.isFinite(r)&&r>0?r*n:n}function g(e,t){let n=l.get(e.id),r=n?.src&&n.src!==e.src?void 0:n;return r&&!r.basisWidth?r.height:r?.basisWidth?h(r.height,r.basisWidth,t):h(e.height,e.width,t)}function _(){o.value=[],s.value=0,e.value.length===0&&(l.clear(),c.clear())}function v(t,n,r){return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)&&n>0&&e.value.length>0}function y(e,t,n,r){if(f||r!==void 0&&u.value.get(e)!==r||!b(t,n))return;let i=l.get(e);i?.height===t&&i.basisWidth===n&&i.src===r||(l.set(e,{height:t,basisWidth:n,src:r}),m())}function b(e,t){return Number.isFinite(e)&&e>0&&(t===void 0||Number.isFinite(t)&&t>0)}function x(e,t){f||!u.value.has(e)||!Number.isFinite(t)||Math.abs((c.get(e)??0)-t)<.5||(c.set(e,t),m())}function S(e){for(let t of[l,c])for(let n of t.keys())e.has(n)||t.delete(n)}function C(){if(p(),f)return;let t=Math.min(24,Math.max(1,Math.floor(n.value))),a=r.value,l=Math.max(0,i.value??16);if(!v(t,a,l)){_();return}let u=(a-(t-1)*l)/t;if(u<=0){_();return}let d=Array.from({length:t},(e,t)=>({index:t,height:0})),m=[],h=new Set;for(let t of e.value){h.add(t.id);let e=d.reduce((e,t)=>t.height<e.height?t:e),n=g(t,u),r=e.index*(u+l),i=e.height;m.push({item:t,columnIndex:e.index,x:r,y:i,width:u,height:n}),e.height=i+n+(c.get(t.id)??0)+l}S(h),o.value=m,s.value=Math.max(...d.map(e=>e.height))-l}return(0,t.watch)([e,()=>e.value.length,n,r,i],C,{immediate:!0}),{layoutItems:(0,t.readonly)(o),containerHeight:(0,t.readonly)(s),cacheImageHeight:y,cacheItemExtraHeight:x,relayout:C}}function s(e,n,r,i,a){let o=(0,t.ref)(`idle`),s=null,c=!1;function l(e){if(!e[0]?.isIntersecting){c=!1;return}!n.value||r.value||i.value||c||(c=!0,o.value=`loading`,a())}function u(){let t=e.value;!t||!n.value||(s=new IntersectionObserver(l,{rootMargin:`200px 0px`}),s.observe(t))}function d(){s?.disconnect(),s=null,c=!1}return(0,t.watch)([r,i],()=>{i.value?o.value=`no-more`:r.value?o.value=`loading`:(o.value=`idle`,c=!1)}),(0,t.onMounted)(u),(0,t.onBeforeUnmount)(d),(0,t.watch)([e,n],()=>{d(),u()}),{status:(0,t.readonly)(o)}}const c=[`aria-label`,`onClick`,`onKeydown`],l={class:`waterfall__card`},u=[`src`,`alt`,`loading`,`onLoad`,`onError`],d={key:0,class:`waterfall__title`},f={key:0,class:`waterfall__footer`},p={key:0,class:`waterfall__status`},m={key:1,class:`waterfall__status waterfall__status--done`},h=(0,t.defineComponent)({name:`C_WaterFall`,__name:`index`,props:{items:{},columns:{default:void 0},gap:{default:16},lazy:{type:Boolean,default:!0},infinite:{type:Boolean,default:!1},skeleton:{type:Boolean,default:!0},skeletonCount:{default:8},animationDuration:{default:300},breakpoints:{default:void 0},loading:{type:Boolean,default:!1},noMore:{type:Boolean,default:!1}},emits:[`load-more`,`item-click`,`image-loaded`,`image-error`],setup(e,{expose:r,emit:h}){let g=e,_=h,v=(0,t.ref)(),y=(0,t.ref)(),{columns:b,containerWidth:x}=a(v,(0,t.computed)(()=>g.columns),(0,t.computed)(()=>g.breakpoints)),{layoutItems:S,containerHeight:C,cacheImageHeight:w,cacheItemExtraHeight:T,relayout:E}=o((0,t.computed)(()=>g.items),b,x,(0,t.computed)(()=>g.gap),{batchImageLoads:!0}),D=new Map,O=new Map,k=(0,t.computed)(()=>new Map(S.value.map(e=>[e.item.id,e]))),A=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{for(let t of e){let e=D.get(t.target),n=e===void 0?void 0:k.value.get(e);n&&T(n.item.id,t.target.getBoundingClientRect().height-n.height)}});function j(e,t){let n=O.get(t);n!==e&&(n&&(A?.unobserve(n),D.delete(n),O.delete(t)),e instanceof HTMLElement&&(O.set(t,e),D.set(e,t),A?.observe(e)))}(0,t.onUnmounted)(()=>{A?.disconnect(),D.clear(),O.clear()});let M=(0,t.computed)(()=>g.skeleton&&g.loading&&S.value.length===0),N=(0,t.computed)(()=>{let e=Math.min(24,Math.max(1,Math.floor(b.value))),t=x.value,n=Math.max(0,g.gap);if(!Number.isFinite(e)||t<=0)return[];let r=(t-(e-1)*n)/e;if(r<=0)return[];let a=Math.min(100,Math.max(0,Math.floor(g.skeletonCount??8))),o=Array(e).fill(0),s=[];for(let e=0;e<a;e++){let t=o.indexOf(Math.min(...o)),a=i[0]+e*73%(i[1]-i[0]);s.push({x:t*(r+n),y:o[t],width:r,height:a}),o[t]+=a+n}return s}),P=(0,t.computed)(()=>N.value.length===0?0:Math.max(...N.value.map(e=>e.y+e.height))),F=(0,t.computed)(()=>M.value?P.value:C.value),{status:I}=s(y,(0,t.computed)(()=>g.infinite),(0,t.computed)(()=>g.loading),(0,t.computed)(()=>g.noMore),()=>_(`load-more`));function L(e,t){let n=t.target;if(n.getAttribute(`src`)===e.item.src){if(n.naturalHeight&&n.naturalWidth){let t=n.naturalHeight/n.naturalWidth*e.width;w(e.item.id,t,e.width,e.item.src)}_(`image-loaded`,e.item)}}function R(e){_(`image-error`,e.item)}function z(){v.value?.scrollIntoView({behavior:`smooth`,block:`start`})}return r({relayout:E,scrollToTop:z,getColumns:()=>b.value,getContainerHeight:()=>C.value}),(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`containerRef`,ref:v,class:`c-waterfall`},[(0,t.createElementVNode)(`div`,{class:`waterfall__body`,style:(0,t.normalizeStyle)({height:`${F.value}px`,position:`relative`})},[M.value?((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,{key:0},(0,t.renderList)(N.value,(n,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:`sk-${i}`,class:`waterfall__skeleton`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,height:`${n.height}px`,transition:`all ${g.animationDuration??(0,t.unref)(300)}ms ease`})},[(0,t.renderSlot)(e.$slots,`skeleton`,{},()=>[r[0]||=(0,t.createElementVNode)(`div`,{class:`waterfall__skeleton-inner`},null,-1)],!0)],4))),128)):(0,t.createCommentVNode)(`v-if`,!0),((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(S),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n.item.id,ref_for:!0,ref:e=>j(e,n.item.id),class:`waterfall__item`,role:`button`,tabindex:`0`,"aria-label":n.item.title||`瀑布流项目 ${r+1}`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,transition:`all ${g.animationDuration??(0,t.unref)(300)}ms ease`}),onClick:e=>_(`item-click`,n.item,r),onKeydown:[(0,t.withKeys)(e=>_(`item-click`,n.item,r),[`enter`]),(0,t.withKeys)((0,t.withModifiers)(e=>_(`item-click`,n.item,r),[`prevent`]),[`space`])]},[(0,t.renderSlot)(e.$slots,`item`,{item:n.item,index:r,width:n.width,height:n.height},()=>[(0,t.createElementVNode)(`div`,l,[(0,t.createElementVNode)(`img`,{src:n.item.src,alt:n.item.title||``,loading:g.lazy?`lazy`:`eager`,class:`waterfall__image`,style:(0,t.normalizeStyle)({height:`${n.height}px`}),onLoad:e=>L(n,e),onError:e=>R(n)},null,44,u),n.item.title?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,d,(0,t.toDisplayString)(n.item.title),1)):(0,t.createCommentVNode)(`v-if`,!0)])],!0)],44,c))),128))],4),g.infinite?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,f,[(0,t.createElementVNode)(`div`,{ref_key:`sentinelRef`,ref:y,class:`waterfall__sentinel`},null,512),(0,t.renderSlot)(e.$slots,`footer`,{status:(0,t.unref)(I)},()=>[g.loading?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,p,[(0,t.createVNode)((0,t.unref)(n.NSpin),{size:`small`}),r[1]||=(0,t.createElementVNode)(`span`,null,`加载中…`,-1)])):g.noMore?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,m,` 没有更多了 `)):(0,t.createCommentVNode)(`v-if`,!0)],!0)])):(0,t.createCommentVNode)(`v-if`,!0)],512))}});var g=e.t(h,[[`__scopeId`,`data-v-4df42989`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return 300}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return 8}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 200}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return 16}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return i}});
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./export-helper.cjs`);let t=require(`vue`),n=require(`naive-ui`);const r=[{minWidth:1600,columns:6},{minWidth:1200,columns:5},{minWidth:992,columns:4},{minWidth:768,columns:3},{minWidth:480,columns:2},{minWidth:0,columns:1}],i=[180,360];function a(e,n,i){let a=(0,t.ref)(4),o=(0,t.ref)(0);function s(e){if(n?.value&&n.value>0)return n.value;let t=[...i?.value?.length?i.value:r].sort((e,t)=>t.minWidth-e.minWidth);for(let n of t)if(e>=n.minWidth)return n.columns;return 1}let c=null;function l(){let t=e.value;if(!t)return;c=new ResizeObserver(e=>{for(let t of e){let{width:e}=t.contentRect;o.value=e,a.value=s(e)}}),c.observe(t);let n=t.getBoundingClientRect();o.value=n.width,a.value=s(n.width)}function u(){c?.disconnect(),c=null}return(0,t.onMounted)(l),(0,t.onBeforeUnmount)(u),(0,t.watch)(e,()=>{u(),l()}),(0,t.watch)([()=>n?.value,()=>i?.value],()=>{o.value>0&&(a.value=s(o.value))}),{columns:(0,t.readonly)(a),containerWidth:(0,t.readonly)(o)}}function o(e,n,r,i,a={}){let o=(0,t.ref)([]),s=(0,t.ref)(0),c=new Map,l=new Map,u=(0,t.computed)(()=>new Map(e.value.map(e=>[e.id,e.src]))),d,f=!1,p=()=>{d!==void 0&&cancelAnimationFrame(d),d=void 0};(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>{f=!0,p(),l.clear(),c.clear()});let m=()=>{if(!f){if(!a.batchImageLoads||typeof requestAnimationFrame>`u`){C();return}d===void 0&&(d=requestAnimationFrame(()=>{d=void 0,C()}))}};function h(e,t,n){let r=e/t;return Number.isFinite(r)&&r>0?r*n:n}function g(e,t){let n=l.get(e.id),r=n?.src&&n.src!==e.src?void 0:n;return r&&!r.basisWidth?r.height:r?.basisWidth?h(r.height,r.basisWidth,t):h(e.height,e.width,t)}function _(){o.value=[],s.value=0,e.value.length===0&&(l.clear(),c.clear())}function v(t,n,r){return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)&&n>0&&e.value.length>0}function y(e,t,n,r){if(f||r!==void 0&&u.value.get(e)!==r||!b(t,n))return;let i=l.get(e);i?.height===t&&i.basisWidth===n&&i.src===r||(l.set(e,{height:t,basisWidth:n,src:r}),m())}function b(e,t){return Number.isFinite(e)&&e>0&&(t===void 0||Number.isFinite(t)&&t>0)}function x(e,t){f||!u.value.has(e)||!Number.isFinite(t)||Math.abs((c.get(e)??0)-t)<.5||(c.set(e,t),m())}function S(e){for(let t of[l,c])for(let n of t.keys())e.has(n)||t.delete(n)}function C(){if(p(),f)return;let t=Math.min(24,Math.max(1,Math.floor(n.value))),a=r.value,l=Math.max(0,i.value??16);if(!v(t,a,l)){_();return}let u=(a-(t-1)*l)/t;if(u<=0){_();return}let d=Array.from({length:t},(e,t)=>({index:t,height:0})),m=[],h=new Set;for(let t of e.value){h.add(t.id);let e=d.reduce((e,t)=>t.height<e.height?t:e),n=g(t,u),r=e.index*(u+l),i=e.height;m.push({item:t,columnIndex:e.index,x:r,y:i,width:u,height:n}),e.height=i+n+(c.get(t.id)??0)+l}S(h),o.value=m,s.value=Math.max(...d.map(e=>e.height))-l}return(0,t.watch)([e,()=>e.value.length,n,r,i],C,{immediate:!0}),{layoutItems:(0,t.readonly)(o),containerHeight:(0,t.readonly)(s),cacheImageHeight:y,cacheItemExtraHeight:x,relayout:C}}function s(e,n,r,i,a){let o=(0,t.ref)(`idle`),s=(0,t.ref)(!1),c=null,l=!1,u=!1,d=0,f=!1,p=0;function m(){f||!u||!n.value||r.value||i.value||l||d>=5||(l=!0,d+=1,s.value=d>=5,o.value=`loading`,a())}function h(){let t=e.value;if(!t||!n.value||typeof IntersectionObserver>`u`)return;let r=++p;c=new IntersectionObserver(e=>{if(!(f||r!==p)){if(u=!!e[0]?.isIntersecting,!u){l=!1,d=0,s.value=!1;return}m()}},{rootMargin:`200px 0px`}),c.observe(t)}function g(){p+=1,c?.disconnect(),c=null,l=!1,u=!1,d=0,s.value=!1}return(0,t.watch)([r,i],([e,n],[r])=>{o.value=n?`no-more`:e?`loading`:`idle`,!e&&!n&&(l=!1,r&&(0,t.nextTick)(m))}),(0,t.onMounted)(h),(0,t.onBeforeUnmount)(()=>{f=!0,g()}),(0,t.watch)([e,n],()=>{g(),h()}),{status:(0,t.readonly)(o),paused:(0,t.readonly)(s),resume:()=>{r.value||i.value||f||(d=0,l=!1,s.value=!1,m())}}}const c=[`aria-label`,`onClick`,`onKeydown`],l={class:`waterfall__card`},u=[`src`,`alt`,`loading`,`onLoad`,`onError`],d={key:0,class:`waterfall__title`},f={key:0,class:`waterfall__footer`},p={key:0,class:`waterfall__status`},m={key:1,class:`waterfall__status waterfall__status--done`},h=(0,t.defineComponent)({name:`C_WaterFall`,__name:`index`,props:{items:{},columns:{default:void 0},gap:{default:16},lazy:{type:Boolean,default:!0},infinite:{type:Boolean,default:!1},skeleton:{type:Boolean,default:!0},skeletonCount:{default:8},animationDuration:{default:300},breakpoints:{default:void 0},loading:{type:Boolean,default:!1},noMore:{type:Boolean,default:!1}},emits:[`load-more`,`item-click`,`image-loaded`,`image-error`],setup(e,{expose:r,emit:h}){let g=e,_=h,v=(0,t.ref)(),y=(0,t.ref)(),{columns:b,containerWidth:x}=a(v,(0,t.computed)(()=>g.columns),(0,t.computed)(()=>g.breakpoints)),{layoutItems:S,containerHeight:C,cacheImageHeight:w,cacheItemExtraHeight:T,relayout:E}=o((0,t.computed)(()=>g.items),b,x,(0,t.computed)(()=>g.gap),{batchImageLoads:!0}),D=new Map,O=new Map,k=(0,t.computed)(()=>new Map(S.value.map(e=>[e.item.id,e]))),A=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{for(let t of e){let e=D.get(t.target),n=e===void 0?void 0:k.value.get(e);n&&T(n.item.id,t.target.getBoundingClientRect().height-n.height)}});function j(e,t){let n=O.get(t);n!==e&&(n&&(A?.unobserve(n),D.delete(n),O.delete(t)),e instanceof HTMLElement&&(O.set(t,e),D.set(e,t),A?.observe(e)))}(0,t.onUnmounted)(()=>{A?.disconnect(),D.clear(),O.clear()});let M=(0,t.computed)(()=>g.skeleton&&g.loading&&S.value.length===0),N=(0,t.computed)(()=>{let e=Math.min(24,Math.max(1,Math.floor(b.value))),t=x.value,n=Math.max(0,g.gap);if(!Number.isFinite(e)||t<=0)return[];let r=(t-(e-1)*n)/e;if(r<=0)return[];let a=Math.min(100,Math.max(0,Math.floor(g.skeletonCount??8))),o=Array(e).fill(0),s=[];for(let e=0;e<a;e++){let t=o.indexOf(Math.min(...o)),a=i[0]+e*73%(i[1]-i[0]);s.push({x:t*(r+n),y:o[t],width:r,height:a}),o[t]+=a+n}return s}),P=(0,t.computed)(()=>N.value.length===0?0:Math.max(...N.value.map(e=>e.y+e.height))),F=(0,t.computed)(()=>M.value?P.value:C.value),{status:I,paused:L,resume:R}=s(y,(0,t.computed)(()=>g.infinite),(0,t.computed)(()=>g.loading),(0,t.computed)(()=>g.noMore),()=>_(`load-more`));function z(e,t){let n=t.target;if(n.getAttribute(`src`)===e.item.src){if(n.naturalHeight&&n.naturalWidth){let t=n.naturalHeight/n.naturalWidth*e.width;w(e.item.id,t,e.width,e.item.src)}_(`image-loaded`,e.item)}}function B(e){_(`image-error`,e.item)}function V(){v.value?.scrollIntoView({behavior:`smooth`,block:`start`})}return r({relayout:E,scrollToTop:V,getColumns:()=>b.value,getContainerHeight:()=>C.value}),(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{ref_key:`containerRef`,ref:v,class:`c-waterfall`},[(0,t.createElementVNode)(`div`,{class:`waterfall__body`,style:(0,t.normalizeStyle)({height:`${F.value}px`,position:`relative`})},[M.value?((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,{key:0},(0,t.renderList)(N.value,(n,i)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:`sk-${i}`,class:`waterfall__skeleton`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,height:`${n.height}px`,transition:`all ${g.animationDuration??(0,t.unref)(300)}ms ease`})},[(0,t.renderSlot)(e.$slots,`skeleton`,{},()=>[r[0]||=(0,t.createElementVNode)(`div`,{class:`waterfall__skeleton-inner`},null,-1)],!0)],4))),128)):(0,t.createCommentVNode)(`v-if`,!0),((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(S),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n.item.id,ref_for:!0,ref:e=>j(e,n.item.id),class:`waterfall__item`,role:`button`,tabindex:`0`,"aria-label":n.item.title||`瀑布流项目 ${r+1}`,style:(0,t.normalizeStyle)({position:`absolute`,left:`${n.x}px`,top:`${n.y}px`,width:`${n.width}px`,transition:`all ${g.animationDuration??(0,t.unref)(300)}ms ease`}),onClick:e=>_(`item-click`,n.item,r),onKeydown:[(0,t.withKeys)(e=>_(`item-click`,n.item,r),[`enter`]),(0,t.withKeys)((0,t.withModifiers)(e=>_(`item-click`,n.item,r),[`prevent`]),[`space`])]},[(0,t.renderSlot)(e.$slots,`item`,{item:n.item,index:r,width:n.width,height:n.height},()=>[(0,t.createElementVNode)(`div`,l,[(0,t.createElementVNode)(`img`,{src:n.item.src,alt:n.item.title||``,loading:g.lazy?`lazy`:`eager`,class:`waterfall__image`,style:(0,t.normalizeStyle)({height:`${n.height}px`}),onLoad:e=>z(n,e),onError:e=>B(n)},null,44,u),n.item.title?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,d,(0,t.toDisplayString)(n.item.title),1)):(0,t.createCommentVNode)(`v-if`,!0)])],!0)],44,c))),128))],4),g.infinite?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,f,[(0,t.createElementVNode)(`div`,{ref_key:`sentinelRef`,ref:y,class:`waterfall__sentinel`},null,512),(0,t.renderSlot)(e.$slots,`footer`,{status:(0,t.unref)(I),paused:(0,t.unref)(L),loadMore:(0,t.unref)(R)},()=>[g.loading?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,p,[(0,t.createVNode)((0,t.unref)(n.NSpin),{size:`small`}),r[1]||=(0,t.createElementVNode)(`span`,null,`加载中…`,-1)])):g.noMore?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,m,` 没有更多了 `)):(0,t.unref)(L)?((0,t.openBlock)(),(0,t.createBlock)((0,t.unref)(n.NButton),{key:2,size:`small`,onClick:(0,t.unref)(R)},{default:(0,t.withCtx)(()=>[...r[2]||=[(0,t.createTextVNode)(`继续加载`,-1)]]),_:1},8,[`onClick`])):(0,t.createCommentVNode)(`v-if`,!0)],!0)])):(0,t.createCommentVNode)(`v-if`,!0)],512))}});var g=e.t(h,[[`__scopeId`,`data-v-b89d8e04`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return 300}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return 8}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 200}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return 16}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return i}});
|
package/dist/C_WaterFall2.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,
|
|
1
|
+
import{t as e}from"./export-helper.js";import{Fragment as t,computed as n,createBlock as r,createCommentVNode as i,createElementBlock as a,createElementVNode as o,createTextVNode as s,createVNode as c,defineComponent as l,getCurrentScope as u,nextTick as d,normalizeStyle as f,onBeforeUnmount as p,onMounted as m,onScopeDispose as h,onUnmounted as g,openBlock as _,readonly as v,ref as y,renderList as b,renderSlot as x,toDisplayString as S,unref as C,watch as w,withCtx as T,withKeys as E,withModifiers as D}from"vue";import{NButton as O,NSpin as k}from"naive-ui";const A=16,j=300,M=8,N=200,P=[{minWidth:1600,columns:6},{minWidth:1200,columns:5},{minWidth:992,columns:4},{minWidth:768,columns:3},{minWidth:480,columns:2},{minWidth:0,columns:1}],F=[180,360];function I(e,t,n){let r=y(4),i=y(0);function a(e){if(t?.value&&t.value>0)return t.value;let r=[...n?.value?.length?n.value:P].sort((e,t)=>t.minWidth-e.minWidth);for(let t of r)if(e>=t.minWidth)return t.columns;return 1}let o=null;function s(){let t=e.value;if(!t)return;o=new ResizeObserver(e=>{for(let t of e){let{width:e}=t.contentRect;i.value=e,r.value=a(e)}}),o.observe(t);let n=t.getBoundingClientRect();i.value=n.width,r.value=a(n.width)}function c(){o?.disconnect(),o=null}return m(s),p(c),w(e,()=>{c(),s()}),w([()=>t?.value,()=>n?.value],()=>{i.value>0&&(r.value=a(i.value))}),{columns:v(r),containerWidth:v(i)}}function L(e,t,r,i,a={}){let o=y([]),s=y(0),c=new Map,l=new Map,d=n(()=>new Map(e.value.map(e=>[e.id,e.src]))),f,p=!1,m=()=>{f!==void 0&&cancelAnimationFrame(f),f=void 0};u()&&h(()=>{p=!0,m(),l.clear(),c.clear()});let g=()=>{if(!p){if(!a.batchImageLoads||typeof requestAnimationFrame>`u`){O();return}f===void 0&&(f=requestAnimationFrame(()=>{f=void 0,O()}))}};function _(e,t,n){let r=e/t;return Number.isFinite(r)&&r>0?r*n:n}function b(e,t){let n=l.get(e.id),r=n?.src&&n.src!==e.src?void 0:n;return r&&!r.basisWidth?r.height:r?.basisWidth?_(r.height,r.basisWidth,t):_(e.height,e.width,t)}function x(){o.value=[],s.value=0,e.value.length===0&&(l.clear(),c.clear())}function S(t,n,r){return Number.isFinite(t)&&Number.isFinite(n)&&Number.isFinite(r)&&n>0&&e.value.length>0}function C(e,t,n,r){if(p||r!==void 0&&d.value.get(e)!==r||!T(t,n))return;let i=l.get(e);i?.height===t&&i.basisWidth===n&&i.src===r||(l.set(e,{height:t,basisWidth:n,src:r}),g())}function T(e,t){return Number.isFinite(e)&&e>0&&(t===void 0||Number.isFinite(t)&&t>0)}function E(e,t){p||!d.value.has(e)||!Number.isFinite(t)||Math.abs((c.get(e)??0)-t)<.5||(c.set(e,t),g())}function D(e){for(let t of[l,c])for(let n of t.keys())e.has(n)||t.delete(n)}function O(){if(m(),p)return;let n=Math.min(24,Math.max(1,Math.floor(t.value))),a=r.value,l=Math.max(0,i.value??16);if(!S(n,a,l)){x();return}let u=(a-(n-1)*l)/n;if(u<=0){x();return}let d=Array.from({length:n},(e,t)=>({index:t,height:0})),f=[],h=new Set;for(let t of e.value){h.add(t.id);let e=d.reduce((e,t)=>t.height<e.height?t:e),n=b(t,u),r=e.index*(u+l),i=e.height;f.push({item:t,columnIndex:e.index,x:r,y:i,width:u,height:n}),e.height=i+n+(c.get(t.id)??0)+l}D(h),o.value=f,s.value=Math.max(...d.map(e=>e.height))-l}return w([e,()=>e.value.length,t,r,i],O,{immediate:!0}),{layoutItems:v(o),containerHeight:v(s),cacheImageHeight:C,cacheItemExtraHeight:E,relayout:O}}function R(e,t,n,r,i){let a=y(`idle`),o=y(!1),s=null,c=!1,l=!1,u=0,f=!1,h=0;function g(){f||!l||!t.value||n.value||r.value||c||u>=5||(c=!0,u+=1,o.value=u>=5,a.value=`loading`,i())}function _(){let n=e.value;if(!n||!t.value||typeof IntersectionObserver>`u`)return;let r=++h;s=new IntersectionObserver(e=>{if(!(f||r!==h)){if(l=!!e[0]?.isIntersecting,!l){c=!1,u=0,o.value=!1;return}g()}},{rootMargin:`200px 0px`}),s.observe(n)}function b(){h+=1,s?.disconnect(),s=null,c=!1,l=!1,u=0,o.value=!1}return w([n,r],([e,t],[n])=>{a.value=t?`no-more`:e?`loading`:`idle`,!e&&!t&&(c=!1,n&&d(g))}),m(_),p(()=>{f=!0,b()}),w([e,t],()=>{b(),_()}),{status:v(a),paused:v(o),resume:()=>{n.value||r.value||f||(u=0,c=!1,o.value=!1,g())}}}const z=[`aria-label`,`onClick`,`onKeydown`],B={class:`waterfall__card`},V=[`src`,`alt`,`loading`,`onLoad`,`onError`],H={key:0,class:`waterfall__title`},U={key:0,class:`waterfall__footer`},W={key:0,class:`waterfall__status`},G={key:1,class:`waterfall__status waterfall__status--done`};var K=e(l({name:`C_WaterFall`,__name:`index`,props:{items:{},columns:{default:void 0},gap:{default:16},lazy:{type:Boolean,default:!0},infinite:{type:Boolean,default:!1},skeleton:{type:Boolean,default:!0},skeletonCount:{default:8},animationDuration:{default:300},breakpoints:{default:void 0},loading:{type:Boolean,default:!1},noMore:{type:Boolean,default:!1}},emits:[`load-more`,`item-click`,`image-loaded`,`image-error`],setup(e,{expose:l,emit:u}){let d=e,p=u,m=y(),h=y(),{columns:v,containerWidth:w}=I(m,n(()=>d.columns),n(()=>d.breakpoints)),{layoutItems:A,containerHeight:j,cacheImageHeight:M,cacheItemExtraHeight:N,relayout:P}=L(n(()=>d.items),v,w,n(()=>d.gap),{batchImageLoads:!0}),K=new Map,q=new Map,J=n(()=>new Map(A.value.map(e=>[e.item.id,e]))),Y=typeof ResizeObserver>`u`?null:new ResizeObserver(e=>{for(let t of e){let e=K.get(t.target),n=e===void 0?void 0:J.value.get(e);n&&N(n.item.id,t.target.getBoundingClientRect().height-n.height)}});function ee(e,t){let n=q.get(t);n!==e&&(n&&(Y?.unobserve(n),K.delete(n),q.delete(t)),e instanceof HTMLElement&&(q.set(t,e),K.set(e,t),Y?.observe(e)))}g(()=>{Y?.disconnect(),K.clear(),q.clear()});let X=n(()=>d.skeleton&&d.loading&&A.value.length===0),Z=n(()=>{let e=Math.min(24,Math.max(1,Math.floor(v.value))),t=w.value,n=Math.max(0,d.gap);if(!Number.isFinite(e)||t<=0)return[];let r=(t-(e-1)*n)/e;if(r<=0)return[];let i=Math.min(100,Math.max(0,Math.floor(d.skeletonCount??8))),a=Array(e).fill(0),o=[];for(let e=0;e<i;e++){let t=a.indexOf(Math.min(...a)),i=F[0]+e*73%(F[1]-F[0]);o.push({x:t*(r+n),y:a[t],width:r,height:i}),a[t]+=i+n}return o}),te=n(()=>Z.value.length===0?0:Math.max(...Z.value.map(e=>e.y+e.height))),ne=n(()=>X.value?te.value:j.value),{status:re,paused:Q,resume:$}=R(h,n(()=>d.infinite),n(()=>d.loading),n(()=>d.noMore),()=>p(`load-more`));function ie(e,t){let n=t.target;if(n.getAttribute(`src`)===e.item.src){if(n.naturalHeight&&n.naturalWidth){let t=n.naturalHeight/n.naturalWidth*e.width;M(e.item.id,t,e.width,e.item.src)}p(`image-loaded`,e.item)}}function ae(e){p(`image-error`,e.item)}function oe(){m.value?.scrollIntoView({behavior:`smooth`,block:`start`})}return l({relayout:P,scrollToTop:oe,getColumns:()=>v.value,getContainerHeight:()=>j.value}),(e,n)=>(_(),a(`div`,{ref_key:`containerRef`,ref:m,class:`c-waterfall`},[o(`div`,{class:`waterfall__body`,style:f({height:`${ne.value}px`,position:`relative`})},[X.value?(_(!0),a(t,{key:0},b(Z.value,(t,r)=>(_(),a(`div`,{key:`sk-${r}`,class:`waterfall__skeleton`,style:f({position:`absolute`,left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,height:`${t.height}px`,transition:`all ${d.animationDuration??C(300)}ms ease`})},[x(e.$slots,`skeleton`,{},()=>[n[0]||=o(`div`,{class:`waterfall__skeleton-inner`},null,-1)],!0)],4))),128)):i(`v-if`,!0),(_(!0),a(t,null,b(C(A),(t,n)=>(_(),a(`div`,{key:t.item.id,ref_for:!0,ref:e=>ee(e,t.item.id),class:`waterfall__item`,role:`button`,tabindex:`0`,"aria-label":t.item.title||`瀑布流项目 ${n+1}`,style:f({position:`absolute`,left:`${t.x}px`,top:`${t.y}px`,width:`${t.width}px`,transition:`all ${d.animationDuration??C(300)}ms ease`}),onClick:e=>p(`item-click`,t.item,n),onKeydown:[E(e=>p(`item-click`,t.item,n),[`enter`]),E(D(e=>p(`item-click`,t.item,n),[`prevent`]),[`space`])]},[x(e.$slots,`item`,{item:t.item,index:n,width:t.width,height:t.height},()=>[o(`div`,B,[o(`img`,{src:t.item.src,alt:t.item.title||``,loading:d.lazy?`lazy`:`eager`,class:`waterfall__image`,style:f({height:`${t.height}px`}),onLoad:e=>ie(t,e),onError:e=>ae(t)},null,44,V),t.item.title?(_(),a(`div`,H,S(t.item.title),1)):i(`v-if`,!0)])],!0)],44,z))),128))],4),d.infinite?(_(),a(`div`,U,[o(`div`,{ref_key:`sentinelRef`,ref:h,class:`waterfall__sentinel`},null,512),x(e.$slots,`footer`,{status:C(re),paused:C(Q),loadMore:C($)},()=>[d.loading?(_(),a(`div`,W,[c(C(k),{size:`small`}),n[1]||=o(`span`,null,`加载中…`,-1)])):d.noMore?(_(),a(`div`,G,` 没有更多了 `)):C(Q)?(_(),r(C(O),{key:2,size:`small`,onClick:C($)},{default:T(()=>[...n[2]||=[s(`继续加载`,-1)]]),_:1},8,[`onClick`])):i(`v-if`,!0)],!0)])):i(`v-if`,!0)],512))}}),[[`__scopeId`,`data-v-b89d8e04`]]);export{j as a,M as c,I as i,N as l,R as n,P as o,L as r,A as s,K as t,F as u};
|